我对哑剧消息的内容类型有一个困惑。假设我有一条哑剧消息。这是一条多部分消息,正文部分如下
- Mime 正文部分包含纯文本、html 文本(如中的一些字母)
正文加粗)
- 第二个哑剧身体部分包含附件,
- 第三个哑剧正文部分包含一张内联图像(通过 cid 从正文引用)
当我创建正文部分时,是否应该显式设置顶部 mime 消息的内容类型,然后设置每个正文部分?
如果是,那么在上面的例子中它们应该是什么?
multipart/alternative
建议使用 html,multipart/mixed
建议添加附件,multipart/related
建议内联。我正在使用所有这些,那么完整消息和不同正文部分的内容类型应该是什么?
仅供参考,我尝试复制上述场景,其中我没有为整个 MimeMessage 或正文部分设置内容类型。
但我仍然得到了预期的东西,比如纯文本、正文中的粗体字母、附件、詹姆斯上正确位置的内联图像
为什么詹姆斯在没有设置内容类型的情况下解释哑剧信息和身体部位,以及为什么它以正确的方式显示它们?
参考代码
MimeMessage msg = new MimeMessage(mailSession);
MimeMultipart mpart = new MimeMultipart();
MimeBodyPart bp = new MimeBodyPart();
bp.setText("plain text and html text like<b>Test</>", CHARSET_UTF_8, MESSAGE_HTML_CONTENT_TYPE);
// add message body
mpart.addBodyPart(bp);
// adding attachment
MimeBodyPart bodyPart = new MimeBodyPart();
bodyPart.setFileName("WordFile1");
file = new File("word file");
DataSource source = new FileDataSource(file);
bodyPart.setDataHandler(new DataHandler(source));
mpart.addBodyPart(bodyPart);
// adding image inline
MimeBodyPart bodyPart2 = new MimeBodyPart();
bodyPart2.setFileName("inline image");
file2 = new File("image1");
DataSource source2 = new FileDataSource(file);
bodyPart2.setDataHandler(new DataHandler(source));
bodyPart2.setDisposition(MimeBodyPart.INLINE);
bodyPart2.setHeader("Content-ID", "Unique-CntentId");
bodyPart2.setHeader("Content-Type", "image/jpeg");
mpart.addBodyPart(bodyPart2);
// At last setting multipart In MimeMessage
msg.setContent(mpart);
通过上面的代码,我在与 James 集成的 ThunderBird 中的正确位置获得了正确的 html 文本、纯文本、内联图像和附件。
所以我不明白何时何地设置multipart/mixed
, multipart/alternative
, multipart/related
作为 Content-Type 还是邮件服务器内部设置它?