spring Boot 2.x | 发送文本邮件,HTML邮件,模板邮件

springboot实现发送文本邮件,html邮件,模板邮件

现在的网站,在注册用户时一般都会对注册用户发送一封邮件,用来验证注册用户的身份,或者用于一些报警提测,比如接口调用量,可用率报警等等

springboot中的spring-boot-starter-mail封装了发送邮件的接口,可以实现发送文本邮件,html邮件,发送模板邮件等等功能

文本邮件,HTML邮件

引入依赖

pom文件中引入spring-boot-starter-mail

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
配置文件

在配置文件中指定发送邮件的相关配置

spring:
  mail:
    host: smtp.qq.com
    username: 你的邮箱
    password: 你的秘钥
    properties:
      mail:
        smtp:
          auth: true
    default-encoding: utf-8
定义发送邮件接口

EmailService接口提供两个接口:sendSimpleEmail,sendHtmlEmail

/**
 * @auther: chenmingyu
 * @date: 2019/2/24 13:00
 * @description: 邮件服务
 */
public interface EmailService {

    /**
     * 发送文本邮件
     * @param toMail 接收邮箱
     * @param subject 标题
     * @param text 文本
     * @return
     */
    boolean sendSimpleEmail(String toMail,String subject,String text);

    /**
     * 发送html邮件
     * @param toMail 接收邮箱
     * @param subject 标题
     * @param html html内容
     * @return
     */
    boolean sendHtmlEmail(String toMail,String subject,String html);
}
接口实现
/**
 * @author: chenmingyu
 * @date: 2019/2/24 13:01
 * @description: 邮件服务
 */
@Service
public class EmailServiceImpl implements EmailService {

    @Resource
    private JavaMailSender mailSender;

    /**
     * 发送邮件邮箱
     */
    @Value("${spring.mail.username}")
    private String formMail;

    @Override
    public boolean sendSimpleEmail(String toMail,String subject,String text) {
        try {
            SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
            simpleMailMessage.setFrom(formMail);
            simpleMailMessage.setTo(toMail);
            simpleMailMessage.setSubject(subject);
            simpleMailMessage.setText(text);
            mailSender.send(simpleMailMessage);
            System.out.println("发送文本邮件:toMail:"+toMail);
            return true;
        }catch (Exception e){
            System.out.println("发送文本邮件异常:toMail:"+toMail);
            e.printStackTrace();
        }
        return false;
    }

    @Override
    public boolean sendHtmlEmail(String toMail, String subject, String html) {
        try {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
            mimeMessageHelper.setTo(toMail);
            mimeMessageHelper.setFrom(formMail);
            mimeMessageHelper.setText(html,true);
            mimeMessageHelper.setSubject(subject);
            mailSender.send(mimeMessage);
            System.out.println("发送html邮件:toMail:"+toMail);
        } catch (Exception e) {
            System.out.println("发送html邮件异常:toMail:"+toMail);
            e.printStackTrace();
        }
        return false;
    }
}
测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootEmailApplicationTests {

    @Resource
    private EmailService emailService;

    @Test
    public void sendSimpleMail() {
        emailService.sendSimpleEmail("1520151594@qq.com","注册提醒","欢迎注册,这是一封测试邮件");
    }

    @Test
    public void sendHtmlMail() {
        emailService.sendHtmlEmail("1520151594@qq.com","注册提醒","<h1>欢迎注册,这是一封测试邮件</h1>");
    }

}

接收到的邮件

纯文本邮件

html邮件

模板邮件

在发送一些固定场景中,除了使用HTML发送邮件外更常用的是定义一个模板,使用模板发送邮件,然后替换模板中的一些变化的值

thymeleaf为渲染模板,实现模板的邮件发送

引入thymeleaf依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
定义邮件模板:template.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>注册邮件</title>
</head>
<body>
<p><span th:text="${name}"></span>,欢迎注册,这是一封测试邮件</p>
</body>
</html>
定义发送模板邮件接口
/**
 * 发送模板邮件
 * @param toMail 接收邮箱
 * @param subject 标题
 * @param templateValue 模板内容填充值
 * @return
 */
boolean sendTemplateEmail(String toMail,String subject,Map<String,Object> templateValue);
接口实现
@Override
public boolean sendTemplateEmail(String toMail, String subject, Map<String,Object> templateValue) {
    System.out.println("发送html邮件:toMail:"+toMail);
    try {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
        mimeMessageHelper.setTo(toMail);
        mimeMessageHelper.setFrom(formMail);
        mimeMessageHelper.setSubject(subject);
        Context context = new Context();
        context.setVariables(templateValue);
        String text = templateEngine.process("template",context);
        mimeMessageHelper.setText(text, true);
        mailSender.send(mimeMessage);
        return true;
    } catch (Exception e) {
        System.out.println("发送html邮件异常:toMail:"+toMail);
        e.printStackTrace();
    }
    return false;
}
测试
@Test
public void sendTemplateMail() {
    Map<String,Object> map = new HashMap<>();
    map.put("name","叫我明羽");
    emailService.sendTemplateEmail("1520151594@qq.com","注册提醒",map);
}

模板邮件

文章作者: 陈明羽
文章链接: https://chenmingyu.top/springboot-mail/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 陈明羽
打赏
  • 微信

评论