Spring Boot入门教程(二十七): Mail

  1. 发送简单邮件。
  2. 发送html格式的邮件
  3. 发送带附件简单邮件
  4. 发送模板邮件。

1. pom.xml

发送模板邮件需要用到spring-boot-starter-thymeleaf,其他其他邮件内容不需要该依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2. application.properties

spring.mail.host=smtp.163.com
spring.mail.username=xxx@163.com
# 注意这里的密码不是邮箱的登录密码
spring.mail.password=邮箱客户端授权码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

注意:如果密码不对在发送邮件中会报异常javax.mail.AuthenticationFailedException: 535 Error, 如果设置了也开启了还是不行再重新设置一下

这里写图片描述

这里写图片描述

2. MailUtil

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@Component
public class MailUtil {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    JavaMailSender mailSender;

    @Autowired
    TemplateEngine templateEngine;


    /**
     * 发送简单邮件
     * @param from 发送人
     * @param to 接收人
     * @param carbonCopy 抄送人
     * @param subject 主题
     * @param content 内容
     */
    public void sendSimpleEmail(String from, String[] to, String[] carbonCopy, String subject, String content) {

        long startTimestamp = System.currentTimeMillis();
        logger.info("Start send mail ... ");

        try {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(from);
            message.setTo(to);
            message.setCc(carbonCopy);
            message.setSubject(subject);
            message.setText(content);
            mailSender.send(message);
            logger.info("Send mail success, cost {} million seconds", System.currentTimeMillis() - startTimestamp);
        } catch (MailException e) {
            logger.error("Send mail failed, error message is : {} \n", e.getMessage());
        }
    }

