【问题标题】:Spring: Send HTML mailSpring:发送 HTML 邮件
【发布时间】:2020-01-21 22:18:39
【问题描述】:

我想创建一个服务来使用带有MimeMessage 的 Spring 电子邮件发送 HTML 邮件。这是我的服务:

    public void sendHtmlEmail(String receiver,String Subject, String htmlBody) throws MessagingException {

            MimeMessage msg = javaMailSender.createMimeMessage();

            // true = multipart message
            MimeMessageHelper helper = new MimeMessageHelper(msg, false);

            helper.setTo(receiver);

            helper.setSubject(Subject);

            // true = text/html
            helper.setText(htmlBody, true);


            javaMailSender.send(msg);
        }

问题是我没有收到html中的电子邮件,而是html中的标签,知道我在方法setText()中输入了true!我发送的电子邮件以纯 html 文本显示,如下所示

<html><h1>some text !</h1></html>

一些可以帮助你的链接:

https://mkyong.com/spring-boot/spring-boot-how-to-send-email-via-smtp/

https://www.baeldung.com/spring-email

这是 application.properties :

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=username
spring.mail.password=password

# Other properties
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=5000
spring.mail.properties.mail.smtp.writetimeout=5000

# TLS , port 587
spring.mail.properties.mail.smtp.starttls.enable=true

和控制器

@PostMapping("/htmlMail")
    public String sendHtmlMail(@RequestBody MailDTO mail) {
        mailService.sendHtmlEmail(mail.getReceiver(),mail.getSubject(),mail.getHtmlbody());
        return "html E-Mail Sent ! ";
    }

【问题讨论】:

  • properties.put("mail.debug", "true"); 设置到您的 JavaMailSender bean 中,以准确查看传输的标头和有效负载。
  • 代码似乎没问题。也许您可以尝试另一个版本,以确保这不是您当前版本的错误。
  • 我也觉得你的代码没问题。尝试在 MimeMessageHelper 对象中添加编码类型“UTF-8”。您能否提供有关您的代码或错误快照的更多详细信息?或尝试我在答案中放置的解决方案,希望对您有所帮助。
  • 好吧,当我将选项 debug 设置为 true 时,我得到 Content-Type: text/plain;字符集=UTF-8 !这不是我想要的(我在 setText() 方法中输入了 true,所以我应该有 html 类型):/

标签: java spring spring-boot jakarta-mail html-email


【解决方案1】:

有时需要的参数不存在,因此会出错。在您的问题中,没有给出完整的代码或错误 snep,所以我在途中描述。

先检查以下两点,

  1. 提供了所有必需的配置数据。
  2. 您的电子邮件 ID 必须有权使用您的应用程序发送邮件(允许在您的 gmail 帐户中使用“不太安全的应用程序” - 如果您正在使用)。

Yml 属性文件

mail:
    host: smtp.gmail.com                   // Take based on your mail provider
    port: 587
    username: *@gmail.com
    password: ****
    transport:
      protocol: smtp
    properties:
      test-connection: true
      debug: true
      smtp:
        auth: true
        starttls:
          enable: true
          required: true
        ssl:
          enable: true

代码片段

   @Autowired
   JavaMailSender mailSender;

   public void sendMail(String to, String subject, String content, boolean 
    isMultipart, boolean isHtml){

      MimeMessage mimeMessage = mailSender.createMimeMessage();

      JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
      mailSender.setHost(EMAIL_HOST);
      mailSender.setPort(EMAIL_PORT);
      mailSender.setUsername(EMAIL_USERNAME);
      mailSender.setPassword(EMAIL_PASSWORD);

      Properties properties = mailSender.getJavaMailProperties();
      properties.put("mail.smtp.starttls.enable", Boolean.TRUE);
      properties.put("mail.transport.protocol", "smtp");
      properties.put("mail.smtp.auth", Boolean.TRUE);
      properties.put("mail.smtp.starttls.required", Boolean.TRUE);
      properties.put("mail.smtp.ssl.enable", Boolean.FALSE);
      properties.put("mail.test-connection", Boolean.TRUE);
      properties.put("mail.debug", Boolean.TRUE);

      mailSender.setJavaMailProperties(properties);

      try {
        MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, isMultipart, "UTF-8");
        messageHelper.setFrom(USER_EMAIL);
        messageHelper.setTo(to);
        messageHelper.setSubject(subject);
        messageHelper.setText(content, isHtml);
        mailSender.send(mimeMessage);
      } catch (Exception ex) {
        log.warn("Email could not be sent to user '{}': {}", to, ex.getMessage());
      }
    }

来电

    @Async
    public void sendTestingMail(String mail) {
      String subject = "Test mail from Project Management System";
      String content = "<h1>Be happy, Enjoy Life...!!!</h1>";
      sendMail(mail, subject, content, false, true);
    }

您设置一次并使用多个位置的电子邮件类型的配置,因此请尝试进行单个完整设置。

祝你有美好的一天......!!!

【讨论】:

  • 嗯,我验证了你提到的这两点,但还是老问题
  • 当然可以!我添加了控制器和 application.properties
  • 好的,我会在我的机器上检查相同的代码后更新你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 2014-05-24
  • 2011-07-14
  • 2014-09-14
  • 1970-01-01
相关资源
最近更新 更多