ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot 企业级开发学习笔记

2021-12-19 09:32:49  阅读:212  来源: 互联网

标签:qq SpringBoot helper 笔记 企业级 mail new mimeMessage 邮件


SpringBoot邮件服务

邮件服务代码仓库:mail

一、前期准备工作

1、从qq邮箱获取授权码:
登录qq邮箱,点击设置
在这里插入图片描述
在账户选项中的POP3/SMTP选项中开启POP3/SMTP服务(图中已开启)
在这里插入图片描述开启完毕会得到一个授权码,保存该授权码。
2、新建SpingBoot项目mail,导入Java Mail Sender依赖:
在这里插入图片描述
3、配置application.yml文件
根据自己的需求填写邮箱授权码邮件发送者的邮箱地址

server:
  port: 7755
spring:
  mail:
    host: smtp.qq.com
    port: 587
    password:  # 邮箱授权码
    username:  # 邮件的发送者
    default-encoding: UTF-8
    properties:
      mail:
        stmp:
          socketFactory:
            class:javax.net.ssl.SSLSocketFactory # 连接工具加密类
        debug: true # 开启debug模式

二、简单邮件发送

1、在测试类中注入JavaMailSender编辑邮件内容(此处为了方便,邮件发送和接受用了同一个邮箱):

@SpringBootTest
class MailApplicationTests {
    @Autowired
    JavaMailSender javaMailSender;
    @Test
    void contextLoads() {
        SimpleMailMessage simMsg = new SimpleMailMessage();
        //描述邮件基本信息
        simMsg.setFrom("3425928061@qq.com"); //邮件发送者
        simMsg.setTo("3425928061@qq.com"); //邮件接受者
        simMsg.setSubject("邮件主题--测试邮件"); //主题
        simMsg.setText("邮件内容-测试邮件"); //内容
        javaMailSender.send(simMsg); //发送邮件
    }
}

2、运行测试方法,查看邮箱,发送与接受成功:
在这里插入图片描述

三、发送带附件的邮件

1、新建测试方法:

    @Test
    void test1() throws MessagingException {
    	//新建一个文件对象,从本地绝对路径获取
        File file = new File("E:/java集合框架图.gif");
        //复合邮件
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        //heper 是一个辅助工具
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom("3425928061@qq.com");
        helper.setTo("3425928061@qq.com");
        helper.setSubject("邮件主题--测试邮件");
        helper.setText("邮件内容-测试邮件");
        //文件名字 文件对象
        helper.addAttachment(file.getName(),file);
        javaMailSender.send(mimeMessage);
    }

2、测试,查看邮箱:
在这里插入图片描述
注意事项:发送邮箱方法不要多次运行,短时间内发了太多邮箱有封号风险。

四、发送带图片资源的邮件(未使用视图模板)

1、新建测试方法:
主要修改了heper.setText方法,传入一个html结构,结构内塞一张图片。

    @Test
    void test2() throws MessagingException {
        File file = new File("E:/java集合框架图.gif");
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        //heper 是一个辅助工具
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom("3425928061@qq.com");
        helper.setTo("3425928061@qq.com");
        helper.setSentDate(new Date());
        helper.setSubject("邮件主题--测试邮件");
        helper.setText("<div>hello , 这是一封带图片资源的邮件...</div><div><img src='cid:p01'></div>",true);
        // p01 : 标记  file : 图片对象
        helper.addInline("p01",file);
        javaMailSender.send(mimeMessage);
    }

2、测试,查看邮箱:
在这里插入图片描述
说明:把图片放进邮件正文里面不是一个主流方案,因为可能会出现图片过大无法发送的情况,发大文件建议用附件。若实在需要在邮件正文中嵌套图片,可以使用FreemarkerThemlef去做。

五、Freemarker作为邮件模板

1、pom.xml中引入Freemarker依赖:

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

2、创建实体类User供页面展示用:

@Data
public class User {
    private String username;
    private Double salary;
    private String position;
    private String company;
}

3、创建mail.ftl模板:

