2012-12-16 51 views
0

我試圖下載從POP3所有電子郵件與此Python代碼的文本文件:蟒蛇poplib.POP3解密的base64

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) 
+1

這是一個「編碼」,而不是「加密」。 – tripleee

回答

3

您應該使用email -package解析電子郵件。在使用decode=True參數時,解析消息對象上的方法get_payload可以爲您處理解碼。

對於簡單的(非多)消息,它會是這個樣子:

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) 
... 
+0

numMessages = LEN(Mailbox.list()[1]) \t \t爲i的範圍(numMessages): \t \t \t解析器= email.parser.FeedParser() \t \t \t爲MSG在Mailbox.retr(ⅰ 1)[1]: \t \t \t \t parser.feed(MSG + '\ n') \t \t \t消息= parser.close() \t \t \t有效載荷= message.get_payload(解碼=真) \t \t \t打印(有效載荷) \t \t Mailbox.quit() \t IM編輯我的腳本蝙蝠不工作... 文件 「C:\ GetMails.py」 17行,在下載 解析器= email.parser .FeedParser() NameError:全局名稱「電子郵件」沒有定義當然你需要先導入email.parser包 – AutoSoft

+0

... – mata

+0

什麼是包進口的名字嗎? 即時嘗試:導入解析器 而不是工作腳本。 – AutoSoft

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編碼部分。