SpringBoot-发送邮件

邮件协议

SMTP协议:投递邮件使用
POP3协议:读取邮件使用
IMAP协议:是对POP3的一个扩展,功能更强

申请授权码

登录邮箱——>点击设置——>账户——>开启POP3/SMTP服务获取授权码,然后就可以使用授权码登录账户给别人发邮件

注意点:当修改密码后将会失效
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200509121550355.png

发送简单邮件

添加依赖

在这里插入图片描述

配置application.properties

spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=发送用的QQ邮箱
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

测试类测试

@SpringBootTest
class MailApplicationTests {
    @Autowired
    JavaMailSender javaMailSender;
    @Test
    void contextLoads() {
    //简单邮件对象 不支持发附件等
        SimpleMailMessage message = new SimpleMailMessage();
        message.setSubject("测试邮件主题");
        message.setText("测试文件内容");
        message.setFrom("");// 发送用qq邮箱
        message.setTo("");// 接收的qq邮箱
        message.setSentDate(new Date());
        javaMailSender.send(message);
    }
}

这null是因为我的邮箱名字叫null········
在这里插入图片描述

发送带附件的邮件

    @Test
    public void test1() throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        //这里的true开启了添加附件等多样性功能
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
        helper.setSubject("测试邮件主题(附件)");
        helper.setText("测试文件内容(附件)");
        message.setFrom("");// 发送用qq邮箱
        message.setTo("");// 接收的qq邮箱
        helper.setSentDate(new Date());
        // 文件的名字 和文件的路径 也可以是流
        helper.addAttachment("akk.txt",new File("C:\\Users\\CodeTest\\Desktop\\akk.txt"));
        // MimeMessageHelper是辅助类,最后发的还是message
        javaMailSender.send(mimeMessage);
    }

发送带图片资源的邮件

    @Test
    public void test2() throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
        helper.setSubject("测试邮件主题(图片)");
        //支持html才可以放图片的标签,邮件的正文是html
        helper.setText("测试文件内容(图片)这是第一张图片:<img src='cid:p01'>,这是第一张图片:<img src='cid:p02'>",true);
        message.setFrom("");// 发送用qq邮箱
        message.setTo("");// 接收的qq邮箱
        helper.setSentDate(new Date());
        helper.addInline("p01",new FileSystemResource(new File("C:\\Users\\CodeTest\\Desktop\\akk.jpg")));
        helper.addInline("p02",new FileSystemResource(new File("C:\\Users\\CodeTest\\Desktop\\akk1.jpg")));
        javaMailSender.send(mimeMessage);
    }

Thymeleaf做邮件模板

添加Thymeleaf依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>

Thymeleaf默认放在templates目录下

模板信息

<!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></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>
</body>
</html>

发送代码

    @Autowired
    TemplateEngine templateEngine;
    @Test
    public void test3() throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
        helper.setSubject("测试邮件主题(thymeleaf)");
        Context context = new Context();
        context.setVariable("username","akk");
        context.setVariable("position","老师");
        context.setVariable("joblevel","5");
        context.setVariable("salary","2000");
        context.setVariable("dep","A");
        String process = templateEngine.process("mail.html", context);
        helper.setText(process,true);
        message.setFrom("");// 发送用qq邮箱
        message.setTo("");// 接收的qq邮箱
        helper.setSentDate(new Date());;
        javaMailSender.send(mimeMessage);
    }

测试接收的信息

在这里插入图片描述

Freemarker做邮件模板

添加Freemarker依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>

模板信息

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>hello,<span>${username}</span></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>
</body>
</html>

发送代码

    @Autowired
    TemplateEngine templateEngine;
    @Test
    public void test4() throws MessagingException, IOException, TemplateException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
        helper.setSubject("测试邮件主题(freemarker)");
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);
        configuration.setClassLoaderForTemplateLoading(this.getClass().getClassLoader(),"templates");
        Template template = configuration.getTemplate("mail.ftlh");
        Map<String, Object> map = new HashMap<>();
        map.put("username","akk");
        map.put("position","老师");
        map.put("joblevel","5");
        map.put("salary","2000");
        map.put("dep","A");
        StringWriter out = new StringWriter();
        template.process(map, out);
        helper.setText(out.toString(),true);
        message.setFrom("");// 发送用qq邮箱
        message.setTo("");// 接收的qq邮箱
        helper.setSentDate(new Date());;
        javaMailSender.send(mimeMessage);
    }

猜你喜欢

转载自blog.csdn.net/weixin_39232166/article/details/106016344