Spring Boot邮件功能
1.应用场景
邮件功能的应用场景可谓十分广泛,诸如注册用户、密码找回,消息通知、以及一些程序异常通知等都需要使用到该功能。
正是由于邮件功能的使用广泛,因此springboot也加在它的组件中添加了邮件。
2.maven依赖
springboot中已经给我们准备好了邮件的相关组件,我们只要在springboot项目中将其添加即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
添加后继续查看这个组件的相关依赖(下图),可见里面实际也是封装了javax.mail的邮件收发相关类。
3.普通邮件发送
我们首先编写一个简单text邮件的样例,之后会再在样例的demo上进行其他几种复杂邮件的发送,以及部分源码的解析。
3.1.配置文件
#我这里使用QQ邮箱来发送邮件,因此配置的host是smtp.qq.com,使用其他邮箱需要找到对应的host
spring.mail.host=smtp.qq.com
#发送邮件的邮箱账号
spring.mail.username=*********@qq.com
#发送邮件的邮箱的SMTP服务密码(有的邮箱使用的是邮箱密码,不同邮箱可能不同)
spring.mail.password=**********
#是否进行身份验证
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
3.2.使用方法
@Component
public class EmailService { @Autowired
private JavaMailSender mailSender; public void sendMsg() {
SimpleMailMessage mailMessage = new SimpleMailMessage();
// 邮件发送者,这里不能随便填写,必须是真实的发送邮件的邮箱名称
mailMessage.setFrom("527724431@qq.com");
// 邮件接受者
mailMessage.setTo("18373143942@sina.cn");
// 邮件主题
mailMessage.setSubject("testSubject");
// 邮件内容
mailMessage.setText("hello email!");
// 发送邮件
mailSender.send(mailMessage);
} }
3.3.测试代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests { @Autowired
private EmailService emailService; @Test
public void contextLoads() {
emailService.sendMsg();
} }
3.4查看邮箱
4.复杂邮件发送
复杂邮件分为很多种情况,由于篇幅有限,这里只简单列举其中几种。
4.1多个邮件接收人
我们查看上面方法中设置的setTo()源码:
public void setTo(String to) {
this.to = new String[]{to};
} public void setTo(String... to) {
this.to = to;
}
可见里面实际是将我们传入的参数作为数组来接受的,因此我们可以以下面的两种形式来将邮件发送给多个接收者:
- 数组。
- 多个参数。
// 邮件接受者
mailMessage.setTo("","","");
mailMessage.setTo(new String[]{"",""});
4.2抄送
添加抄送者与添加接受者的方式差不多,区别在于方法名,添加抄送者方法为setCc():
public void setCc(String cc) {
this.cc = new String[]{cc};
} public void setCc(String... cc) {
this.cc = cc;
}
同样也可以添加一个,或以数组和多参数形式添加多个抄送者:
// 邮件抄送者
mailMessage.setCc("");
mailMessage.setCc("","");
mailMessage.setCc(new String[]{"",""});
4.3发送带路径的邮件
复杂邮件与简单邮件相比,这里使用的消息类不再是SimpleMailMessage。而是由邮件发送器JavaMailSender生成的MimeMessage作为消息类,同时加以一个辅助类MimeMessageHelper进行消息的添加。
public void sendComplexMsg() {
MimeMessage message = mailSender.createMimeMessage(); try {
// 生成消息辅助类,注意后面的true是用来决定是否添加附件
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.setSubject("testSubject");
messageHelper.setFrom("527724431@qq.com");
messageHelper.setTo("18373143942@sina.cn");
// 这里后面的true,用来让text内容以html格式进行展示,如果不设置,里面的链接会被作为普通字符串展示
messageHelper.setText("<a href=\"#\">链接</a>", true);
} catch (MessagingException e) {
e.printStackTrace();
} mailSender.send(message); }
4.4添加附件
添加附件和添加带路径内容差不多,区别只在于多使用了"addAttachment()"方法。方法第一个参数是附件在邮件中的命名,第二个参数是要上传的文件。
一个邮件可以添加多个附件,只要继续调用addAttachment()方法即可。
但要注意的是,发送附件文件时,setText()必须要被调用,否则程序将抛出异常,无法发送邮件。
public void sendComplexMsg() {
MimeMessage message = mailSender.createMimeMessage(); try {
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.setSubject("testSubject");
messageHelper.setFrom("527724431@qq.com");
messageHelper.setTo("18373143942@sina.cn");
messageHelper.setText("<a href=\"#\">链接</a>", true);
messageHelper.addAttachment("附件", new File("D://yxf//123.txt"));
} catch (MessagingException e) {
e.printStackTrace();
} mailSender.send(message); }
4.5
Spring Boot邮件功能的更多相关文章
- Spring Boot 邮件发送的 5 种姿势!
邮件发送其实是一个非常常见的需求,用户注册,找回密码等地方,都会用到,使用 JavaSE 代码发送邮件,步骤还是挺繁琐的,Spring Boot 中对于邮件发送,提供了相关的自动化配置类,使得邮件发送 ...
- Spring Boot (十二): Spring Boot 邮件服务
最早我们发邮件的时候是使用 JavaMail 来发送邮件,而在 Spring Boot 中, Spring Boot 帮我们将 JavaMail 封装好了,是可以直接拿来使用的. 1. 依赖文件 po ...
- Spring Boot 邮件配置
######################################################## spring boot mail tls ###################### ...
- Spring Boot常用功能
1.Spring Boot打war包配置 利用IDEA将SpringBoot的项目打包成war文件
- Spring Boot 邮件发送
pom文件依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- spring boot 邮件服务
引入依赖 添加spring-boot-starter-mail包引用 <dependency> <groupId>org.springframework.boot</gr ...
- spring boot 邮件发送(带附件)
首先开启QQ邮箱的POP.SMTP服务器,获取授权码. 设置-->账户-->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 pom.xml需要加载三个ja ...
- Spring Boot Mail 实现邮件发送
此 demo 主要演示了 Spring Boot 如何整合邮件功能,包括发送简单文本邮件. 邮件服务在开发中非常常见,比如用邮件注册账号.邮件作为找回密码的途径.用于订阅内容定期邮件推送等等,下面就简 ...
- Springboot 系列(十七)迅速使用 Spring Boot Admin 监控你的 Spring Boot 程序,支持异常邮件通知
1. Spring Boot Admin 是什么 Spring Boot Admin 是由 codecentric 组织开发的开源项目,使用 Spring Boot Admin 可以管理和监控你的 S ...
随机推荐
- 解决git每次输入密码,设置gitlab、github默认push的用户名和密码
git ssh key配置&解决git每次输入密码 欢迎加入qq群(IT-程序猿-技术交流群):757345416 在使用git时,每次pull/push都需要输入密码,有时大大降低了我们 ...
- iOS之CGcontext.h方法和属性简介
/* CoreGraphics - CGContext.h Copyright (c) 2000-2012 Apple Inc. All rights reserved. */ #ifndef CGC ...
- java接口的意义
java当中继承一个接口,要重写他的方法的话,那为什么还要多此一举的去实现一个接口呢? 直接把方法写在类当中不就可以了?就是说去掉类名后面的Implements 接口 ,可以不可以呢? 接口的最主要的 ...
- 关于获取webview(窗口间关系)的方法
1.获取指定页面ID的webview plus.webview.getWebviewById('为页面设置的id值'): 该方法主要用于首页底部导航切换到子页面时不执行子页面的函数,因为在设置导航的时 ...
- 接口Interface解耦的理解
定义一个接口 磁盘 interface Disk(){ void save(File file); } U盘和硬盘都是磁盘,都实现这个接口 class UDisk implement Disk ...
- 转:linux下的c/c++开发
源地址:http://zhidao.baidu.com/question/131261452.html 我就是做LINUX下的C开发的. 准确的说,LINUX下C才是主要的开发语言,但是写应用程序还是 ...
- nprogress 转
转载:http://www.xuanfengge.com/front-end-nprogress-and-lightweight-web-progress-bar-nanobar.html 前言 进度 ...
- href 页面跳转页面 参数
$.getUrlParam = function (name) { var reg = new RegExp("(^|&)" + name + "=([^& ...
- Leetcode958. Check Completeness of a Binary Tree二叉树的完全验证性
给定一个二叉树,确定它是否是一个完全二叉树. 百度百科中对完全二叉树的定义如下: 若设二叉树的深度为 h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集 ...
- 机器学习之五 正则化的线性回归-岭回归与Lasso回归
机器学习之五 正则化的线性回归-岭回归与Lasso回归 注:正则化是用来防止过拟合的方法.在最开始学习机器学习的课程时,只是觉得这个方法就像某种魔法一样非常神奇的改变了模型的参数.但是一直也无法对其基 ...