今天我们来看看如何用 Spring Boot 简易搭建一个邮箱验证接口。
许多的网站在注册账号之后,都会发送一封邮件到注册邮箱里,而用户需要到邮箱里打开这封验证邮件,并点击邮件里的链接,以向网站证明自己为该邮箱的拥有者。
1. 配置邮箱参数
为了让 Spring Boot 在用户注册成功的时候发送邮件,我们需要先添加一个邮箱服务依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
我们需要配置一个邮箱服务来帮我们发送验证邮箱的邮件,但在配置邮箱参数之前,我们要先决定使用哪一个邮箱服务。这里我们以 QQ 邮箱为例子,朋友们也可以搭建自己的邮箱服务器。
登录 QQ 邮箱之后,点击 设置 -> 账户,打开 “POP3/SMTP服务”,接着取得第三方客户端授权码。

接着我们打开 application.properties 文件来进行配置:
spring.mail.host=smtp.qq.com
spring.mail.protocol=smtp
spring.mail.username= # 填写你的发件邮箱地址
spring.mail.password= # 填写第三方客户端授权码
spring.mail.default-encoding=UTF-8
spring.mail.port=465
# 此为邮件加密服务
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
2. 创建实体类
当用户完成注册之后,我们需要在邮箱验证表里创建一条记录使用户的邮箱与一个唯一的加密 token 匹配,以提升之后验证邮箱时的安全性。
用户需要点击带有该 token 参数的网址,接着我们会检查这个表,token 核对成功之后才算是成功验证邮箱。
创建一个邮箱验证表实体类:
@Entity
@Table(name = "email_verifier")
public class EmailVerifier {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String email;
private int userId;
// 验证用的 token
private String token;
// getters and setters
}
接着创建一个用户实体类。我们需要给用户实体类一个 boolean 值的属性,代表其邮箱是否已经通过验证。默认为 false,因为刚注册成功的时候邮箱肯定是还没有通过验证的。
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String email;
// 邮箱是否成功验证,默认为 false
@Column(name = "is_email_verified", columnDefinition = "boolean default false")
private boolean isEmailVerified;
@JsonIgnore
private String password;
// getters and setters
}
3. 创建仓库类
我们需要写一个简单的用户仓库类
@Repository
@Transactional
public class UserRepositoryImpl implements UserRepository {
@PersistenceContext
private EntityManager entityManager;
// 将新用户插入用户表
public void addUser(String email, String password) {
User user = new User();
entityManager.persist(user);
user.setEmail(email);
user.setPassword(password);
entityManager.flush();
}
// 将用户表里的邮箱是否已验

最低0.47元/天 解锁文章
2509

被折叠的 条评论
为什么被折叠?



