【发布时间】:2013-11-03 14:38:48
【问题描述】:
我只想从 Gmail(通常是 imap 服务器)获取电子邮件文本正文,而无需下载整个邮件。
如果我获取 RC822,我可以得到一切都很好:
mail_box.fetch(message_ids, '(RFC822)')
但问题是,如果我有太多的邮件和附件,这会花费很多时间。
我可以得到我需要的标题和正文:
mail_box.fetch(message_ids, '(RFC822.HEADER BODY.PEEK[1])')
但是这样我无法解析文本正文,它的格式很奇怪:
'\r\n------=_NextPart_001_0011_01CB63DF.D39BA1C0\r\nContent-Type: text/plain;\r\n\tcharset="iso-8859-1"\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\nRafael, ...other content like html tags and css...------=_NextPart_001_0011_01CB63DF.D39BA1C0--\r\n'
尝试使用 email.message_from_string 和 quopri 模块对其进行解析,但到目前为止没有运气。
有可能吗?要获取格式如 RFC822 但不下载附件的消息?
【问题讨论】:
-
------=_NextPart_001_0011_01CB63DF.D39BA1C0提示消息是带有标题字段Content-Type: multipart/....; boundary=----=_NextPart...的多部分消息。也许您必须将Content-Type标头传递给解码主体的函数,以便它知道如何处理 NextPart 事物。一些附加信息:en.wikipedia.org/wiki/MIME#Multipart_messages -
要么获取并解析 BODYSTRUCTURE,你可以只获取你需要的部分,或者获取 MIME 部分标头以配合 1。MIME 消息非常复杂,IMAP 中没有办法说“只需给出正文”(哪一个?HTML?文本?RTF?PDF?),所以您可以猜测,或者您下载 BODYSTRUCTURE 并确定您真正想要的部分并获取它,例如 1.1 或 1.1.1。 ...
-
我做到了,我获取了第一个 BODYSTRUCTURE 并发现纯文本消息为 1(这就是我获取 BODY.PEEK[1] 的原因)。但是获取这个,它在文本字符串上带有这个奇怪的标题。我正在使用切片和子字符串手动解析,只是想知道我是否有更好的方法。