2009-08-20 84 views
3

我正在使用python在服務器(POP3)上打開電子郵件。每封電子郵件都有一個附件,它本身就是轉發的電子郵件。從電子郵件的附件中提取To:標題

我需要從附件中獲取「To:」地址。

我正在使用python試圖幫助我學習語言,而且我還不是那麼好!

我已經的代碼是這個

import poplib, email, mimetypes 

    oPop = poplib.POP3('xx.xxx.xx.xx') 
    oPop.user('[email protected]') 
    oPop.pass_('xxxxxx') 

    (iNumMessages, iTotalSize) = oPop.stat() 

    for thisNum in range(1, iNumMessages + 1): 
      (server_msg, body, octets) = oPop.retr(thisNum) 
      sMail = "\n".join(body) 

      oMsg = email.message_from_string(sMail) 

      # now what ?? 

我知道我有電子郵件作爲電子郵件類的實例,但我不知道怎麼去附着

我知道使用

sData = 'To' 
     if sData in oMsg: 
     print sData + "", oMsg[sData] 

從主消息得到'收件人:'標題,但是如何從附件獲取?

我已經試過

for part in oMsg.walk(): 
    oAttach = part.get_payload(1) 

但我不知道如何處理oAttach對象做。我試圖將它變成一個字符串,然後將它傳遞給

oMsgAttach = email.message_from_string(oAttach) 

但是這樣做什麼都不做。我有點淹沒python文檔,需要一些幫助。提前致謝。

+0

哪個電子郵件客戶端發送電子郵件? – codeape 2009-08-20 18:04:18

+0

@codeape - 我不知道。電子郵件來自yahoo和hotmail,附件是從人們訂閱的郵件列表發送的原始電子郵件,然後向yahoo和hotmail投訴。這是嘗試自動化抑制列表 – 32423hjh32423 2009-08-21 06:47:59

+0

您的解決方案是什麼?這從未更新過答案。 – 2010-02-16 14:51:41

回答

1

沒有在我的收件箱中有代表性的電子郵件,很難通過這個工作(我從來沒有用過poplib)。話雖如此,有些事情可能從我調查的點點幫助:

首先,使大量使用命令行界面蟒蛇和dir()help()功能的:這些可以告訴你許多關於什麼是未來出。您可以在代碼中始終插入help(oAttach)dir(oAttach)print oAttach,以瞭解當它循環時發生了什麼。如果您將它逐行輸入命令行界面,則在這種情況下更容易。

我想認爲你需要做的是通過每個附件,並找出它是什麼。對於傳統的電子郵件附件,它可能Base64編碼,所以像這可能幫助:

#!/usr/bin/python 
import poplib, email, mimetypes 

# Do everything you've done in the first code block of your question 
# ... 
# ... 

import base64 
for part in oMsg.walk(): 
    # I've removed the '1' from the argument as I think you always get the 
    # the first entry (in my test, it was the third iteration that did it). 
    # However, I could be wrong... 
    oAttach = part.get_payload() 
    # Decode the base64 encoded attachment 
    oContent = b64decode(oAttach) 
    # then maybe...? 
    oMsgAttach = email.message_from_string(oContent) 

請注意,您可能需要檢查oAttach在每種情況下,以檢查它看起來像一個消息。當你有你的sMail變量時,打印出來到屏幕上。然後你可以在那裏尋找類似Content-Transfer-Encoding: base64的東西,這會給你一個關於附件如何編碼的線索。

正如我所說,我沒有使用任何poplib,電子郵件或mimetypes模塊,所以我不確定這是否會有所幫助,但我認爲它可能會指出你在正確的方向。

+0

感謝您的支持。我已經整理出來了。我會將解決方案發布到我的博客上,並很快將其添加回來 – 32423hjh32423 2009-08-21 09:18:34

相關問題