往期推荐
SpringBoot系列(一)idea新建Springboot项目
SpringBoot系列(二)入门知识
springBoot系列(三)配置文件详解
SpringBoot系列(四)web静态资源配置详解
SpringBoot系列(五)Mybatis整合完整详细版
SpringBoot系列(六)集成thymeleaf详解版
Springboot系列(七) 集成接口文档swagger,使用,测试
SpringBoot系列(八)一文轻松解决跨域问题
SpringBoot系列(九)单,多文件上传的正确姿势
SpringBoot系列(十)统一异常处理与统一结果返回
SpringBoot系列(十一)拦截器与拦截器链的配置与使用详解,你知道多少?
SpringBoot系列(十二)过滤器配置详解
SpringBoot系列(十三)统一日志处理,logback+slf4j AOP+自定义注解,走起!
目录:
SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。
简单来说:我们使用的这些邮件发送功能,他们之间都有一个专门的电子邮件的服务器,类似于邮局,你将邮件发给邮局,邮局又会根据你的邮寄地址发送给相应的邮局,然后接收方去邮局取邮件。而邮件服务器呢,就是互联网之间的一个邮局,不同的网络之间也能实现电子邮件的发送。
Spring框架在java邮件服务的基础上进行了封装,SpringBoot在Spring的基础上对邮件服务进一步的封装,让SpringBoot发送邮件更为便利,灵活。
这里我们以QQ邮箱为例,要想在SpringBoot发送QQ邮件必须先打开QQ邮箱的SMTP功能,默认是关闭的,具体操作如下。进入邮箱→设置→账户,然后找到下面这个:
将第一个开启,这里我已经开启了,就不用再开启了,至于那个POP3协议,这是一种从邮件服务器上读取邮件的协议,通过POP3协议,收信人不需要参与到与邮件服务器之间的邮件读取过程,简化了用户操作. 收信人可以“离线”地进行邮件处理,很方便地接收,阅读邮件。
然后我们开启之后还需要获取一个授权码,这个授权码我们后面编写邮件配置需要用到。获取授权码可能需要验证身份什么的。将授权码保存下来。
依赖导入:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-mailartifactId>
dependency>
为了方便测试我们也需要将starter-web的依赖导入进来。
配置文件:
spring:
mail:
host: smtp.qq.com
username: [email protected]
password: zxcvbnmkj
properties:
mail:
smtp:
socketFactory:
class: javax.net.ssl.SSLSocketFactory
## ssl:
## enable :true
default-encoding: utf-8
配置说明:
编写controller,或者是直接在测试模块添加测试就行
@RestController
public class MailController {
@Autowired
JavaMailSenderImpl javaMailSender;
@RequestMapping("/mail")
public String sendMail(){
SimpleMailMessage message = new SimpleMailMessage();
//邮件设置
message.setSubject("邮件主题");
message.setText("邮件内容");
message.setTo("[email protected]","[email protected]");
message.setFrom("[email protected]");
javaMailSender.send(message);
return "简单邮件发送成功!"
}
}
代码说明:JavaMailSenderImpl就是一个SpringBoot中用来发送邮件的一个实现类,我们需要将它注入到bean中,以供使用。它里面有一些方法,这里只展示了简单的几个,其他的也很简单,比如说发送日期,抄送人等等。接受者可以设置多个,如上。
@RequestMapping("/mineMail")
public String sendMineMail() throws MessagingException {
//1、创建一个复杂的邮件
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
//邮件主题
helper.setSubject("这是一个邮件啊");
//文本中添加图片
helper.addInline("image1",new FileSystemResource("D:\\images\\spring\\1.jpg"));
//邮件内容
helper.setText("全栈学习笔记百度一下 ",true);
helper.setTo("[email protected]");
helper.setFrom("[email protected]");
//附件添加图片
helper.addAttachment("1.jpg",new File("D:\\images\\spring\\1.jpg"));
//附件添加word文档
helper.addAttachment("哈哈哈.docx",new File("D:\\images\\spring\\哈哈哈.docx"));
javaMailSender.send(mimeMessage);
return "复杂邮件发送!";
}
代码说明:
项目中需要引入thymeleaf依赖,并且要在新建的html文件中加入:xmlns:th=“http://www.thymeleaf.org” ,不会thymeleaf的请移步之前的文章。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-thymeleafartifactId>
dependency>
这里在templates下面创建了一个email的html5文件。
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<p th:text="${name}">p>
<a th:text="这是一个链接" th:href="${link}">a>
<img th:src="${image1}">
body>
html>
controller中再添加一个方法。
@RequestMapping("/thyMail")
public String sendThymeleafMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
messageHelper.setSubject("这是一个thymeleaf模板邮件");
messageHelper.setTo("[email protected]");
messageHelper.setFrom("[email protected]");
Context context = new Context();
context.setVariable("name","这是一个新建的thymeleaf模板");
context.setVariable("link","https://www.cnblogs.com/swzx-1213/");
context.setVariable("image1","https://s1.ax1x.com/2020/04/14/JShDYt.th.jpg");
String value = templateEngine.process("email.html",context);
messageHelper.setText(value,true);
javaMailSender.send(mimeMessage);
return "模板邮件发送成功";
}
代码说明:
本文讲了基础的邮件发送原理,SMTP协议以及提到的POP3协议的概要内容。然后一起引入依赖,添加项目属性配置,最后讲解了三大类发送邮件的方式。源码获取看下面!