spring boot实现邮件发送!! 教你用三种姿势搞定

314 阅读2分钟

1.简单的 邮件发送

1.1引入依赖

  <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>

1.2配置参数

spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=发送人邮箱
spring.mail.password=授权码
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true 

1.3邮件发送的几种方式

1.3.1简单的邮件发送

通过new SimpleMailMessage对象发送邮件

    @Autowired JavaMailSender javaMailSender;\
    
    @Test
    public void contextLoads() {
        // 简单邮件对象
        SimpleMailMessage msg = new SimpleMailMessage();
        msg.setSubject("这是测试邮件主题");
        msg.setText("这是测试邮件内容");
        msg.setFrom("2354827879@qq.com"); // 发件人邮箱
        msg.setSentDate(new Date()); 
        msg.setTo("2354827879@qq.com"); //收件人邮箱
        javaMailSender.send(msg); //发送邮件
    }
	

1.3.2带附件的邮件发送

    @Autowired
    JavaMailSender javaMailSender;
 
	// 带附件发邮件 需要采用helper辅助实现邮件发送
    @Test
    public void test1() throws MessagingException {
        MimeMessage msg = javaMailSender.createMimeMessage();
        // helper辅助工具,帮助配置邮件内容
        MimeMessageHelper helper = new MimeMessageHelper(msg, true);
        helper.setSubject("这是测试邮件主题(带附件)");
        helper.setText("这是测试邮件内容(带附件)",true);
        helper.setFrom("2354827879@qq.com");
        helper.setSentDate(new Date());
        helper.setTo("2354827879@qq.com");
        helper.addAttachment("javaboy.png", new File("E:\桌面\mail.png"));// 附件的名字和具体的附件对象
        javaMailSender.send(msg);
    }

1.3.3邮件正文携带图片

    @Autowired
    JavaMailSender javaMailSender;	
    // 邮件的正文携带图片
    @Test
    public void test2() throws MessagingException {
        MimeMessage msg = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(msg, true);
        helper.setSubject("这是测试邮件主题(带图片)");
        // 注意这里从cid和下面的addInline一样
        helper.setText("这是测试邮件内容(带图片),这是第一张图片:<img src='cid:p01'/>,这是第二张图片:<img src='cid:p02'/>", true);
        helper.setFrom("2354827879@qq.com");
        helper.setSentDate(new Date());
        helper.setTo("2354827879@qq.com");
        helper.addInline("p01", new FileSystemResource(new File("E:\桌面\mail.png")));
        helper.addInline("p02", new FileSystemResource(new File("E:\桌面\redis.png")));
        javaMailSender.send(msg);
    }

1.3.4使用thymeleaf模板引擎作为邮件发送模板 (相对简单,有自动化配置)

    @Autowired
    JavaMailSender javaMailSender;	 
    @Autowired
    TemplateEngine templateEngine;
    // 使用thymeleaf模板引擎作为邮件发送模板
    @Test
    public void test3() throws MessagingException {
        MimeMessage msg = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(msg, true);

        helper.setSubject("这是测试邮件主题(thymeleaf)");
        // 邮件模板的生成
        Context context = new Context();
        context.setVariable("username", "javaboy");
        context.setVariable("position", "Java工程师");
        context.setVariable("dep", "产品研发部");
        context.setVariable("salary", 999999);
        context.setVariable("joblevel", "高级工程师");
        String process = templateEngine.process("mail.html", context);

        helper.setText(process, true);
        helper.setFrom("2354827879@qq.com");
        helper.setSentDate(new Date());
        helper.setTo("2354827879@qq.com");
        javaMailSender.send(msg);
    }

mail.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    hello <span th:text="${username}"></span>,欢迎加入 XXX 大家庭!
</div>
您的入职信息如下:
<table border="1">
    <tr>
        <td>职位</td>
        <td th:text="${position}"></td>
    </tr>
    <tr>
        <td>职称</td>
        <td th:text="${joblevel}"></td>
    </tr>
    <tr>
        <td>薪水</td>
        <td th:text="${salary}"></td>
    </tr>
    <tr>
        <td>部门</td>
        <td th:text="${dep}"></td>
    </tr>
</table>
<div style="color: #ff1a0e;font-size: 20px">希望在未来的日子里,携手共进!</div>
</body>
</html>

1.3.5使用freemarker做邮件模板

    @Autowired
    JavaMailSender javaMailSender;	
    @Test
    public void test4() throws MessagingException, IOException, TemplateException {
        MimeMessage msg = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(msg, true);
        helper.setSubject("这是测试邮件主题(freemarker)");
        // 传递freemarker的版本
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
        // 设置模板的位置
        configuration.setClassLoaderForTemplateLoading(this.getClass().getClassLoader(),"templates");
        // 指定模板的名字
        Template template = configuration.getTemplate("mail.ftl");
        // 邮件模板的生成
        Map<String, Object> map = new HashMap<>();
        map.put("username", "javaboy");
        map.put("position", "Java工程师");
        map.put("dep", "产品研发部");
        map.put("salary", 999999);
        map.put("joblevel", "高级工程师");

        StringWriter out = new StringWriter();
        // 输出流
        template.process(map, out);
        helper.setText(out.toString(), true);
        helper.setFrom("2354827879@qq.com");
        helper.setSentDate(new Date());
        helper.setTo("2354827879@qq.com");
        javaMailSender.send(msg);
    }

mail.ftl

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>freemarker</h1>
<div>
    hello${username},欢迎加入 XXX 大家庭!
</div>
您的入职信息如下:
<table border="1">
    <tr>
        <td>职位</td>
        <td>${position}</td>
    </tr>
    <tr>
        <td>职称</td>
        <td>${joblevel}</td>
    </tr>
    <tr>
        <td>薪水</td>
        <td>${salary}</td>
    </tr>
    <tr>
        <td>部门</td>
        <td>${dep}</td>
    </tr>
</table>
<div style="color: #ff1a0e;font-size: 20px">希望在未来的日子里,携手共进!</div>
</body>
</html>

注: 本文部分内容参考江南一点雨的学习资料而编写