在SpringBoot使用第三方的功能,无外乎这几个步骤
下面是一个用户修改密码,发送邮箱验证码的案例,话不多说,直接上代码!:
1.引入对应依赖
<!-- QQ邮件依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--工具类-->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
2.编写配置文件
spring:
mail:
host: smtp.qq.com
username: xxx@qq.com
password: oawuqsheuaxbbaec #qq邮箱开启发送邮件授权,然后会给你一个密码
port: 587
default-encoding: utf-8
properties:
mail:
smtp:
ssl:
enable: false
required: false
debug: true
3.注入类,使用对应方法
package com.kgc.service.impl;
import com.kgc.service.EmailService;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import java.util.Date;
import java.util.concurrent.TimeUnit;
@Service
public class EmailServiceImpl implements EmailService {
private static final Logger logger = LoggerFactory.getLogger(EmailService.class);
/**
* 注入邮件工具类
*/
@Resource
private JavaMailSenderImpl javaMailSender;
@Value("${spring.mail.username}")
private String sendMailer;
@Resource
private RedisTemplate redisTemplate;
/**
* 检测邮件信息类
* @param to 接收信息的目标邮箱
* @param subject 邮箱主题
* @param text 邮件内容
*/
private void checkMail(String to,String subject,String text){
if(StringUtils.isEmpty(to)){
throw new RuntimeException("邮件收信人不能为空");
}
if(StringUtils.isEmpty(subject)){
throw new RuntimeException("邮件主题不能为空");
}
if(StringUtils.isEmpty(text)){
throw new RuntimeException("邮件内容不能为空");
}
}
/**
* 发送html邮件
* @param to 接收信息的目标邮箱
* @param subject 标题
* @param content 内容
* @param uid 登陆用户的id
*/
public void sendHtmlMailMessage(String to,String subject,String content,String uid){
logger.info("EmailServiceImpl sendHtmlMailMessage params:"+to+",subject:"+subject+",content:"+content+",uid:"+uid);
//生成的随机6位输验证码
int randomStr = ((int) ((Math.random() * 9 + 1) * 100000));
content="<!DOCTYPE html>\n" +
"<html>\n" +
"<head>\n" +
" <base target=\"_blank\" />\n" +
" <style type=\"text/css\">::-webkit-scrollbar{ display: none; }</style>\n" +
" <style id=\"cloudAttachStyle\" type=\"text/css\">#divNeteaseBigAttach, #divNeteaseBigAttach_bak{display:none;}</style>\n" +
" <style id=\"blockquoteStyle\" type=\"text/css\">blockquote{display:none;}</style>\n" +
" <style type=\"text/css\">\n" +
" body{font-size:14px;font-family:arial,verdana,sans-serif;line-height:1.666;padding:0;margin:0;overflow:auto;white-space:normal;word-wrap:break-word;min-height:100px}\n" +
" td, input, button, select, body{font-family:Helvetica, 'Microsoft Yahei', verdana}\n" +
" pre {white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;width:95%}\n" +
" th,td{font-family:arial,verdana,sans-serif;line-height:1.666}\n" +
" img{ border:0}\n" +
" header,footer,section,aside,article,nav,hgroup,figure,figcaption{display:block}\n" +
" blockquote{margin-right:0px}\n" +
" </style>\n" +
"</head>\n" +
"<body tabindex=\"0\" role=\"listitem\">\n" +
"<table width=\"700\" border=\"0\" align=\"center\" cellspacing=\"0\" style=\"width:700px;\">\n" +
" <tbody>\n" +
" <tr>\n" +
" <td>\n" +
" <div style=\"width:700px;margin:0 auto;border-bottom:1px solid #ccc;margin-bottom:30px;\">\n" +
" <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"700\" height=\"39\" style=\"font:12px Tahoma, Arial, 宋体;\">\n" +
" <tbody><tr><td width=\"210\"></td></tr></tbody>\n" +
" </table>\n" +
" </div>\n" +
" <div style=\"width:680px;padding:0 10px;margin:0 auto;\">\n" +
" <div style=\"line-height:1.5;font-size:14px;margin-bottom:25px;color:#4d4d4d;\">\n" +
" <strong style=\"display:block;margin-bottom:15px;\">尊敬的用户:<span style=\"color:#f60;font-size: 16px;\"></span>您好!</strong>\n" +
" <strong style=\"display:block;margin-bottom:15px;\">\n" +
" 您正在进行易买网的<span style=\"color: red\">修改密码</span>操作,请在验证码输入框中输入:<span style=\"color:#f60;font-size: 24px\">"+randomStr+"</span>,以完成操作。\n" +
" </strong>\n" +
" </div>\n" +
" <div style=\"margin-bottom:30px;\">\n" +
" <small style=\"display:block;margin-bottom:20px;font-size:12px;\">\n" +
" <p style=\"color:#747474;\">\n" +
" 注意:此验证码有效期为300秒,请及时完成操作\n" +
" <br>注意:此操作可能会修改您的密码、登录邮箱或绑定手机。如非本人操作,请及时登录并修改密码以保证帐户安全\n" +
" <br>(工作人员不会向你索取此验证码,请勿泄漏!)\n" +
" </p>\n" +
" </small>\n" +
" </div>\n" +
" </div>\n" +
" <div style=\"width:700px;margin:0 auto;\">\n" +
" <div style=\"padding:10px 10px 0;border-top:1px solid #ccc;color:#747474;margin-bottom:20px;line-height:1.3em;font-size:12px;\">\n" +
" <p>此为系统邮件,请勿回复<br>\n" +
" 请保管好您的邮箱,避免账号被他人盗用\n" +
" </div>\n" +
" </div>\n" +
" </td>\n" +
" </tr>\n" +
" </tbody>\n" +
"</table>\n" +
"</body>\n"+
"</html>";
System.err.println("验证码为:"+randomStr);
try {
//true 代表支持复杂的类型
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(javaMailSender.createMimeMessage(),true);
//邮件发信人
mimeMessageHelper.setFrom(sendMailer);
//邮件收信人 1或多个
mimeMessageHelper.setTo(to.split(","));
//邮件主题
mimeMessageHelper.setSubject(subject);
//邮件内容 true 代表支持html
mimeMessageHelper.setText(content,true);
//邮件发送时间
mimeMessageHelper.setSentDate(new Date());
//发送邮件
javaMailSender.send(mimeMessageHelper.getMimeMessage());
//将用户的id和验证码作为key:value存进去,如果用户重复发送,则会覆盖之前的,最新的验证码才能生效
redisTemplate.opsForValue().set(uid,String.valueOf(randomStr),5, TimeUnit.MINUTES);
System.out.println("存进去的验证码:"+redisTemplate.opsForValue().get(uid));
logger.debug("发送邮件成功:"+sendMailer+"->"+to);
} catch (MessagingException e) {
e.printStackTrace();
logger.error("发送邮件失败:"+e.getMessage());
}
}
}
如果对大家有帮助,希望点个赞支持一下,非常感谢!