我正在尝试使用此python代码将pop3中的所有电子邮件下载到文本文件中:
def Download(pop3,username,password):
try:
Mailbox = poplib.POP3(pop3, '110')
Mailbox.user(username)
Mailbox.pass_(password)
numMessages = len(Mailbox.list()[1])
for i in range(numMessages):
logfile = open(username + '.log', 'a')
logfile.write('\n')
for msg in Mailbox.retr(i+1)[1]:
print msg
logfile.write('%s\n' % (msg))
logfile.close()
Mailbox.quit()
except KeyboardInterrupt:
print 'Exit'
sys.exit(1)
我的问题是电子邮件是在base64中加密的, 我怎么才能只调用电子邮件正文进行解密?
base64.b64decode(body)
答案 0 :(得分:3)
您应该使用email
- 包来解析电子邮件。解析后的消息对象上的get_payload
- 方法可以在使用decode=True
参数时为您处理解码。
对于简单(非多部分)消息,它看起来像这样:
import email.parser
...
parser = email.parser.FeedParser()
for msg in Mailbox.retr(i+1)[1]:
parser.feed(msg + '\n')
message = parser.close()
payload = message.get_payload(decode=True)
print(payload)
...
答案 1 :(得分:1)
在文字上尝试以下内容:
import base64
base64.decodestring(string_to_decode)
举个例子:
In [1]: import base64
In [2]: base64.encodestring("alpha beta gamma")
Out[2]: 'YWxwaGEgYmV0YSBnYW1tYQ==\n'
In [3]: test = base64.encodestring("alpha beta gamma")
In [4]: base64.decodestring(test)
Out[4]: 'alpha beta gamma'
在你的情况下,你应该:
msg = base64.decodestring(msg)
logfile.write('%s\n' % (msg))
注意什么是msg
;如果它不是base64字符串,则应该拆分结果,以便获得所需的base64编码部分。