<div>欢迎 ${username} 加入 ${company} 大家庭,您的入职信息如下:</div>
<table>
    <tr>
        <td>姓名</td>
        <td>${username}</td>
    </tr>
    <tr>
        <td>职位</td>
        <td>${position}</td>
    </tr>
    <tr>
        <td>薪水</td>
        <td>${salary}</td>
    </tr>
</table>
<div style="color: #ff3f57;font-size: large">希望在未来的日子里携手奋进!</div>
<style>
    table {
        border-collapse: collapse;
    }
    tr, td {
        border: 1px solid black;
        padding: 5px;
        text-align: center;
    }
    tr:nth-child(even) {background-color: #f2f2f2;}
</style>

4、新建测试类方法:

    @Test
    void test3() throws MessagingException, IOException, TemplateException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        //heper 是一个辅助工具
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom("3425928061@qq.com");
        helper.setTo("3425928061@qq.com");
        helper.setSentDate(new Date());
        helper.setSubject("邮件主题--测试邮件");
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_30);
        cfg.setClassLoaderForTemplateLoading(MailApplicationTests.class.getClassLoader(), "mail");
        Template template = cfg.getTemplate("mail.ftl");
        User user = new User();
        //输出流 渲染之后的页面内容
        user.setCompany("xxx公司");
        user.setUsername("小明");
        user.setPosition("品保");
        user.setSalary(8899.0);
        StringWriter out = new StringWriter();
        template.process(user,out);
        String text = out.toString();
        System.out.println("text =  " + text);
        helper.setText(text,true);
        javaMailSender.send(mimeMessage);
    }

此处版本号应当与导入的依赖相匹配(2.3.30):
在这里插入图片描述

Configuration cfg = new Configuration(Configuration.VERSION_2_3_30);

指定mail.ftl模板的位置:

cfg.setClassLoaderForTemplateLoading(MailApplicationTests.class.getClassLoader(), "mail");

指定模板名称:

Template template = cfg.getTemplate("mail.ftl");

5、测试,查看邮箱:
在这里插入图片描述

六、Thymeleaf作为邮件模板

1、pom.xml中引入Thymeleaf依赖:

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

2、创建mail.html页面:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        table {
            border-collapse: collapse;
        }
        tr, td {
            border: 1px solid black;
            padding: 5px;
            text-align: center;
        }
        tr:nth-child(even) {background-color: #f2f2f2;}
    </style>
</head>
<body>
<div>欢迎 <span th:text="${username}"></span> 加入 <span th:text="${company}"></span> 大家庭,您的入职信息如下:</div>
<table>
    <tr>
        <td>姓名</td>
        <td th:text="${username}"></td>
    </tr>
    <tr>
        <td>职位</td>
        <td th:text="${position}"></td>
    </tr>
    <tr>
        <td>薪水</td>
        <td th:text="${salary}"></td>
    </tr>
</table>
<div style="color: #ff3f57;font-size: large">希望在未来的日子里携手奋进!</div>

</body>
</html>

3、新建测试类方法:

@Autowired
    TemplateEngine templateEngine;
    @Test
    void test4() throws MessagingException, IOException, TemplateException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        //heper 是一个辅助工具
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom("3425928061@qq.com");
        helper.setTo("3425928061@qq.com");
        helper.setSentDate(new Date());
        helper.setSubject("邮件主题--测试邮件");
        Context context = new Context();
        context.setVariable("username","小明");
        context.setVariable("position","工程");
        context.setVariable("company","xx集团");
        context.setVariable("salary","99889");
        String text = templateEngine.process("mail.html", context);
        helper.setText(text,true);
        javaMailSender.send(mimeMessage);
    }

Thymeleaf提供了TemplateEngine方便咱们使用,不需要实体类User,在context中设置好页面要展示的值即可。
5、测试,查看邮箱:
在这里插入图片描述

标签:qq,SpringBoot,helper,笔记,企业级,mail,new,mimeMessage,邮件
来源: https://blog.csdn.net/qq_41725131/article/details/122014151

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有