java - 使用 MimeMessageHelper (Spring Framework) 准备简单的多部分/替代电子邮件

标签 java spring email mime jakarta-mail

我想准备带有替代纯文本版本的简单 html 电子邮件。 我不需要任何附件或内联元素。

默认情况下,如果我使用:

MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8");

我得到 MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED 模式。

我的电子邮件内容正文如下所示:

Content-Type: multipart/mixed; 
    boundary="----=_Part_8_21489995.1282317482209"

------=_Part_8_21489996.1282317482209
Content-Type: multipart/related; 
    boundary="----=_Part_9_21489996.1282317482209"

------=_Part_9_21489996.1282317482209
Content-Type: multipart/alternative; 
    boundary="----=_Part_10_2458205.1282317482209"

------=_Part_10_2458205.1282317482209
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Simple newsletter.

------=_Part_10_2458205.1282317482209
Content-Type: text/html;charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<html>
    <head>
        <title>Simple newsletter</title>
    <head>
    <body>
        <p>Simple newsletter.</p>
    </body>
<html>

------=_Part_10_2458205.1282317482209--

------=_Part_9_21489996.1282317482209--

------=_Part_8_21489995.1282317482209--

我能做些什么来摆脱混合的和相关的边界?

理想的解决方案是 MimeMessageHelper.MULTIPART_MODE_ALTERNATIVE 模式,但它不可用。

最佳答案

由于垃圾邮件检查器问题,我一直在寻找使用替代方法发送 html 电子邮件,但似乎 spring 不提供简单的 MimeMessageHelper.MULTIPART_MODE_ALTERNATIVE。但是,使用 MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED 让我的电子邮件到达目的地。

如果您仍然想摆脱混合和相关的界限,您需要更多地控制 MIME 消息的组装方式,您可以创建 MimeMessagePreparator 接口(interface)的实现并将其传递给 JavaMailSender.send() 方法的 MimeMessage。

  sender.send(new MessagePreparator());
private class MessagePreparator implements MimeMessagePreparator {
public void prepare(MimeMessage msg) throws Exception {
// set header details
msg.addFrom(InternetAddress.parse(from));
msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
msg.setSubject(subject);

// create wrapper multipart/alternative part
MimeMultipart ma = new MimeMultipart("alternative");
msg.setContent(ma);
// create the plain text
BodyPart plainText = new MimeBodyPart();
plainText.setText("This is the plain text version of the mail.");
ma.addBodyPart(plainText);
// create the html part
BodyPart html = new MimeBodyPart();
html.setContent(
"<html><head></head><body>
<h1>This is the HTML version of the mail."
+ "</h1></body></html>", "text/html");
ma.addBodyPart(html);
}
}
}

将 BodyPart 实例添加到 MimeMultipart 的顺序很重要,您应该最后添加具有最优选消息格式的 BodyPart。

This is an excerpt taken from Pro Spring 2.5 chapter13 - § Sending an HTML Message with a Plain Text Alternative ; APRESS ISBN-13 (pbk): 978-1-59059-921-1

关于java - 使用 MimeMessageHelper (Spring Framework) 准备简单的多部分/替代电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3536826/

相关文章:

java - 如何通过 Lambda 函数重命名列 - fastXML

java - Spring Controller单元测试最佳实践

java - 为什么 JMS 确认模式不能与 ibm mq 广泛配合使用?

java - 从弹出窗口更新主窗口的值

spring - 嵌入式代理和故障转移消费者的 Activemq 集群

java - 如何为 hibernate > 4.3 导出模式

iOS : Can't get the user email address

java - Infinispan远程查询服务器编码器问题

带有德语字母的 PHP 邮件主题

java - 在特定日期发送电子邮件