2013-03-24 164 views
1

我在python中使用'imaplib'從Gmail帳戶獲取電子郵件。但我只想知道電子​​郵件的內容,附件的標題,但不需要下載完整的附件。Python imaplib下載Gmail文本沒有下載完整附件

默認情況下,

myGmail = imaplib.IMAP4_SSL(...) 
.... 
(respCode, data) = myGmail.fetch(mailUid, 'RFC822') 

將返回郵件的整個部分,包括在返回的數據編碼爲文本整個附件,這有時是巨大的和不必要的。

我已經通過互聯網搜索和stackoverflow找到答案。其中許多人提到要使用

myGmail.fetch(mailUid, 'BODYSTRUCTURE') 

首先確定電子郵件結構,然後確定要下載的部分。而且我也看到了RFC 3501文檔有關IMAP4協議,在which提到它,我可以使用

BODY[]<> to download the specific body part in Fetch command.

但我已經試過在python imaplib許多命令像下面:

(rCode, data) = myGmail.fetch(mailUid, 'BODY[0]') 
(rCode, data) = myGmail.fetch(mailUid, 'BODY0') 
(rCode, data) = myGmail.fetch(mailUid, 'BODY[TEXT]') 

但所有其中有錯誤消息失敗:

error: FETCH command error: BAD ['Could not parse command']

因此,任何人都可以告訴我如何在python imaplib for Gmail中使用此命令?

而只是供大家參考,對於上面的例子電子郵件BODYSTRUCTURE是:

(BODY 
(
    (
    (
     ("TEXT" "PLAIN" ("CHARSET" "us-ascii") NIL NIL "QUOTED-PRINTABLE" 1742 33) 
     ("TEXT" "HTML" ("CHARSET" "us-ascii") NIL NIL "QUOTED-PRINTABLE" 17976 485) "ALTERNATIVE" 
    ) 
    (
     "IMAGE" "JPEG" 
     ("NAME" "image001.jpg") "<[email protected]>" "image001.jpg" "BASE64" 4070 
    ) 
    "RELATED" 
) 
    ("APPLICATION" "PDF" ("NAME" "SAC 2012.pdf") NIL "SAC 2012.pdf" "BASE64" 20638) 
    "MIXED" 
) 
) 

謝謝!

+2

請[不要遺漏代碼](http://sscce.org) - 這使得很難追查和重現問題。空白用戶名和密碼很好,但除此之外,一切都應該準備好粘貼。 – phihag 2013-03-24 10:59:16

+0

@JXITC - 你有沒有想過這個?如果是這樣,請分享您的代碼:) – 2013-03-31 16:52:49

+1

@ZacharyBurt實際上最終我沒有嘗試獲取BODY結構,然後解析。相反,我只是簡單地下載所有內容(包括附件)一次。這是一個快速和骯髒的解決方案。 – JXITC 2013-04-01 14:08:04

回答

2

只需將BODY[0]替換爲(BODY[1])即可。

+0

身體部位計數從1開始。 – Max 2013-03-24 15:49:13