【问题标题】:Python imaplib download Gmail Text without downloading the full attachmentPython imaplib 下载 Gmail 文本而不下载完整附件
【发布时间】:2013-03-13 21:48:16
【问题描述】:

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

默认情况下,

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

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

我在互联网和 stackOverflow 上进行了搜索以找到答案。其中许多提到使用

myGmail.fetch(mailUid, 'BODYSTRUCTURE')

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

身体[] 在 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 ['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") "<image001.jpg@01CD029F.6831C440>" "image001.jpg" "BASE64" 4070
    ) 
    "RELATED"
  )
  ("APPLICATION" "PDF" ("NAME" "SAC 2012.pdf") NIL "SAC 2012.pdf" "BASE64" 20638)
  "MIXED"
 )
 )

谢谢!!!

【问题讨论】:

  • don't leave out code - 这使得追踪和重现问题变得困难。可以将用户名和密码留空,但除此之外,所有内容都应该可以粘贴了。
  • @JXITC - 你有想过这个吗?如果是这样,请分享您的代码:)
  • @ZacharyBurt 实际上最终我没有尝试获取 BODY 结构然后解析。相反,我只是简单地下载所有内容(包括附件)一次。这是一个快速而肮脏的解决方案。
  • @JXITC 感谢您的回复。我在这里提出了类似的问题。 stackoverflow.com/questions/15731920/… 欢迎关注,我会在 22 小时内增加赏金...

标签: python imap gmail-imap imaplib


【解决方案1】:

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

【讨论】:

  • 身体部位计数从 1 开始。
猜你喜欢
  • 1970-01-01
  • 2018-07-04
  • 2012-11-30
  • 2022-11-11
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
相关资源
最近更新 更多