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 を使用して電子メールを解析する必要があります。解析されたメッセージ オブジェクトの-method は、引数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 に答える