面试官:怎么通过邮箱发送验证码?

284 阅读3分钟

我们在做网站开发的时候肯定绕不开的两个功能:注册、登录

如果我们的网站只是一个后台管理系统在内部使用话,注册和登录可以只包括用户名、密码和图形验证码。

但是如果我们开发一个门户网站的话,短信/邮箱验证码就必不可少了,通过这种方法我们可以验证注册人的真实性以防有人故意破坏网站。

今天来介绍一下怎么在系统中集成邮箱发送验证码的功能。

开发环境/工具:SpringBoot+jdk8+QQ邮箱

QQ邮箱准备

要想实现调用QQ邮箱的发送功能需要先开通POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,这里简单介绍一下这几个协议。

  • POP3(Post Office Protocol 3):一种用于接收电子邮件的协议。
  • IMAP(Internet Message Access Protocol):一种用于接收电子邮件的协议。不同于POP3,IMAP在客户端设备和电子邮件服务器之间保持电子邮件的同步,邮件仍然存储在服务器上。
  • SMTP(Simple Mail Transfer Protocol):一种用于发送电子邮件的协议。
  • Exchange:微软的企业邮件和协作平台,提供电子邮件、日历、联系人、任务等功能。
  • CardDAV:一种用于联系人数据的开放标准协议。
  • CalDAV:一种用于日历数据的开放标准协议。

因为是实现发送功能,所以我们使用的是SMTP协议。

首先登录QQ邮箱网页版,依次点击设置->账户->开启服务,如下图所示。

Snipaste_2023-11-02_18-30-51.png

Snipaste_2023-11-02_18-31-48.png

接着需要验证手机,之后我们便得到了一串授权码,代表着服务已经开通了!这里的授权码相当于邮箱的登录密码,只不过它只能用于发送邮件而不能通过授权码登录QQ邮箱,这样就保证了我们邮箱的安全性。

Snipaste_2023-11-02_18-34-55.png

集成邮箱功能

新建项目

新建一个SpringBoot项目并且引入关于邮箱的依赖。

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

配置文件

配置文件如下。其中,

  • 个人邮件服务器:smtp.qq.com;发送端口: 465或587
  • 企业邮箱服务器:smtp.exmail.qq.com;发送端口: 465或587
  • 客户端密码:第一步获得的授权码

carbon(4).png

service层

service中写发送邮件的核心逻辑,包括设置发送人(注意:这里的发送人和配置文件中的用户应当保持一致)、接收人、设置邮件主题和内容等。具体代码如下。

carbon(5).png

controller层

通过接收一个邮箱地址,调用service服务发送邮件。具体代码如下。

carbon(6).png

测试接口

通过postman对接口进行测试,这里用我另一个QQ邮箱当做接收邮箱传入body中。点击发送。这时候打开邮箱我们会发现已经收到验证码!

Snipaste_2023-11-02_19-40-24.png

Snipaste_2023-11-02_19-42-31.png

总结

文章通过调用QQ邮箱的SMTP服务来实现验证码发送功能(需要提前开通该服务),省略了对验证码的验证过程(通过中间件例如Redis存储验证码完成验证)。

更多文章干货,推荐公众号【程序员老J】