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

时间:2010-08-21 07:45:54

标签: java spring email mime javamail

我想准备简单的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模式,但它不可用。

2 个答案:

答案 0 :(得分:5)

还有更简单的方法:

MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
messageHelper.setFrom("your@mail.com");
messageHelper.setTo("target@mail.com");
messageHelper.setSubject("Spring mail test");
messageHelper.setText("Plain message", "<html><body><h2>html message</h2></body></html>");
javaMailSender.send(message);

答案 1 :(得分:4)

由于垃圾邮件检查程序问题,我希望发送带有替代方案的html电子邮件,但似乎spring只是不提供简单的MimeMessageHelper.MULTIPART_MODE_ALTERNATIVE。但是,使用MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED可以让我的电子邮件到达目的地。

如果您仍想摆脱混合和相关的边界,您需要更多地控制MIME消息的组合方式,您可以创建MimeMessagePreparator接口的实现并将其传递给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。

  

这是摘自Pro Spring 2.5第13章 - §使用纯文本替代发送HTML消息; APRESS ISBN-13(pbk):978-1-59059-921-1