springboot邮件篇
要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:新浪、搜狐、163、QQ邮箱等,他们都有自己的邮件服务器。这些服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。
所有的用户都可以在电子邮件服务器上申请一个账号用于邮件发送和接收,那么邮件是以什么样的格式发送的呢?实际上和Http一样,邮件发送也有自己的协议,也就是约定邮件数据以及如何通信。

比较常用的协议有两种:
- SMTP协议(主要用于发送邮件 Simple Mail Transfer Protocol)
- POP3协议(主要用于接收邮件 Post Office Protocol 3)
整个发送/接收流程大致如下:

实际上每个邮箱服务器都有一个smtp发送服务器和pop3接收服务器,比如要从QQ邮箱发送邮件到163邮箱,那么我们只需要通过QQ邮箱客户端告知QQ邮箱的smtp服务器我们需要发送邮件,以及邮件的相关信息,然后QQ邮箱的smtp服务器就会帮助我们发送到163邮箱的pop3服务器上,163邮箱会通过163邮箱客户端告知对应用户收到一封新邮件。
如果想要实现给别人发送邮件,那么就需要连接到对应电子邮箱的smtp服务器上,并告知其要发送邮件。而SpringBoot已经帮助我们将最基本的底层通信全部实现了,我们只需要关心smtp服务器的地址以及我们要发送的邮件长啥样即可。
这里以163邮箱 https://mail.163.com 为例,我们需要在配置文件中告诉SpringBootMail我们的smtp服务器的地址以及你的邮箱账号和密码,首先我们要去设置中开启smtp/pop3服务才可以,开启后会得到一个随机生成的密钥,这个就是我们的密码。
发送邮件
导入依赖
1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
|
获取password,邮箱中点开设置,打开smtp服务,获取密钥

设置yml文件
1 2 3 4
| mail: host: smtp.163.com username: @163.com password:
|
代码生成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @SpringBootTest class Demo8ApplicationTests {
@Resource JavaMailSender sender;
@Test void contextLoads() { SimpleMailMessage message = new SimpleMailMessage(); message.setSubject("[西安邮电大学教务处]关于近期学校决定对您进行军训的通知"); message.setText("xxx同学你好,经学校体育部决定,您很有参加军训的必要,请明天上午7点务必到操场集合,学校为您准备了一对一服务"); message.setTo("[email protected]"); message.setFrom("[email protected]"); sender.send(message); } }
|
最后点击发送
验证码的发送
注册网站的时候通常要接收验证码,且验证码有有效期
发送验证码与之前没什么很大的区别,引用一个Random类就行
此处给验证过程代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @PostMapping("/register") public String register(@RequestParam String username, @RequestParam String email, @RequestParam String code, @RequestParam String password, HttpSession session) { String sessionCode = (String) session.getAttribute("code"); String sessionEmail = (String) session.getAttribute("email"); if(sessionCode == null) { return "请先获取验证码"; } if(!sessionCode.equals(code)) { return "验证码不正确"; } mapper.createUser(username,email,password); return "注册成功"; }
|