知识付费网站开发,南通城乡建设局网站首页,led网站免费模板,中国建设通网站SPRING BOOT邮件发送验证码
一、Gmail邮箱配置
1、进入Gmail(https://mail.google.com) 2、打开谷歌右上角设置
3、启用POP/IMP
4、启用两步验证(https://myaccount.google.com/security)
5、建立应用程式密码
6、复制保存应用程式密码
二、代码
1、引入依赖 d…SPRING BOOT邮件发送验证码
一、Gmail邮箱配置
1、进入Gmail(https://mail.google.com) 2、打开谷歌右上角设置
3、启用POP/IMP
4、启用两步验证(https://myaccount.google.com/security)
5、建立应用程式密码
6、复制保存应用程式密码
二、代码
1、引入依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-mail/artifactId/dependency2、application.properties文件配置
spring.mail.hostsmtp.gmail.com
# 邮件服务器端口号
spring.mail.port587
# 邮件发送方的电子邮件地址
spring.mail.username你的Gmail邮箱账号
# 邮件发送方的密码或应用程序专用密码如果启用了两步验证
spring.mail.password应用程序专用密码
# 启用TLS加密
spring.mail.properties.mail.smtp.starttls.enabletrue
# 验证邮件服务器的身份
spring.mail.properties.mail.smtp.authtrue
# 邮件传输协议
spring.mail.properties.mail.transport.protocolsmtp3、EmailUtil邮件工具类
Service
public class EmailUtil implements EmailService
{private final Logger logger LoggerFactory.getLogger(this.getClass());//Spring Boot 提供了一个发送邮件的简单抽象使用的是下面这个接口这里直接注入即可使用Autowiredprivate JavaMailSender mailSender;// 配置文件中我的谷歌邮箱Value(${spring.mail.username})private String from;/*** 简单文本邮件* param to 收件人* param subject 主题* param content 内容*/Overridepublic void sendSimpleMail(String to, String subject, String content) {//创建SimpleMailMessage对象SimpleMailMessage message new SimpleMailMessage();//邮件发送人message.setFrom(from);//邮件接收人message.setTo(to);//邮件主题message.setSubject(subject);//邮件内容message.setText(content);//发送邮件mailSender.send(message);}/*** html邮件* param to 收件人,多个时参数形式 xxxxxx.com,xxxxxx.com,xxxxxx.com* param subject 主题* param content 内容*/Overridepublic void sendHtmlMail(String to, String subject, String content) {//获取MimeMessage对象MimeMessage message mailSender.createMimeMessage();MimeMessageHelper messageHelper;try {messageHelper new MimeMessageHelper(message, true);//邮件发送人messageHelper.setFrom(from);//邮件接收人,设置多个收件人地址InternetAddress[] internetAddressTo InternetAddress.parse(to);messageHelper.setTo(internetAddressTo);//messageHelper.setTo(to);//邮件主题message.setSubject(subject);//邮件内容html格式messageHelper.setText(content, true);//发送mailSender.send(message);//日志信息logger.info(邮件已经发送。);} catch (Exception e) {logger.error(发送邮件时发生异常, e);}}/*** 带附件的邮件* param to 收件人* param subject 主题* param content 内容* param filePath 附件*/Overridepublic void sendAttachmentsMail(String to, String subject, String content, String filePath) {MimeMessage message mailSender.createMimeMessage();try {MimeMessageHelper helper new MimeMessageHelper(message, true);helper.setFrom(from);helper.setTo(to);helper.setSubject(subject);helper.setText(content, true);FileSystemResource file new FileSystemResource(new File(filePath));String fileName filePath.substring(filePath.lastIndexOf(File.separator));helper.addAttachment(fileName, file);mailSender.send(message);//日志信息logger.info(邮件已经发送。);} catch (Exception e) {logger.error(发送邮件时发生异常, e);}}/*** 验证邮箱格式* param email* return*/public boolean isEmail(String email) {if (email null || email.length() 1 || email.length() 256) {return false;}Pattern pattern Pattern.compile(^\\w([-.]\\w)*\\w([-.]\\w)*\\.\\w([-.]\\w)*$);return pattern.matcher(email).matches();}
}EmailService
public interface EmailService {/*** 发送文本邮件** param to 收件人* param subject 主题* param content 内容*/void sendSimpleMail(String to, String subject, String content);/*** 发送HTML邮件** param to 收件人* param subject 主题* param content 内容*/public void sendHtmlMail(String to, String subject, String content);/*** 发送带附件的邮件** param to 收件人* param subject 主题* param content 内容* param filePath 附件*/public void sendAttachmentsMail(String to, String subject, String content, String filePath);
}4、验证码存储/判断/删除 CodeUtil
Service
public class CodeUtil {Autowiredprivate StringRedisTemplate redisTemplate;public String generateVerificationCode() {// 生成6位随机数字验证码return String.valueOf((int) ((Math.random() * 9 1) * 100000));}// 验证验证码是否正确public boolean verifyCode(String userId, String code,String key) {key key userId;String storedCode redisTemplate.opsForValue().get(key);return code.equals(storedCode);}//删除redis中验证码public void deleteCode(String userId,String key) {key key userId;redisTemplate.delete(key);}
}存储验证码
//写在需要发送验证码的地方//存储时间private static final int EXPIRATION_TIME_IN_MINUTES 3;//键名private static final String KEY_PREFIX xxx;keyKEY_PREFIX123456
redisTemplate.opsForValue().set(key, 随机数字验证码, EXPIRATION_TIME_IN_MINUTES, TimeUnit.MINUTES);