如何使用 Micronaut 在 html 电子邮件中添加内联图像

How to add inline image in html email with Micronaut

提问人:Gobanit 提问时间:7/26/2023 最后编辑:Gobanit 更新时间:7/26/2023 访问量:47

问:

我正在使用 Micronaut 作为 Web 应用程序,我需要发送电子邮件。我们使用速度模板作为电子邮件正文,我们需要在文本中包含图像。我发现有 3 种方法:

  1. Base64 编码图像
  2. 内容 ID 附件
  3. 全局网址链接

由于大多数邮件客户端不支持 html 中的 Base64 编码图像,并且由于提供的图像不公开可用,因此我尝试了内容 ID 附件。但是我无法让它与 Micronaut 一起工作。

这是我有一个简化的代码片段:

Map<String, String> modelMap = new HashMap<>();
modelMap.put("xyz", "aaaaaaa");
TemplateBody<Map<String, String>> body =
    new TemplateBody<>("mail/mail-body.vm", modelMap);

byte[] image = IOUtils.resourceToByteArray("logo.png", getClass().getClassLoader());
Attachment logoAttachment = Attachment.builder()
    .id("logo")
    .filename("something.png")
    .contentType(MediaType.IMAGE_PNG)
    .content(image)
    .build();

Email.Builder emailBuilder = Email.builder()
    .from(sender)
    .to(recipient)
    .subject("some-subject")
    .body(body)
    .attachment(createLogoAttachment());

emailSender.send(emailBuilder);

velocity html 模板如下所示:

<div>
    <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed 
    </p>
    <p>
         do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
    </p>
    <p>
        minim veniam
    </p>
    <p>
        quis nostrud exercitation ullamco laboris nisi ut - ${xyz}
    </p>
    <img src="cid:logo" alt="this is logo image"/>
</div>

但这样一来,图像只是一个常规附件,而不是嵌入到 html 内容中。将改为显示替代文本。我怎样才能告诉 Micronaut 这个附件应该是内联的?似乎根本没有使用我提供的id属性,html正文看不到附件。

原始邮件如下所示:

MIME-Version: 1.0

------=_Part_0_2107679308.1690376383642
Content-Type: multipart/alternative; 
    boundary="----=_Part_1_706751112.1690376383646"

------=_Part_1_706751112.1690376383646
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><div>
    <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
    </p>
    <p>
        do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
    </p>
    <p>
        minim veniam
    </p>
    <p>
        quis nostrud exercitation ullamco laboris nisi ut - aaaaaaa
    </p>
    <img src="cid:logo" alt="this is logo image">
</div>

------=_Part_1_706751112.1690376383646--

------=_Part_0_2107679308.1690376383642
Content-Type: image/png; name=something.png
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=something.png

iVBORw0KGgoAAAANSUhEUgAABCkAAAFkCAYAAAANCGFyAAAAAXNSR0IArs4c6QAAAARnQU1BAACx ... 

------=_Part_0_2107679308.1690376383642--

我没有粘贴整个 base64 图像

Java 电子邮件 jakarta-mail micronaut

评论

0赞 saw303 7/26/2023
您发送到 SMTP 的原始电子邮件是什么样子的?
0赞 Gobanit 7/26/2023
我把它贴到了问题上。收到后从 Outlook 下载。

答: 暂无答案