springboot邮件发送和接收验证码

springboot邮件篇

要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:新浪、搜狐、163、QQ邮箱等,他们都有自己的邮件服务器。这些服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

所有的用户都可以在电子邮件服务器上申请一个账号用于邮件发送和接收,那么邮件是以什么样的格式发送的呢?实际上和Http一样,邮件发送也有自己的协议,也就是约定邮件数据以及如何通信。

image-20230904195021236

比较常用的协议有两种:

  1. SMTP协议(主要用于发送邮件 Simple Mail Transfer Protocol)
  2. POP3协议(主要用于接收邮件 Post Office Protocol 3)

整个发送/接收流程大致如下:

image-20230904195031777

实际上每个邮箱服务器都有一个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服务才可以,开启后会得到一个随机生成的密钥,这个就是我们的密码。

发送邮件

导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

获取password,邮箱中点开设置,打开smtp服务,获取密钥

image-20230904193047838

设置yml文件

  mail:
    host: smtp.163.com
    username:  @163.com
    password: 

代码生成

@SpringBootTest
class Demo8ApplicationTests {

    @Resource
    JavaMailSender sender;

    @Test
    void contextLoads() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setSubject("[西安邮电大学教务处]关于近期学校决定对您进行军训的通知"); //设置邮件标题
        message.setText("xxx同学你好,经学校体育部决定,您很有参加军训的必要,请明天上午7点务必到操场集合,学校为您准备了一对一服务"); //设置邮件内容
        message.setTo("your@icloud.com");
        message.setFrom("your@163.com");
        sender.send(message);
    }
}

最后点击发送

image-20230904192918413

验证码的发送

注册网站的时候通常要接收验证码,且验证码有有效期

发送验证码与之前没什么很大的区别,引用一个Random类就行

此处给验证过程代码

    @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 "注册成功";
    }

以上就是邮件模块常见内容,后续会进行补充

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值