通过telnet获取imap正文消息

mat*_*iux 0 email shell imap telnet

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

[imap_code] UID FETCH [uid] BODY.PEEK[TEXT]
Run Code Online (Sandbox Code Playgroud)

因此,我获得了整个邮件正文.但我需要排除部分附件.我只想从发件人,文本和/或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>
Run Code Online (Sandbox Code Playgroud)

如果没有html版本,则为纯文本

Max*_*Max 7

消息在任意树的部分中布局,父项是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]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,你想要获取BODY[2].

如果消息是带有附件的单体,则它看起来像这样:

+ multipart/mixed or multipart/related  [TEXT]
|- text/html or text/plain              [1]
|- image/jpg                            [2]
| ...
\- image/gif
Run Code Online (Sandbox Code Playgroud)

在这种情况下你想要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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可能想要BODY[1.2].您的示例消息属于此类型.


此外,可以使用Quoted-Printable或Base64编码对主体进行编码.不幸的是,Baseline IMAP没有为服务器提供任何解码方法.如果消息是ascii,则可以主要读取Quoted-Printable,但=在整个正文中会有很多转义.如果它是base64,你将无法用眼睛解读它.该BINARY IMAP扩展可以帮助这一点,但这不是广泛部署.

  • 有人明白这个答案有多棒吗?好吧,尝试在任何 RFC...OP 中找到此类细节,立即接受并请这个人喝杯咖啡。 (2认同)