0

我正在尝试使用以下 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)
4

2 回答 2

3

您应该使用email-package 来解析电子邮件。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)
...
于 2012-12-16T15:50:51.203 回答
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 编码部分。

于 2012-12-16T15:07:41.253 回答