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;
}

可见里面实际是将我们传入的参数作为数组来接受的,因此我们可以以下面的两种形式来将邮件发送给多个接收者:

  1. 数组。
  2. 多个参数。
        // 邮件接受者
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邮件功能的更多相关文章

  1. Spring Boot 邮件发送的 5 种姿势!

    邮件发送其实是一个非常常见的需求,用户注册,找回密码等地方,都会用到,使用 JavaSE 代码发送邮件,步骤还是挺繁琐的,Spring Boot 中对于邮件发送,提供了相关的自动化配置类,使得邮件发送 ...

  2. Spring Boot (十二): Spring Boot 邮件服务

    最早我们发邮件的时候是使用 JavaMail 来发送邮件,而在 Spring Boot 中, Spring Boot 帮我们将 JavaMail 封装好了,是可以直接拿来使用的. 1. 依赖文件 po ...

  3. Spring Boot 邮件配置

    ######################################################## spring boot mail tls ###################### ...

  4. Spring Boot常用功能

    1.Spring Boot打war包配置 利用IDEA将SpringBoot的项目打包成war文件

  5. Spring Boot 邮件发送

    pom文件依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  6. spring boot 邮件服务

    引入依赖 添加spring-boot-starter-mail包引用 <dependency> <groupId>org.springframework.boot</gr ...

  7. spring boot 邮件发送(带附件)

    首先开启QQ邮箱的POP.SMTP服务器,获取授权码. 设置-->账户-->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 pom.xml需要加载三个ja ...

  8. Spring Boot Mail 实现邮件发送

    此 demo 主要演示了 Spring Boot 如何整合邮件功能,包括发送简单文本邮件. 邮件服务在开发中非常常见,比如用邮件注册账号.邮件作为找回密码的途径.用于订阅内容定期邮件推送等等,下面就简 ...

  9. Springboot 系列(十七)迅速使用 Spring Boot Admin 监控你的 Spring Boot 程序,支持异常邮件通知

    1. Spring Boot Admin 是什么 Spring Boot Admin 是由 codecentric 组织开发的开源项目,使用 Spring Boot Admin 可以管理和监控你的 S ...

随机推荐

  1. Python面向对象学习

    以下面例子作为面向对象基础介绍,类比java里的面向对象既可以,大同小异 class Employee(): raiseAmount=1.04 employeeNum= def __init__(se ...

  2. 过滤器filters

    <!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...

  3. day 45 前端CSS

      前端CSS   CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素,给HTML设置样式,让它更加美观. 当浏览器读到一个样式表,它就会按照这个样式 ...

  4. #iOS问题记录# 频繁触发viewDidLayoutSubviews的问题

    问题描述: 最近使用给Flutter团队写view组件的时候,出现了触发Widget的频繁build的问题. 问题排查: Flutter的同事提到在flutter层,是因为 updateViewpor ...

  5. python 解决抓取网页中的中文显示乱码问题

    关于爬虫乱码有很多各式各样的问题,这里不仅是中文乱码,编码转换.还包括一些如日文.韩文 .俄文.藏文之类的乱码处理,因为解决方式是一致的,故在此统一说明. 网络爬虫出现乱码的原因 源网页编码和爬取下来 ...

  6. JZOJ5857 【NOIP提高组模拟A组2018.9.8】没有上司的舞会

    题目 Description "那么真的有果尔德施坦因这样一个人?"他问道. "是啊,有这样一个人,他还活着.至于在哪里,我就不知道了." "那么那个 ...

  7. noi.openjudge 二分法求函数的零点

    二分法求函数的零点 总时间限制: 1000ms 内存限制: 65536kB 描述 有函数:f(x) = x5 - 15 * x4+ 85 * x3- 225 * x2+ 274 * x - 121 已 ...

  8. extern关键字及C\C++相互调用

    extern关键字主要修饰变量或函数,表示该函数可以跨文件访问,或者表明该变量在其他文件定义,在此处引用. 1.extern修饰变量 (1)如果某变量int m在a.c中定义声明,则其他b.c文件访问 ...

  9. vue 基本知识

    1,内置事件对象event 原生JS事件中是直接通过传入 e 或者 event 就可以获取,但在vue中要传入 $event 才可以获取到内置事件对象 <body> <button ...

  10. 原生微信小程序数据渲染

    一直在写vue,第一次接触微信小程序,还是原生,最开始做的时候真的很闹心啊啊啊啊啊啊啊啊啊啊啊啊!!所以最近大概更新的都是微信小程序原生的内容了~~么么哒!!一定会继续努力的!!tips:在小程序项目 ...