packagecom.*******.util.email;importorg.apache.commons.mail.EmailException;importorg.apache.commons.mail.HtmlEmail;importjava.util.HashMap;importjava.util.Map;importjava.util.Random;/*** 功能描述:
* 〈邮箱发送验证码〉
* 业务要求:可以修改发件邮箱,所以此处给出的参数存在数据库内的
*@return:
*@since: 1.0.0
* @Author:
* @Date:*/
public classEmailUtil {//为了保证参数没有存入数据库的也可以使用,此处并未删除参数变量//标题
private static String TITLE="邮箱验证";//验证码
private static String CONTENT="验证码";//发送邮箱的SMTP服务器//邮箱的SMTP服务器,一般123邮箱的是smtp.123.com,qq邮箱为smtp.qq.com//设置邮箱的SMTP服务器,登录相对应的邮箱官网,去拿就行了
private static String HOSTNAME="smtp.163.com";//发送信息的字符类型
private static String CHARSET="utf-8";//发送邮箱
private static String SENDEMAIL="*******@163.com";//发送人用户名
private static String USERNAME="***集团";//授权用户名和授权码,申请开通
private static String AUTHENTICATION_NAME="******@163.com";private static String USERNAME_PWD="*****";//集合——保存验证码的集合
private static Map emailMap=new ConcurrentHashMap<>();//过期时间
private static final long expiredTime=1000*10*60;/***发送验证码
*@paramreceiveEmail
*@paramdto
*@return()
*@throws*@authoryutf
*@date 2020/5/23
**/
public static void sendEmail(String receiveEmail, EmailSettingDO dto) throwsEmailException {//创建一个HtmlEmail实例对象
HtmlEmail email=newHtmlEmail();//邮箱的SMTP服务器,一般123邮箱的是smtp.123.com,qq邮箱为smtp.qq.com//设置邮箱的SMTP服务器,登录相对应的邮箱官网,去拿就行了//email.setHostName(HOSTNAME);
email.setHostName(dto.getHostName());//设置发送的字符类型
email.setCharset(CHARSET);//设置收件人
email.addTo(receiveEmail);//发送人的邮箱为自己的,用户名可以随便填//email.setFrom(SENDEMAIL,USERNAME);
email.setFrom(dto.getSendMail(),dto.getUserName());//设置发送人的邮箱和用户名和授权码(授权码是自己设置的)//email.setAuthentication(AUTHENTICATION_NAME,USERNAME_PWD);
email.setAuthentication(dto.getAuthenticationName(),dto.getUserNamePwd());//设置发送主题//email.setSubject(TITLE);
email.setSubject(dto.getTitle());//生成验证码
String code = String.valueOf(new Random().nextInt(899999) + 100000);//设置发送内容//email.setMsg(CONTENT+code);
email.setMsg(dto.getContent()+":"+code);//进行发送
email.send();//保存验证码
SendEmailDO sendEmailDO=newSendEmailDO();
sendEmailDO.setCode(code);
sendEmailDO.setSendTime(System.currentTimeMillis());
emailMap.put(receiveEmail,sendEmailDO);
}/*** 功能描述:
* 〈验证验证码〉
*@return:
*@since: 1.0.0
* @Author:
* @Date:*/
public static booleanverifyCode(String email,String code ){//清理集合中过期的验证码
cleanEmailMap();//如果集合中存在符合条件的验证码则返回true,否则false
if(emailMap.containsKey(email)){if(emailMap.get(email).getCode().equals(code)){return true;
}
}return false;
}/***清理验证码集合
*@param*@return()
*@throws*@authoryutf
*@date 2020/5/23
**/
public static voidcleanEmailMap() {//如果集合不为空
if(!emailMap.isEmpty()){//循环集合;当前时间-验证码创建时间大于过期时间则清理验证码
for (Map.EntrystringSendEmailDOEntry : emailMap.entrySet()) {if((System.currentTimeMillis()-stringSendEmailDOEntry.getValue().getSendTime())>expiredTime){
emailMap.remove(stringSendEmailDOEntry.getKey());
}
}
}
}public static void main(String[] args) throwsEmailException {
String verifyCode=String
.valueOf(new Random().nextInt(899999) + 100000);//生成短信验证码
System.out.println(verifyCode);//sendEmail("*******@qq.com","23443");
}
}