IMAP - 区分内联和常规附件的规则

时间:2017-08-23 10:40:00

标签: imap

我正在研究电子邮件客户端,我想知道决定附件是否是常规附件(可下载的文件,如pdf,视频,音频等)的正确算法... )或内联附件(这只是HTML字母的嵌入部分)。 直到最近,我已经检查了体型是否正确(假设消息部分不是多部分,否则我将递归地进行解析)不是TEXT。也就是说,无论是APPLICATION, IMAGEAUDIO还是VIDEO.如果是这种情况,我会查看第九个元素是否等于ATTACHMENT或{{ 1}}。我认为,如果它是INLINE,那么它是一个嵌入式HTML粒子,而不是常规附件。

但是,最近我收到的电子邮件中包含一些HTML邮件正文和常规附件。问题是它的身体结构看起来像这样:

INLINE

问题是,为什么可下载的pdf文件类型为 INLINE ?用于确定文件是嵌入的html粒子还是可下载文件的适当算法是什么?我应该查看父子类型以查看它是否为1. mutlipart/mixed 1.1. mutlipart/alternative 1.1.1. text/plain 1.1.2. multipart/relative 1.1.2.1. text/html 1.1.2.2. Inline jpeg 1.1.2.3. Inline jpeg 1.2. pdf inline (why 'inline'? Should be 'attachment') 1.3. pdf inline (why 'inline'? Should be 'attachment') 并忽略内联vs附件参数?

1 个答案:

答案 0 :(得分:1)

确实没有定义的“一刀切”算法。 inlineattachment是发件人设置的内容,并提示他们是否希望将其inline(自动呈现)显示为attachment(显示在列表),或两者都没有(没有偏好)。

还有一些有时被称为“嵌入式”的附件,它们是带有Content-ID的附件(这是在主体结构响应中),并且由< img>中的cid:引用引用;标签等。

所以,这几乎必须以启发的方式完成。

这实际上取决于您的需求和您的客户能力,但这里有一个您可能会考虑使用某些组合的启发式列表(其中一些是相互排斥的):

  1. 如果标记为“附件”,请将其视为附件。
  2. 如果它被标记为内联,那么您可以将其视为内联(image/*,如果您愿意可以text/*),那么它就是内联的。
  3. 如果它有Content-ID,请将其内联处理。
  4. 如果它有Content-ID,并且HTML部分引用它,则将其视为嵌入式(即HTML查看器将呈现它);如果没有引用它,请按照您的要求将其视为内联(或附件)。
  5. 如果它不是,并且它是您想要作为内联处理的内容,则将其视为内联。
  6. 如果不适用,请将其视为附件。
  7. 忽略处置,如果您愿意,将其视为内联(例如使所有图像始终内联)
  8. 此外,inline的原始版本仅表示发件人希望自动呈现;这经常与referenced by the HTML section(我称之为嵌入式)混为一谈。这些并不完全相同。