为MimeMessage设置Content-Type?

我对mime消息的内容类型有一个困惑。 说我有一个mime消息。 这是一个多部分的消息,身体部位是这样的

  1. Mime身体部分包含纯文本,html文本(像一些粗体字母)
  2. 第二个哑体部分包含附件,
  3. 第三个mime身体部位包含一个内嵌图像(从身体带cid引用)

当我创建正文部分时,我应该明确设置顶级mime消息的内容类型,然后是每个正文部分吗?

如果是,那么它们在上面的例子中应该是什么?

对于html建议使用multipart/alternative ,对附件建议使用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 likeTest", 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/mixedmultipart/alternativemultipart/related为Content-Type或邮件服务器是否在内部设置它?

如果我理解你要做什么,你想要一个具有这种结构的消息:

  multipart/mixed multipart/alternative text/plain - a plain text version of the main message body multipart/related text/html - the html version of the main message body image/jpeg - an image referenced by the main body application/octet-stream (or whatever) - the attachment 

这意味着三个嵌套的多部分。 您需要为默认的“混合”以外的每个多部件指定子类型。

多部分/混合部分和多部分/替代部分相对简单。 多部分/相关部分更复杂,您可能希望阅读RFC 2387和/或找到一些其他教程来帮助您。

您可以通过删除multipart / related来简化结构,并且只需将html文本引用到Internet上的某个位置即可。

您还应该测试所有您关心的邮件阅读器是否正确显示具有此结构的邮件。 一些邮件阅读器比其他具有复杂结构的邮件阅读器做得更好。