shell - 通过 telnet 获取 imap body 信息

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

最佳答案

消息被放置在一个任意的部件树中,父项是 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) 可以帮助解决这个问题,但并未广泛部署。

关于shell - 通过 telnet 获取 imap body 信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37787767/

相关文章:

c - 设计shell时如何处理Control-C信号?

email - Win8/WinRT-如何在电子邮件正文中添加换行符

c# - 以编程方式生成的 HTML 电子邮件被 Outlook 归类为垃圾邮件

java - 是否可以使用 JavaMail 获取电子邮件源?

java - 读取javaMail中所有未读消息/最近消息

php - 如何从源代码中获取PHP版本?

linux - 是否可以将 awk 中的打印语句通过管道传输到多个文本文件?

asp.net - 如何让旧的 VBScript ASP sendemail 在 Azure 上运行?

python - 是否有一个工具包可以为远程 IMAP 服务器提供基于 Web 的 API(xmlrpc、REST 等)?

r - 如何在shell脚本中运行R代码?