gpt4 book ai didi

Python 和 imaplib : Obtain attachment names or body without downloading full email

转载 作者:行者123 更新时间:2023-11-28 21:25:41 26 4
gpt4 key购买 nike

我在 Django 中有一个电子邮件客户端。目前支持使用 imaplib 的 GMail 帐户。

我的问题是:我想获取附件名称而不必下载完整的电子邮件。目前,为了获取附件名称或电子邮件正文,我需要使用带有参数 (RFC822) 的获取功能下载整个电子邮件。

我知道我只能使用 HEADER.FIELDS 获取特定字段,例如从 cc 获取主题。但是有没有办法在不下载整封电子邮件的情况下获取附件名称或电子邮件正文?

我的具体意思是:假设我有一封 30Mb 的电子邮件,正文中有一行文本和两个 15Mb 的附件。我想在不下载完整的 30Mb 正文的情况下获取附件名称和那行文本。

谢谢

最佳答案

假设您在问我认为您在问的问题,请执行以下操作:

首先,获取BODYSTRUCTURE。假设 gmail 的 IMAP 服务器支持这个,你会得到类似这样的信息:

(("TEXT" "PLAIN" ("CHARSET" "UTF-8") NIL NIL "QUOTED-PRINTABLE" 56 1 NIL NIL NIL NIL)
("TEXT" "HTML" ("CHARSET" "UTF-8") (NAME "") NIL NIL "BASE64" 12345 NIL
("attachment" ("FILENAME" "")) NIL NIL)
("IMG" "JPEG" (NAME "funny picture") NIL NIL "BASE64" 56789 NIL
("attachment" ("FILENAME" "image.jpg")) NIL NIL))
"MIXED" ("BOUNDARY" "----_=_NextPart_001_1234ABCD.56789EF0") NIL NIL NIL)

然后获取(BODY ENVELOPE)是结构有一个。

如果你看RFC3501 7.4.2 , 它解释了如何处理这些。

一旦确定 (BODY[1])(BODY[2]) 是主要内容的纯文本和 HTML 版本,而 (BODY[3]) 是第一个真正的附件,你通过获取 (BODY[1]) 下载纯文本正文,你就得到了名称来自结构的附件。

抱歉,这里没有代码。我认为 imaplib 或任何与 stdlib MIME 和邮件相关的模块都不会为您完成困难的部分(解释结构),但我还没有实际检查过,所以我' d 先看那里,如果没有,就去 PyPI 看看有没有人已经写过代码。

好吧,实际上,首先我只是获取特定的 BODYSTRUCTURE(BODY ENVELOPE)(BODY[3])消息以确保在编写一大堆代码之前 gmail 具有完整的支持......

PS,如果最坏的情况发生,如果你的用例像你描述的那样简单和严格,你总是可以获取 BODYSTRUCTURE(BODY[1]),如果失败,回退到 RFC822,并通过在结构上运行一个 hacky regexp 而不是真正的解析来获取附件名称。除了一次性脚本或快速而肮脏的原型(prototype)以了解 gmail 之外,我不会写这篇文章,但对于那些情况,我可能会。

关于Python 和 imaplib : Obtain attachment names or body without downloading full email,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13847821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com