import poplib
from email import parser
import email
host = 'pop.163.com'
username = 'xxx@163.com'
password = 'xxx'
pop_conn = poplib.POP3_SSL(host)
pop_conn.user(username)
pop_conn.pass_(password)
messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
messages = ["\n".join(mssg[1]) for mssg in messages]
def decode(s):
s = email.Header.decode_header(s)
if (s[0][1] == None):
s = s[0][0]
else:
s = s[0][0].decode(s[0][1])
return s
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
i = 0
for message in messages:
i = i + 1
subject = decode(message["Subject"])
mailName = "mail%d.%s" % (i, subject)
if (type(subject) != str):
subject = subject.encode("utf-8")
f = open(mailName + '.log', 'w');
print >> f, "Date: ", message["Date"]
print >> f, "From: ", message["From"]
print >> f, "To: ", message["To"]
print >> f, "Subject: ", subject
print >> f, "Data: "
j = 0
for part in message.walk():
j = j + 1
fileName = part.get_filename()
contentType = part.get_content_type()
if fileName:
fileName = decode(fileName)
data = part.get_payload(decode=True)
fileName = "%s.%d.%s.%s" % (mailName, j, message["Date"], fileName)
fEx = open(fileName, 'wb')
fEx.write(data)
fEx.close()
elif contentType == 'text/plain' or contentType == 'text/html':
data = part.get_payload(decode=True)
print >> f, data
f.close()
pop_conn.quit()
参考