往期推荐
SpringBoot系列(一)idea新建Springboot项目
Springboot系列(七) 集成接口文档swagger,使用,测试
SpringBoot系列(八)分分钟学会Springboot多种解决跨域方式
SpringBoot系列(十)优雅的处理统一异常处理与统一结果返回
SpringBoot系列(十一)拦截器与拦截器链的配置与使用详解,你知道多少?
SpringBoot系列(十三)统一日志处理,logback+slf4j AOP+自定义注解,走起!
目录:
- 二、开启SMTP服务并获取授权码
- 三、依赖导入与配置说明
-
- 2. 带附件内容和正文带图片的邮件发送
- 3. thymeleaf模板作为邮件发送
一、SMTP协议简介
SMTP是一种提供可靠且有效的 电子邮件传输 的协议。SMTP是建立在 FTP 文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能 跨越网络传输邮件 ,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。
简单来说:我们使用的这些邮件发送功能,他们之间都有一个专门的电子邮件的服务器,类似于邮局,你将邮件发给邮局,邮局又会根据你的邮寄地址发送给相应的邮局,然后接收方去邮局取邮件。而邮件服务器呢,就是互联网之间的一个邮局,不同的网络之间也能实现电子邮件的发送。
Spring框架在 java 邮件服务的基础上进行了封装,SpringBoot在Spring的基础上对邮件服务进一步的封装,让SpringBoot发送邮件更为便利,灵活。
二、开启SMTP服务并获取授权码
这里我们以 QQ邮箱 为例,要想在SpringBoot发送QQ邮件必须先打开QQ邮箱的SMTP功能,默认是关闭的,具体操作如下。进入邮箱→设置→账户,然后找到下面这个:
将第一个开启,这里我已经开启了,就不用再开启了,至于那个POP3协议,这是一种从邮件服务器上读取邮件的协议,通过POP3协议,收信人不需要参与到与邮件服务器之间的邮件读取过程,简化了用户操作. 收信人可以“离线”地进行邮件处理,很方便地接收,阅读邮件。
然后我们开启之后还需要获取一个授权码,这个授权码我们后面编写邮件配置需要用到。获取授权码可能需要验证身份什么的。将授权码保存下来。
三、依赖导入与配置说明
依赖导入:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
为了方便测试我们也需要将 starter-web 的依赖导入进来。
配置文件:
spring: mail: host: smtp.qq.com username: qzstudynote@qq.com password: zxcvbnmkj properties: mail: smtp: socketFactory: class: javax.net.ssl.SSLSocketFactory ## ssl: ## enable :true default-encoding: utf-8
配置说明:
- host就是你的邮件服务器地址,
- username就是你的邮箱账号,带上后缀
- password就是你刚刚复制的授权码,我这里是乱写的;
- default-encoding 设置邮件的编码为utf-8;
- properties:额外的配置,这里我写了两个,只用其中一个就行了,开启ssl加密,保证安全连接。
四、邮件发送
1.简单邮件发送
编写controller,或者是直接在测试模块添加测试就行
@RestController public class MailController { @Autowired JavaMailSenderImpl javaMailSender; @RequestMapping("/mail") public String sendMail(){ SimpleMailMessage message = new SimpleMailMessage(); //邮件设置 message.setSubject("邮件主题"); message.setText("邮件内容"); message.setTo("xxxxxxx@139.com","111111111@qq.com"); message.setFrom("qzstudynote@qq.com"); javaMailSender.send(message); return "简单邮件发送成功!" } }
代码说明: JavaMailSenderImpl 就是一个SpringBoot中用来发送邮件的一个实现类,我们需要将它注入到bean中,以供使用。它里面有一些方法,这里只展示了简单的几个,其他的也很简单,比如说发送日期,抄送人等等。接受者可以设置多个,如上。
2. 带附件内容和正文带图片的邮件发送##
@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("全栈学习笔记<a href='https://www.cnblogs.com/swzx-1213/'>百度一下</a> <img src='cid:image1'></img>",true); helper.setTo("xxxxx@139.com"); helper.setFrom("qzstudynote@qq.com"); //附件添加图片 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 "复杂邮件发送!"; }
代码说明:
- 创建一个MimeMessage 邮件,但是我们也需要创建一个 工具 类MimeMessageHelper,相当于代理类吧,邮件的属性配置就由这个工具类来实现。
- addInline() ,第一个参数是一个contentId,String类型的,相当于是一个key,第二个参数是一个Resource对象,资源对象,这里我们传了一个本地的图片就用的FileSystemResource对象。当然这里是说的我们用的这个addInline方法的参数是这样,还有其他的参数类型,所谓重载。
- setText() ,这里用到的第一个参数就是文本字符串,第二个就是是否解析文本中的html语法。
- addAttachment() 这个方法是用来添加附件的,附件和我们之前添加的图片不一样,附件作为一种未下载的文件,而资源文件则是直接显示到正文中。利用我自己的邮箱进行测试的截图:
3. thymeleaf模板作为邮件发送
项目中需要引入thymeleaf依赖,并且要在新建的html文件中加入:xmlns:th=" http://www.thymeleaf.org " ,不会thymeleaf的请移步之前的文章。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
这里在templates下面创建了一个email的html5文件。
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </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("xxxxxxxx@139.com"); messageHelper.setFrom("qzstudynote@qq.com"); 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 "模板邮件发送成功"; }
代码说明:
- Context 属于org.thymeleaf.context这个包。
- context.setVariable() ,第一个参数是String,第二个是Object类型。第一个参数就对应thymeleaf模板上面相同名字的参数。
- templateEngine.process() 将指定路径的html文件转换成String类型返回。
测试:
五、总结
本文讲了基础的邮件发送原理,SMTP协议以及提到的POP3协议的概要内容。然后一起引入依赖,添加项目属性配置,最后讲解了三大类发送邮件的方式。源码获取看下面!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JAVA核心技术(卷1)
Cay S. Horstmann、Gary Cornell / 杜永萍、邝劲筠、叶乃文 / 机械工业出版社 / 2008-6 / 98.00元
《JAVA核心技术(卷1):基础知识(原书第8版)》是《Java核心技术》的最新版,《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了的部分内容,以便适应Java的最新特性。本版也不例外,它反遇了Java SE6的新特性。全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理......一起来看看 《JAVA核心技术(卷1)》 这本书的介绍吧!