python poplib.POP3解密base64

时间:2012-12-16 14:58:18

标签: python base64 pop3 poplib

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

2 个答案:

答案 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编码部分。