我对 mime 消息的内容类型感到困惑。假设我有一条 mime 消息。这是一个多部分消息,正文部分是这样的
- 包含纯文本、html 文本的 Mime 正文部分(如正文中的一些粗体字母)
- 包含附件的第二个 mime 身体部分,
- 第三个 mime 正文部分包含一个内联图像(从带有 cid 的正文引用)
当我创建正文部分时,我是否应该明确设置顶部 mime 消息的内容类型,然后是每个正文部分?
如果是,在上面的例子中它们应该是什么?
multipart/alternative
建议用于 html,multipart/mixed
建议用于附件,multipart/related
建议用于内联。我正在使用所有这些,那么完整消息和不同正文部分的内容类型应该是什么?
只是为了提供信息,我试图复制上面的场景,我既没有为整个 MimeMessage 也没有为正文部分设置内容类型。
但我仍然得到了预期的东西,比如纯文本、正文中的粗体字母、附件、詹姆斯在正确位置的内联图像
为什么 James 在不设置内容类型的情况下解释 mime 消息和正文部分,又为什么以正确的方式显示它们?
参考代码
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
设置为 Content-Type 还是邮件服务器在内部设置它?multipart/alternative
multipart/related