2017-06-13 90 views
0

我正在嘗試創建一個應用程序,需要遞歸檢查新電子郵件的電子郵件地址,然後執行其他一些操作;不過,我在獲取電子郵件正文時遇到了一些問題。我在imapclient旁邊使用了pyzmail模塊,並且使用了自動化鏜孔工具(python 3.6)。這是我的代碼:通過Pyzmail模塊遞歸獲取電子郵件正文

mail = imapclient.IMAPClient('imap.gmail.com', ssl=True) 
mail.login('email', 'password') 
mail.select_folder('INBOX', readonly=False) 
uid = mail.gmail_search('NC') 
for i in uid: 
    message = mail.fetch(i, ['BODY[]'], 'FLAGS') 
    msg = pyzmail.PyzMessage.factory(message[i][b'BODY[]']) 
    msg.html_part.get_payload().decode(msg.text_part.charset) 

但它不工作。我基本上已經嘗試過不同形式的代碼,但無濟於事,真的沒有那麼多可以幫助我的例子。我有點蟒蛇新手。任何人都可以幫忙嗎? 謝謝,

編輯

我意識到,我犯了一個錯誤,並固定了一下代碼:

server = imapclient.IMAPClient('imap.gmail.com', ssl=True) 
server.login('[email protected]', 'rabbitrun88ve') 
server.select_folder('INBOX', readonly=True) 
uids = server.gmail_search('NC') 
for i in uids: 
    messages = server.fetch(i, ['BODY[]']) 
    msg = pyzmail.PyzMessage.factory(messages[b'BODY[]']) 

我遇到的問題是與最後一行,這是我不知道如何使用迭代器創建的變量進行饋送。它拋出了這條消息:

ValueError: input must be a string a bytes, a file or a Message 
+0

我沒有看到你的「遞歸」在這裏的意思。你的問題陳述中沒有遞歸。 – Max

+0

@Max我正在嘗試將包含NC的電子郵件的內容作爲主題。所以如果有3封電子郵件涉及這個主題,我想提取這些信息。例如:如果一封電子郵件的內容是「你好,這是一個測試」,那麼這就是我想要的。也許我用遞歸的術語來說是錯誤的。對於那個很抱歉。 –

回答

0

我不知道你是否仍然有這個問題,但對於未來可能有類似問題的人。 我注意到最後一行可能是罪魁禍首的一點遺漏。

msg = pyzmail.PyzMessage.factory(messages[b'BODY[]']) 

你省略的字母「i」變量循環

msg = pyzmail.PyzMessage.factory(messages[i][b'BODY[]'])