【发布时间】:2012-10-19 14:12:12
【问题描述】:
我对 mime 消息的内容类型有一个困惑。假设我有一条 mime 消息。这是一个多部分的消息,正文部分是这样的
- Mime 正文部分包含纯文本、html 文本(如 正文粗体)
- 包含附件的第二个 mime 正文部分,
- 第三个 mime 正文部分包含一个内联图像(从带有 cid 的正文引用)
当我创建正文部分时,我是否应该明确设置顶部 mime 消息的内容类型,然后是每个正文部分?
如果是,在上面的例子中它们应该是什么?
multipart/alternative 建议用于 html,multipart/mixed 建议用于附件,multipart/related 建议用于内联。我都在使用它们,那么完整消息和不同正文部分的 content-Type 应该是什么?
只是为了提供信息,我试图复制上述场景,我既没有为整个 MimeMessage 也没有为正文部分设置内容类型。
但我仍然得到了预期的东西,比如纯文本、正文中的粗体字母、附件、james 上的内联图像在正确的位置
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、multipart/alternative、multipart/related 设置为 Content-Type 还是邮件服务器内部设置的?
【问题讨论】:
标签: java jakarta-mail mime-types mime-message