【问题标题】:How to add inline images and attach files in Java mail如何在 Java 邮件中添加内联图像和附加文件
【发布时间】:2011-11-19 00:53:28
【问题描述】:

我正在使用 Java 邮件 API 发送电子邮件。我必须通过电子邮件发送包含 HTML 的 <img> 标记指定的内联图像和一些附件的消息。

对于包含内嵌图像和附件文件部分的MimeMultipart,我应该使用什么内容类型?

MimeMultipart multipartInline = new MimeMultipart(?);

【问题讨论】:

  • MimeMultipart multipartInline = new MimeMultipart(?);我应该放在什么类型。

标签: java jakarta-mail


【解决方案1】:

这里需要考虑三种不同类型的多部分内容:

  • multipart/mixed - 通常用于包含主消息体 “附件”
  • multipart/alternative - 用于发送相同的数据 不同的格式,例如纯文本和 html
  • 多部分/相关 - 通常用于包含 html 正文部分和引用的图像 通过那个html

您可以以各种有趣的方式嵌套这些不同的类型。

要回答原始问题,您需要具有以下结构的消息:

main message
  multipart/mixed
    multipart/related
      text/html - main html content
      image/jpg - an image referenced by the html
    application/pdf - or whatever, for the first attachment

html 部分将希望使用“cid:” URL 引用来引用图像部分, 并且图像部分将需要一个相应的 Content-ID 标头。 RFC2387 有更多详细信息。您可能可以通过搜索找到一些示例 JavaMail forum。

【讨论】:

  • +1 ,感谢您提供如此清晰易懂的解释。
【解决方案2】:

您必须为每个附件使用一个或两个标题:

如果是普通附加:

  • 内容处置:附件;文件名=...

如果是内联附件(邮件图片)

  • 内容处置:内联
  • 内容 ID:任意 ID

这是为我前段时间编写的一个小型发送程序提取的:

bodyPart 是MimeBodyPart。

bodyPart.setHeader("Content-Disposition", disp + "; filename=" + encodedFileName);
bodyPart.setHeader("Content-Transfer-Encoding", "base64");
if (att.getContextId() != null && att.getContextId().length() > 0)
    bodyPart.setHeader("Content-ID", "<" +  att.getContextId() + ">");

其中:disp 具有inline 或attachment,而att.getContextId() 具有内联附加的任意ID。

我的 HTML 邮件秘诀

message has via .setContent(...)
    mainMultipart is a MimeMultiPart("alternative")
                  and has via .addBodyPart(...)
        textBodyPart is a MimeBodyPart with content-type "text/plain"
        relatedMultipart is a MimeMultipart("related")
                         and has via .addBodyPart(...)
            htmlBodyPart "text/html; charset=utf-8"
            INLINED-ATTACH1
            INLINED-ATTACH2
        NORMAL-ATTACH1
        NORMAL-ATTACH2

【讨论】:

  • Ups,我意识到你想知道包含部分的类型......我会编辑我的答案。
  • 请注意,mainmultipart 有一个“text-version”和一个“html version”。如果需要,您的文本版本可以为空。之后,普通附件被添加到主要部分,而内联附件被添加到相关多部分(html 部分)。这是我前段时间在编写普通邮件发件人时学到的一种结构。
猜你喜欢
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 2023-03-29
  • 2023-01-23
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 2010-11-25
相关资源
最近更新 更多