Python imaplib下载Gmail文本而无需下载完整附件

时间:2013-03-24 10:37:34

标签: python imap gmail-imap imaplib

我在python中使用'imaplib'来从Gmail帐户中获取电子邮件。但我只是想知道电子​​邮件的内容,附件的标题,但不需要下载完整的附件。

默认情况下,

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

将返回电子邮件的整个部分,包括在返回数据中编码为文本的整个附件,这有时是巨大且不必要的。

我搜索了互联网和stackOverflow以寻找答案。其中许多人提到使用

myGmail.fetch(mailUid, 'BODYSTRUCTURE')

首先确定电子邮件结构,然后确定要下载的部分。我还阅读了关于imap4协议的RFC 3501文档,在which中提到我可以使用

  

BODY []<>   在Fetch命令中下载特定的正文部分。

但是我在python imaplib中尝试了很多命令,如下所示:

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

但所有这些都失败并显示错误消息:

  

错误:FETCH命令错误:BAD ['无法解析命令']

所以任何人都可以告诉我如何在python imaplib中使用此命令用于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") "<image001.jpg@01CD029F.6831C440>" "image001.jpg" "BASE64" 4070
    ) 
    "RELATED"
  )
  ("APPLICATION" "PDF" ("NAME" "SAC 2012.pdf") NIL "SAC 2012.pdf" "BASE64" 20638)
  "MIXED"
 )
 )

感谢!!!

1 个答案:

答案 0 :(得分:2)

只需将BODY[0]替换为(BODY[1])