在 Spring Boot 开发的 CRM 系统中,可以通过阿里云平台的邮件服务(DirectMail 或邮件推送服务)来发送验证邮件,从而进行电子邮件校验。
1. 配置阿里云邮件推送服务
首先,在阿里云平台上启用邮件推送服务,并获取必要的凭证。
(1) 开通阿里云邮件推送服务
登录阿里云控制台。
进入邮件推送服务页面并创建发信地址。
获取 AccessKeyId 和 AccessKeySecret 以便后续使用。
(2) 配置发信地址
进入邮件推送服务控制台,设置发信地址。
确保发信地址通过审核,发信域名已正确配置。
2. 集成阿里云邮件 SDK
在 Spring Boot 项目中,使用 Maven 引入阿里云的邮件推送服务 SDK。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dm</artifactId>
<version>1.0.0</version>
</dependency>
配置阿里云 SDK 的基本信息
在 application.yml中
aliyun:
mail:
accessKeyId: your_access_key_id
accessKeySecret: your_access_key_secret
accountName: your_verified_email@example.com
regionId: cn-hangzhou
3. 实现邮件发送功能
在 Spring Boot 项目中,创建一个服务类来发送验证邮件。这个类将利用阿里云 SDK 发送带有验证链接的邮件。
(1) 创建 EmailService
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dm.model.v20151123.SingleSendMailRequest;
import com.aliyuncs.dm.model.v20151123.SingleSendMailResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class EmailService {
@Value("${aliyun.mail.accessKeyId}")
private String accessKeyId;
@Value("${aliyun.mail.accessKeySecret}")
private String accessKeySecret;
@Value("${aliyun.mail.accountName}")
private String accountName;
@Value("${aliyun.mail.regionId}")
private String regionId;
public void sendVerificationEmail(String toEmail, String subject, String body) throws ClientException {
// 设置阿里云 SDK 客户端
DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
// 创建邮件请求
SingleSendMailRequest request = new SingleSendMailRequest();
request.setAccountName(accountName); // 发信地址
request.setFromAlias("YourAppName"); // 发信别名
request.setAddressType(1); // 发信地址类型
request.setTagName("registration"); // 标签
request.setReplyToAddress(true); // 是否回复地址
request.setToAddress(toEmail); // 收件人邮箱
request.setSubject(subject); // 邮件主题
request.setHtmlBody(body); // 邮件内容(HTML 格式)
// 发送邮件
SingleSendMailResponse response = client.getAcsResponse(request);
System.out.println("Email sent! RequestId: " + response.getRequestId());
}
}
(2) 生成唯一的验证链接或验证码
在注册时生成一个唯一的验证链接或验证码,并将其嵌入到邮件中。可以使用 UUID 或自定义的随机字符串生成机制来确保链接的唯一性。
import java.util.UUID;
public String generateVerificationToken() {
return UUID.randomUUID().toString();
}
例如,生成的验证链接可以类似这样:
String verificationToken = generateVerificationToken();
String verificationLink = "https://yourapp.com/verify-email?token=" + verificationToken;
4. 发送验证邮件
在用户注册时,调用 EmailService 来发送验证邮件:
@Autowired
private EmailService emailService;
public void registerUser(User user) {
// 保存用户信息,设置用户状态为未激活
userRepository.save(user);
// 生成验证链接
String token = generateVerificationToken();
String verificationLink = "https://yourapp.com/verify-email?token=" + token;
// 构建邮件内容
String subject = "Please verify your email address";
String body = "<h1>Thank you for registering!</h1>" +
"<p>Please verify your email by clicking the link below:</p>" +
"<a href=\"" + verificationLink + "\">Verify Email</a>";
// 发送邮件
emailService.sendVerificationEmail(user.getEmail(), subject, body);
}
5. 验证链接处理
当用户点击邮件中的验证链接时,CRM 系统需要处理这个请求,验证链接中的 token,并激活用户账户。
(1) 控制器处理验证请求
@RestController
@RequestMapping("/verify-email")
public class VerificationController {
@Autowired
private UserService userService;
@GetMapping
public ResponseEntity<String> verifyEmail(@RequestParam("token") String token) {
boolean isVerified = userService.verifyEmailToken(token);
if (isVerified) {
return ResponseEntity.ok("Email verified successfully!");
} else {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Invalid or expired verification token.");
}
}
}
(2) 验证逻辑
在 UserService 中实现 verifyEmailToken,验证数据库中的 token 是否有效,并激活用户:
public boolean verifyEmailToken(String token) {
User user = userRepository.findByVerificationToken(token);
if (user != null && !user.isActivated()) {
user.setActivated(true);
user.setVerificationToken(null); // 清除 token,防止重复使用
userRepository.save(user);
return true;
}
return false;
}
6. 总结
- 阿里云邮件推送服务用于发送验证邮件。
- 用户注册时生成唯一验证链接或验证码。
- 通过邮件将验证链接发送给用户。
- 用户点击链接后,CRM系统通过校验 token来激活用户账户。
这种方式确保了用户提供的电子邮件是有效的,并且用户对其邮箱有控制权。