2017-08-23 41 views
0

我正在使用电子邮件客户端,我不知道什么是正确的算法来决定附件是否为常规附件(可下载的文件,如pdf,视频,音频,等等)或内联附件(这只是HTML信函的嵌入部分)。 直到最近,我检查了身体类型(假设消息部分不是多部分,否则我会递归地解析ir)不是TEXT。也就是说,不管是APPLICATION,IMAGE,AUDIO还是VIDEO.如果是这样的话,我看第9个元素是否等于ATTACHMENTINLINE。我认为如果它是INLINE,那么它就是一个嵌入式HTML粒子,而不是一个普通的附件。IMAP - 用于区分内嵌和常规附件的规则

但是,最近我有一封电子邮件,其中包含一些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') 

的问题是,为什么下载的PDF文件类型INLINE的?什么是确定文件是嵌入html粒子还是可下载文件的适当算法?我应该看父母子类型来查看它是否为relative,并忽略内联与附件参数?

回答

1

真的没有定义一种适用于所有人的算法。 inlineattachment是发件人设置的内容,并暗示他们是要将其显示为inline(自动呈现),还是以attachment(显示在列表中)或两者均不显示(无偏好)。

还有有时被称为“嵌入”附件,其是与Content-ID附件(这是在本体结构的响应),并通过在< img>标签等中的cid:引用所引用。

所以,这非常需要启发式地完成。

这真的取决于你的需要和您的客户端功能,但这里是你可以考虑使用一些组合(其中一些是相互排斥的)启发式的列表:

  1. 如果它被标记为“附件',把它当作附件。
  2. 如果标记为内联,并且它可以视为内联(image/*,或许text/*,如果您愿意),那么它是内联的。
  3. 如果它有一个Content-ID,请将它内联处理。
  4. 如果它具有Content-ID,并且HTML部分引用它,则将其视为嵌入式(即,HTML查看器将呈现它);如果没有引用它,请按照您的要求规定将其视为内联(或附件)。
  5. 如果它既不是,也是你想要视为内联的东西,然后将它视为内联。
  6. 如果没有适用,请将其视为附件。
  7. 忽略的配置,如果你希望把它作为内联(如使所有图像总是在线)

而且,inline原始版本只是意味着发送者希望它会自动呈现;这通常与referenced by the HTML section(我称之为嵌入)混淆。这些不完全相同。