为MimeMessage设置Content-Type?

时间:2012-10-30 08:59:59

标签: java javamail mime-types mime-message

我对mime消息的内容类型感到困惑。说我有一个mime消息。它是一个多部分的消息,正文部分就是这样的

  1. Mime身体部位包含纯文本,html文本(如。中的一些字母) 大胆的身体)
  2. 包含附件的第二个哑体部分,
  3. 第三个mime身体部位,包含一个内联图像(从带有cid的身体引用)
  4. 当我创建正文部分时,我应该明确设置顶级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 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/mixedmultipart/alternativemultipart/related设置为Content-Type或邮件服务器是否在内部设置它?

1 个答案:

答案 0 :(得分:2)

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

  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文本引用到互联网上的某个图像来简化结构。

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