前置说明本文使用 spring 框架中自带的 JavaMailSender 发送邮件,使用HttpSession 在服务器端保存会话信息,储存生成的验证码,以便客户端输入验证码进行验证 。
邮箱验证码验证众所周知,邮件可以包含很多种类的内容 。在本文中,邮件内容分为:纯文本、HTML代码(Thymeleaf模板)、附件、图片 。看完内容类型可以得知,其实内容为 HTML 代码或附件是最好用的 。
验证流程:
1. 客户端发送获取验证码请求
2. 服务器端通过 VerifyCodeService 生成验证码,并将验证码放入 session 中
3. 服务器将验证码通过 MailService 发送到用户邮箱
4. 用户输入验证码,通过验证
代码示例一、maven依赖
注意:starter-mail 要是 2.1.3.RELEASE 以下的,这样可以使用 JavaMailHelper,2.1.6.RELEASE 及以上不清楚调用什么api可以发邮件,感兴趣的同学可以查一下官方文档~
二、application.properties 配置
在 application.properties 配置发送邮件以及使用模板的配置 。
## mail config ###163的SMTP服务器spring.mail.host=smtp.163.com#发件邮箱的账号和密码spring.mail.username=xxx@163.comspring.mail.password=xxxspring.mail.default-encoding=utf-8## thymeleaf config##spring.thymeleaf.mode=HTML5spring.thymeleaf.encoding=UTF-8spring.thymeleaf.cache=false## default config ##mail.from.addr=xxx@163.com
三、MailService(interface)
提供发送不同类型内容邮件的服务 。
【Session实现邮箱验证码验证 邮箱验证码在哪里找】/** * @author amber */public interface MailService {/*** 发送普通文本邮件** @param to收件人* @param subject 主题* @param content 内容*/void sendSimpleMail(String to, String subject, String content);/*** 发送HTML邮件** @param to收件人* @param subject 主题* @param content 内容(可以包含等标签)*/void sendHtmlMail(String to, String subject, String content);/*** 发送带附件的邮件** @param to收件人* @param subject主题* @param content内容* @param filePath 附件路径*/void sendAttachmentMail(String to, String subject, String content, String filePath);/*** 发送带图片的邮件** @param to收件人* @param subject 主题* @param content 文本* @param rscPath 图片路径* @param rscId图片ID,用于在
标签中使用,从而显示图片*/void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId);}
四、MailServiceImpl
MailService 服务实现 。
import com.amber.verifycode.service.MailService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.core.io.FileSystemResource;import org.springframework.mail.SimpleMailMessage;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;import org.springframework.stereotype.Service;import javax.mail.MessagingException;import javax.mail.internet.MimeMessage;import java.io.File;/** * @author amber */@Servicepublic class MailServiceImpl implements MailService {@Value("${mail.from.addr}")private String from;@AutowiredJavaMailSender javaMailSender;@Overridepublic void sendSimpleMail(String to, String subject, String content) {SimpleMailMessage message = new SimpleMailMessage();//收信人message.setTo(to);//主题message.setSubject(subject);//内容message.setText(content);//发信人message.setFrom(from);try {javaMailSender.send(message);} catch (Exception e) {e.printStackTrace();}}@Overridepublic void sendHtmlMail(String to, String subject, String content) {try {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(from);helper.setTo(to);helper.setSubject(subject);//true代表支持htmlhelper.setText(content, true);javaMailSender.send(message);} catch (MessagingException e){}}@Overridepublic void sendAttachmentMail(String to, String subject, String content, String filePath) {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper;try {helper = new MimeMessageHelper(message, true);//true代表支持多组件,如附件,图片等helper.setFrom(from);helper.setTo(to);helper.setSubject(subject);helper.setText(content, true);FileSystemResource file = new FileSystemResource(new File(filePath));String fileName = file.getFilename();//添加附件,可多次调用该方法添加多个附件helper.addAttachment(fileName, file);javaMailSender.send(message);} catch (MessagingException e) {}} @Overridepublic void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId) {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper;try {helper = new MimeMessageHelper(message, true);helper.setFrom(from);helper.setTo(to);helper.setSubject(subject);helper.setText(content, true);FileSystemResource res = new FileSystemResource(new File(rscPath));//重复使用添加多个图片helper.addInline(rscId, res);javaMailSender.send(message);} catch (MessagingException e) {}}}
- 【星座控】生肖龙、牛、猴,4月运势“黄金期”,成长快,喜事多,实现逆袭
- ios15.4实现口罩解锁,这一革新不亚于指纹识别!
- 复古城堡坐落在美国湖边,富豪爸爸为实现女儿公主梦用心打造
- 汉密尔顿手表怎么样(汉密尔顿女士手表怎么样)
- 如何实现可靠的通信?怎样做出更好的决策?浅谈信息论之美
- 苹果系统如何实现格式化操作 苹果手机格式化怎么操作
- 王春雨实现800米历史性突破 跑800米的技巧
- 【十二星座】7天之内,运势红红火火,一发不可收拾,目标提前实现的3大生肖
- 个人怎么做知识付费 这几个步骤帮助大家实现
- 【游戏世界】海盗世界全能型玩家实打实的全能型玩家实现身兼数职