    /**
     * 发送html邮件
     */
    public void sendHtmlEmail(String deliver, String[] receiver, String[] carbonCopy, String subject, String content, boolean isHtml) {
        long startTimestamp = System.currentTimeMillis();
        logger.info("Start send email ...");

        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper messageHelper = new MimeMessageHelper(message);

            messageHelper.setFrom(deliver);
            messageHelper.setTo(receiver);
            messageHelper.setCc(carbonCopy);
            messageHelper.setSubject(subject);
            messageHelper.setText(content, isHtml);

            mailSender.send(message);
            logger.info("Send email success, cost {} million seconds", System.currentTimeMillis() - startTimestamp);
        } catch (MessagingException e) {
            logger.error("Send email failed, error message is {} \n", e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 发送带附件的邮件
     */
    public void sendAttachmentFileEmail(String deliver, String[] receiver, String[] carbonCopy, String subject, String content, boolean isHtml, String fileName, File file) {
        long startTimestamp = System.currentTimeMillis();
        logger.info("Start send mail ...");

        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);

            messageHelper.setFrom(deliver);
            messageHelper.setTo(receiver);
            messageHelper.setCc(carbonCopy);
            messageHelper.setSubject(subject);
            messageHelper.setText(content, isHtml);
            messageHelper.addAttachment(fileName, file);

            mailSender.send(message);
            logger.info("Send mail success, cost {} million seconds", System.currentTimeMillis() - startTimestamp);
        } catch (MessagingException e) {
            logger.error("Send mail failed, error message is {}\n", e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 发送模板邮件
     */
    public void sendTemplateEmail(String deliver, String[] receiver, String[] carbonCopy, String subject, String template, Context context) {
        long startTimestamp = System.currentTimeMillis();
        logger.info("Start send mail ...");

        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper messageHelper = new MimeMessageHelper(message);

            String content = templateEngine.process(template, context);
            messageHelper.setFrom(deliver);
            messageHelper.setTo(receiver);
            messageHelper.setCc(carbonCopy);
            messageHelper.setSubject(subject);
            messageHelper.setText(content, true);

            mailSender.send(message);
            logger.info("Send mail success, cost {} million seconds", System.currentTimeMillis() - startTimestamp);
        } catch (MessagingException e) {
            logger.error("Send mail failed, error message is {} \n", e.getMessage());
            e.printStackTrace();
        }
    }
}

src/main/resource/templates/mailTemplate.html

<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
[[${content}]] <br/>
[[${content}]] <br/>
[[${content}]] <br/>
</body>
</html>

3. test

@RunWith(SpringRunner.class)
@SpringBootTest
public class MailApplicationTests {

    @Autowired
    private MailUtil mailUtil;

    @Test
    public void sendSimpleEmail() {
        String deliver = "[email protected]";
        String[] receiver = {"[email protected]"};
        String[] carbonCopy = {"[email protected]"};
        String subject = "This is a simple email";
        String content = "This is a simple content";

        try {
            mailUtil.sendSimpleEmail(deliver, receiver, carbonCopy, subject, content);
        } catch (Exception e) {
            assertFalse("Send simple email failed", true);
            e.printStackTrace();
        }
    }

    @Test
    public void sendHtmlMail(){
        String deliver = "[email protected]";
        String[] receiver = {"[email protected]"};
        String[] carbonCopy = {"[email protected]"};
        String subject = "退信代码说明";
        String content = "<h1>org.springframework.mail.MailSendException: Failed messages: " +
                "com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp9,DcCowAAXf2r4c8da2cPWBQ--." +
                "33626S3 1523020853,please see " +
                "http://mail.163.com/help/help_spam_16.htm?ip=43.243.148.212&hostid=smtp9&time=1523020853</h1>";
        boolean isHtml = true;

        mailUtil.sendHtmlEmail(deliver, receiver, carbonCopy, subject, content, isHtml);
    }

    @Test
    public void sendAttachmentFileEmail() {
        String FILE_PATH = "/Users/mengday/Desktop/02.png";
        String deliver = "[email protected]";
        String[] receiver = {"[email protected]"};
        String[] carbonCopy = {"[email protected]"};
        String subject = "退信代码说明";
        String content = "<h1>org.springframework.mail.MailSendException: Failed messages: " +
                "com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp9,DcCowAAXf2r4c8da2cPWBQ--." +
                "33626S3 1523020853,please see " +
                "http://mail.163.com/help/help_spam_16.htm?ip=43.243.148.212&hostid=smtp9&time=1523020853</h1>";
        boolean isHtml = true;

        File file = new File(FILE_PATH);
        String fileName = FILE_PATH.substring(FILE_PATH.lastIndexOf(File.separator));

        try {
            mailUtil.sendAttachmentFileEmail(deliver, receiver, carbonCopy, subject, content, isHtml, fileName, file);
        } catch (Exception e) {
            e.printStackTrace();
            assertFalse("Send attachment file email failed", true);
        }
    }


    @Test
    public void sendTemplateEmail() {
        String deliver = "[email protected]";
        String[] receiver = {"[email protected]"};
        String[] carbonCopy = {"[email protected]"};
        String subject = "DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件";
        String template = "mailTemplate";
        String content = "554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件";

        Context context = new Context();
        context.setVariable("content", content);

        try {
            mailUtil.sendTemplateEmail(deliver, receiver, carbonCopy, subject, template, context);
        } catch (Exception e) {
            e.printStackTrace();
            assertFalse("Send template email failed", true);
        }
    }

}

注意:如果标题和内容过于简单,或者包含test之类的内容,163会认为这是垃圾邮件,会造成发送失败,报以下异常,解决办法就是将发送的表体和内容写的比较真实点

org.springframework.mail.MailSendException: Failed messages: 
com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 
smtp7,C8CowABH3LWqe8daHXmDNw--.3202S3 1523022763,please see 
http://mail.163.com/help/help_spam_16.htm?ip=101.69.253.74&hostid=smtp7&time=1523022763

这里写图片描述

参考文章 https://blog.csdn.net/u013360850/article/details/78822860

猜你喜欢

转载自blog.csdn.net/vbirdbest/article/details/79836854