通过telnet获取imap正文消息

时间:2016-06-13 10:47:19

标签: shell email imap telnet

我知道要获取所有消息体,这是命令:

[imap_code] UID FETCH [uid] BODY.PEEK[TEXT]

因此,我获得了整个邮件正文。 但我需要排除部分附件。我只想要从发件人,文本和/或html写的消息。

有办法吗?

这是带有附件的完整原始html邮件

http://pastebin.com/FMEQdLM3

我想只获得

<div dir="ltr">This is the message body<div><ul><li>one</li><li>two</li></ul></div></div>

或纯文本,如果没有HTML版本

1 个答案:

答案 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]。您的示例消息属于此类型。

<小时/> 此外,可以使用Quoted-Printable或Base64编码对主体进行编码。不幸的是,Baseline IMAP没有为服务器提供任何解码方法。如果消息是ascii,则可以主要读取Quoted-Printable,但在整个正文中会有很多=个转义符。如果它是base64,你将无法用眼睛解读它。 BINARY IMAP extension可以帮助解决这个问题,但这并未得到广泛部署。