【问题标题】:Fetch imap body message by telnet通过 telnet 获取 imap 正文消息
【发布时间】:2016-10-13 18:07:00
【问题描述】:

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

[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 版本,则为纯文本

【问题讨论】:

  • 请使用来自实际日志的示例条目和您期望的实际输出来更新问题
  • 好的,我已经提供了一个例子
  • 你的所有消息都像这个例子吗?

标签: shell email imap telnet


【解决方案1】:

消息被布置在任意的部件树中,父项是 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 扩展](https://www.rfc-editor.org/rfc/rfc3516) 可以帮助解决这个问题,但这并没有被广泛部署。

【讨论】:

  • [对不起,我的 ascii 艺术树]
  • 有人明白这个答案有多棒吗?好吧,尝试在任何 RFC 中找到这种细节...... OP,立即接受并给这个人买杯咖啡。
猜你喜欢
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 2014-05-16
相关资源
最近更新 更多