使用 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;tofromsubjectmessageBodyString 对象)。

要设置内容,我也试过:

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 邮件没有主题和纯文本的主要内容,如果未能解决你的问题,请参考以下文章

Spring-使用JAVA的方式配置Spring-代理模式

8 -- 深入使用Spring -- 7...1 启动Spring 容器

Spring Framework,Spring Security - 可以在没有 Spring Framework 的情况下使用 Spring Security?

[Spring实战系列](15)使用Spring基于Java的配置

Spring 总览及 IOC 容器的使用 —— Spring 官方文档解读

Spring 框架介绍和使用