使用 Spring 的 JavaMailSender 发送的 Html 邮件没有主题和纯文本
Posted
技术标签:
【中文标题】使用 Spring 的 JavaMailSender 发送的 Html 邮件没有主题和纯文本【英文标题】:Html mail sent with Spring's JavaMailSender is without subject and plain-text 【发布时间】:2016-05-21 04:46:10 【问题描述】:我正在尝试使用 Spring 的 JavaMailSenderImpl
在 Spring(版本 3.0.5.RELEASE)webapp 中发送 html 电子邮件。
邮件已发送但不正确:
他们缺少主题 收件人字段显示为空或显示为“未公开的收件人:;” html 正文显示为纯文本我尝试了以下方法,但没有成功:
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, false, "utf-8");
message.setTo(to);
message.setFrom(from);
message.setReplyTo(from);
message.setSubject(StringUtils.trim(subject));
message.setSentDate(new Date());
mimeMessage.setContent(StringUtils.trim(messageBody), "text/html");
mailSenderImpl.send(mimeMessage);
(mailSender
是从应用程序上下文中检索到的 Spring 的 JavaMailSenderImpl;to
、from
、subject
、messageBody
是 String
对象)。
要设置内容,我也试过:
message.setText(messageBody, true);
message.setText(messageBodyPlain, messageBodyText);
我还尝试使用多部分消息(将MimeMessageHelper
的第二个参数设置为true
)和MimeMessagePreparator
。
查看传递的消息,它们不包含 Content-Type:
或 Subject
标头。
对于我的测试,我使用了我公司的 smtp 服务器和 Gmail 的 smtp 服务器。
更新:问题已解决
原来我的问题是 this other one 的重复:一堆 Maven 依赖项包括 geronimo-javamail_1.4_spec
,这就是格式错误的电子邮件的原因。我只需要排除这个 jar,像这样编辑 pom.xml:
<dependency>
<groupId>org.apache.ws.commons.axiom</groupId>
<artifactId>axiom-api</artifactId>
<version>1.2.8</version>
<exclusions>
<exclusion>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-javamail_1.4_spec</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.ws.commons.axiom</groupId>
<artifactId>axiom-dom</artifactId>
<version>1.2.8</version>
<exclusions>
<exclusion>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-javamail_1.4_spec</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.ws.commons.axiom</groupId>
<artifactId>axiom-impl</artifactId>
<version>1.2.8</version>
<exclusions>
<exclusion>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-javamail_1.4_spec</artifactId>
</exclusion>
</exclusions>
</dependency>
【问题讨论】:
你试过MimeMessagePreparator
吗?
是的,我也试过MimeMessagePreparator
,结果一样
【参考方案1】:
尝试创建将 multipart 标志设置为 true 的 MimeMessageHelper;
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "utf-8");
【讨论】:
是的,我已经尝试过了(我已经更新了问题以指定这一点)。以上是关于使用 Spring 的 JavaMailSender 发送的 Html 邮件没有主题和纯文本的主要内容,如果未能解决你的问题,请参考以下文章
8 -- 深入使用Spring -- 7...1 启动Spring 容器
Spring Framework,Spring Security - 可以在没有 Spring Framework 的情况下使用 Spring Security?
[Spring实战系列](15)使用Spring基于Java的配置