格式化电子邮件的最合适方式是什么?

时间:2014-08-21 15:37:09

标签: email javamail html-email email-attachments

使用JavaMail,我正在使用以下格式构建消息

+------------------------------------------------+
| multipart/related                              |
| +---------------------------+  +-------------+ |
| |multipart/alternative      |  | attachments | |
| | +-----------+ +---------+ |  |             | |
| | |text/plain | |text/html| |  |             | |
| | +-----------+ +---------+ |  |             | |
| +---------------------------+  +-------------+ |
+------------------------------------------------+ 

ASCII艺术归功于此问题的OP:http://www.coderanch.com/t/503380/java/java/Java-Mail-text-html-attachment

我觉得这是正确的格式,因为附件(image / gif,application / pdf等)对于理解整个消息非常重要。但是,我一直在做一些研究,并发现经常使用multipart/mixed

我应该用multipart/related替换multipart/mixed部分吗?如果是这样,为什么?

此格式的示例消息如下:

Content-Type: multipart/related; 
    boundary="----=_Part_6818257_562311419.1408632937947"

------=_Part_6818257_562311419.1408632937947
Content-Type: multipart/alternative; 
    boundary="----=_Part_6818256_1953685207.1408632937947"

------=_Part_6818256_1953685207.1408632937947
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

This is my message!
------=_Part_6818256_1953685207.1408632937947
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

<html><strong>This is my message!</strong></html>
------=_Part_6818256_1953685207.1408632937947--

------=_Part_6818257_562311419.1408632937947
Content-Type: application/pdf;name="document.pdf"
Content-Transfer-Encoding: base64
Content-ID: <attachment0>
X-Attachment-Id: attachment0

< insert lots of base64 encoding here >
------=_Part_6818257_562311419.1408632937947--

1 个答案:

答案 0 :(得分:1)

在做了一些搜索之后,我发现了这个post,这实际上符合我的关注点。

根据RFC规范,构建电子邮件消息的最佳方式似乎是以下格式:

+-----------------------------------------------------------+
| multipart/mixed                                           |
| +--------------------------------------+  +-------------+ |
| | multipart/alternative                |  | attachments | |
| | +------------+ +-------------------+ |  |             | |
| | | text/plain | | multipart/related | |  |             | |
| | |            | | +---------------+ | |  |             | |
| | |            | | | text/html     | | |  |             | |
| | |            | | | image/gif     | | |  |             | |
| | |            | | +---------------+ | |  |             | |
| | +------------+ +-------------------+ |  |             | |
| +--------------------------------------+  +-------------+ |
+-----------------------------------------------------------+ 

通过此消息配置,电子邮件客户端可以决定要显示的备用消息类型。此外,multipart/related构成与电子邮件的邮件部分相关的内容,不包括附件。

有关multipart/related from Wikipedia的更多说明:

  

multipart / related用于表示每个消息部分是a   整体的组成部分。它适用于复合对象   几个相互关联的组件 - 正确的显示不能   通过单独显示组成部分来实现。消息   由一个引用其他的根部分(默认情况下,第一个)组成   零件内联,可以反过来参考其他零件。消息部分   通常由“Content-ID”部分标题引用。的语法   引用是未指定的,而是由编码或   部分中使用的协议。

     

此子类型的一个常见用法是发送完整的网页   单个邮件中的图像。根部分将包含HTML   文档,并使用图像标签来引用存储在后者中的图像   部分。

     

在RFC 2387中定义

Microsoft Exchange的另一个great article引用解决方案。