牛客网后端项目实战(八):开发注册功能
发送邮件
- 邮箱设置
- 启用客户端SMTP服务
- Spring Email
- 导入 jar 包
- 邮箱参数配置
- 使用 JavaMailSender 发送邮件
- 模板引擎
- 使用 Thymeleaf 发送 HTML 邮件
邮箱设置
首先启用邮箱的SMTP服务,我直接使用我个人的qq邮箱。进入qq邮箱设置帐户页面,开启POP3/SMTP服务,按照下方提示生成授权码,qq邮箱强制使用授权码代替邮箱密码。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-akqubXzR-1584504195819)(http://cdn.neuswc2019.xyz/20200313105819.png)]
Spring Email
导入jar包
首先,在之前提到的搜索包的网站mvn上搜索spring mail,把配置复制到pom里。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
邮箱参数配置
在properties里配置。前两项根据使用的邮箱修改,密码有的邮箱使用登录密码,大部分使用授权码
# MailProperties
spring.mail.host=smtp.qq.com //邮箱服务器
spring.mail.port=465 //服务器端口
spring.mail.username=111111111@qq.com //邮箱
spring.mail.password=aaaaaaaaaaaaaaaa //密码/授权码
spring.mail.protocol=smtps //协议,加密
spring.mail.properties.mail.smtp.ssl.enable=true //开启ssl
使用JavaMailSender
将发送邮件封装成一个工具类,新建一个util包,包下新建mailClient类。因为发送邮件实际是邮箱服务器进行,我们这里写的实际是客户端。
package com.neu.langsam.community.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMailMessage;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
@Component
public class MailClient {
//启用日志
private static final Logger logger= LoggerFactory.getLogger(MailClient.class);
//注入JavaMailSender
@Autowired
private JavaMailSender mailSender;
//注入properties里的username值给from
@Value("${spring.mail.username}")
private String from;
public void senMail(String to,String subject,String content){
try {
//邮件内容
MimeMessage message=mailSender.createMimeMessage();
//帮助构建邮件内容
MimeMessageHelper helper=new MimeMessageHelper(message);
helper.setFrom(from); //发件人
helper.setTo(to); //收件人
helper.setSubject(subject); //主题
helper.setText(content,true); //内容和开启html
mailSender.send(helper.getMimeMessage());
} catch (MessagingException e) {
logger.error("发送邮件失败:"+e.getMessage());
}
}
}
然后写一个测试类来测试一下有没有问题。被qq邮箱分类到垃圾箱中了,尴尬。
@Test
public void testTextMail(){
mailClient.senMail("1844678540@qq.com","你是一个大帅哥","你好帅");
}
使用模板引擎
我们使用thymeleaf模板引擎生成一个html文件作为邮件内容。
在templates/mail下新建一个demo.html
<!DOCTYPE html>
<html lang="en