我知道要获取所有消息体,这是命令:
[imap_code] UID FETCH [uid] BODY.PEEK[TEXT]
因此,我获得了整个邮件正文。 但我需要排除部分附件。我只想要从发件人,文本和/或html写的消息。
有办法吗?
这是带有附件的完整原始html邮件
我想只获得
<div dir="ltr">This is the message body<div><ul><li>one</li><li>two</li></ul></div></div>
或纯文本,如果没有HTML版本
答案 0 :(得分:6)
消息在任意树的部分中布局,父项是multipart / *或message / rfc822类型,子项是其他类型。 FETCH BODY[...]
允许任意提取这些部分。
不幸的是,消息没有标准布局。您可以获取BODYSTRUCTURE项以获取消息的MIME布局,但是很难用眼睛解析。
话虽如此,有一些常见的消息布局可以帮助你完成大部分工作。
最简单的是只有一个正文的消息,text / html或text / plain。只需抓取BODY[TEXT]
。
下一个是多格式,包含text / html和text / plain。它的MIME结构通常如下所示:
+ multipart/alternative [TEXT]
|- text/plain [1]
\- text/html [2]
在这种情况下,您想要抓取BODY[2]
。
如果邮件是单体,带附件,则看起来像这样:
+ multipart/mixed or multipart/related [TEXT]
|- text/html or text/plain [1]
|- image/jpg [2]
| ...
\- image/gif
在这种情况下,您需要BODY[1]
。
最后是以下两种:带附件的多格式主体。它往往看起来像:
+ multipart/mixed or multipart/related [TEXT]
|-+ multipart/alternative [1]
| |- text/plain [1.1]
| \- text/html [1.2]
|- image/jpeg [2]
|- image/gif [3]
|...
\- image/png
在这种情况下,您可能需要BODY[1.2]
。您的示例消息属于此类型。
=
个转义符。如果它是base64,你将无法用眼睛解读它。 BINARY IMAP extension可以帮助解决这个问题,但这并未得到广泛部署。