发送邮箱API

Lu Lv3

SpringBoot整合Email 邮件发送

一.准备

在创建SpringBoot项目 选择依赖时 发现其选择依赖时有邮件发送与Springboot整合的jar包,我们勾选即可

在这里插入图片描述

如果未勾选也不要紧,咱们手动导入

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

本项目是基于页面测试的,所以我又引入了相关web依赖 ,简化实体类代码引入了lombok依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

二.邮件发送需要的配置

因为各大邮件都有其对应安全系统,不是项目中想用就可以用的,我们必须要拿到其对应的客户端授权码才行,拿到授权码,在项目中配置SMTP服务协议以及主机配置账户 ,就可以在项目中使用各大邮件运营商进行发送邮件了获取客户端授权码过程由于国内使用163邮箱以及qq邮箱较多所以本文中仅仅展示这两个运营商获取客户端授权码的步骤

获取163邮箱授权码

登陆163邮箱查看勾选服务是否开启,如未开启则勾选

在这里插入图片描述|575
因为我在做本项目是已经是开启了,所以这里是叫我重置客户端授权码了

在这里插入图片描述|575
在未设置授权码时点击此页面回叫你使用当前邮箱账号绑定的手机号发送一条短信确认发送后,确认成功后,便可自定义163邮箱的客户端授权码了

在这里插入图片描述|500

获取QQ邮箱授权码

登陆qq邮箱后,点击设置 选择 账户选项
在这里插入图片描述|525
向下拉选择开启POP3/SMTP 服务
在这里插入图片描述|525
点击开启也会进入验证 验证成功后即可看到自己qq邮箱的客户端授权码了

在这里插入图片描述|500
在这里插入图片描述|525

我们在拿到授权码后,就可以在我们Springboot工程中的配置文件 aplication.yml 或者properties文件中配置了

YML配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
spring:
mail:
#smtp服务主机 qq邮箱则为smtp.qq.com
host: smtp.163.com
#服务协议
protocol: smtp
# 编码集
default-encoding: UTF-8
#发送邮件的账户
username: xxxxxxx@163.com
#授权码
password: xxxxxx
test-connection: true
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true

三.代码编写

下面开始Springboot项目中发送邮件的代码编写其实也非常简单 ,Springboot已经给我们邮件发送进行了非常好的整合了,我们只需要注入邮件发送接口调用其中的方法,就能轻松而愉悦的进行邮件发送了!

我们只需要在任意交由Spring管理的类(例如你的service层等)下注入以下接口即可

1
2
@Autowired
private JavaMailSender mailSender;

由于每一封邮件都有固定的内容 例如 收件人信息 邮件内容 邮件标题那么我们充分利用java面向对象的特性,我们吧邮件发送抽取为一个对象代码采用了lombok进行简化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ToEmail implements Serializable {

/**
* 邮件接收方,可多人
*/
private String[] tos;
/**
* 邮件主题
*/
private String subject;
/**
* 邮件内容
*/
private String content;
}

肯定有人纳闷了,那么接收方有了,发送方呢?
发送一方,肯定就是我们自身拿到的授权码账号啊 ,我们获取账户客户端授权码其目的就是为了让代码代替我们自身邮箱向其他邮箱发送信息而已。

获取发送方账户信息

1
2
@Value("${spring.mail.username}")
private String from;

统一说明: JsonReturn 为我项目自定义的Ajax 响应,结合 RestController或者Responsebody向前端返回统一的JSON格式数据

普通邮件发送
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public JsonReturn commonEmail(ToEmail toEmail) {
//创建简单邮件消息
SimpleMailMessage message = new SimpleMailMessage();
//谁发的
message.setFrom(from);
//谁要接收
message.setTo(toEmail.getTos());
//邮件标题
message.setSubject(toEmail.getSubject());
//邮件内容
message.setText(toEmail.getContent());
try {
mailSender.send(message);
return JsonReturn.buildSuccess(toEmail.getTos(), "发送普通邮件成功");
} catch (MailException e) {

e.printStackTrace();
return JsonReturn.buildFailure("普通邮件方失败");
}

在这里插入图片描述|525
在这里插入图片描述

  • Title: 发送邮箱API
  • Author: Lu
  • Created at : 2024-07-17 02:13:56
  • Updated at : 2024-07-17 04:13:56
  • Link: https://lusy.ink/2024/07/17/发送邮箱.API/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments