先创建一个html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div style="background: aqua" >
邮箱:<input type="text" name="email" id="email" class="email"> <button id="but" onclick="fromEmail()">发送邮件</button><br>
</div>
验证码:<input type="text" id="code">
</body>
<script src="/static/js/jquery-3.6.0.js"></script>
<script type="text/javascript">
var btn = document.querySelector('button');
var time = 60; // 定义剩下的秒数
function fromEmail(){
var email = $("#email").val()
isEmail(email)
}
function isEmail(email){
var index = email.indexOf("@");
if(index==-1){
alert("邮箱格式错误!");
}else{
var endStr = email.substring(index);
if(endStr!="@qq.com"){
alert("请使用qq邮箱!");
}else{
//判断用户名是否符合数字字母下划线组合
var username = email.substring(0,index);
var isRight = "发送成功!";//假设都符合
for(var i=0;i<username.length;i++){
if(!isABC(username[i])){
alert("字符错误!");
break;
}
}
btn.addEventListener('click', function() {
btn.disabled = true;
var timer = setInterval(function() {
if (time == 0) {
// 清除定时器和复原按钮
clearInterval(timer);
btn.disabled = false;
btn.innerHTML = '发送邮件';
time = 60; //这个需要重新开始
} else {
btn.innerHTML = time + '秒可以重新发送';
time--;
}
}, 1000);
})
$.ajax({
url: "/code.action",
data: {"email" : email},
type: "post",
success: function () {
alert(isRight);
}
})
}
}
};
function isABC(charrStr){
//判断用户名是否符合数字字母下划线组合
if(charrStr>="a" && charrStr<="z" || charrStr>="A" && charrStr<="Z" || charrStr>=0 && charrStr <=9 || charrStr=="_"){
return true;
}else{
return false;
}
}
</script>
</html>
创建一个邮箱发送的类
package email1;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
/**
* kyf
* 2022/7/20 12:04
*/
public class EmailDemo {
public void fromEmail(String code,String email){
//先登入QQ邮箱服务器
//创建会话前设置参数
Properties properties = new Properties();
//设置key-vaule
properties.setProperty("mail.host","smtp.qq.com");
properties.setProperty("mail.smtp.auth", "true");
//发送邮件采用的协议
properties.setProperty("mail.transport.protocol","smtp");
//会话
Session session = Session.getDefaultInstance(properties);
Transport ts =null;
try {
// 获取传输对象 发送邮件
ts = session.getTransport();
// 发送邮件前,校验账号密码(授权码)
ts.connect("发送人邮箱","pop3协议授权码");
//构建一封邮件
MimeMessage message = new MimeMessage(session);
//发件人
message.setFrom(new InternetAddress("发件人邮箱"));
//收件人
// Message.RecipientType.TO 收件人
// Message.RecipientType.CC 抄送
// Message.RecipientType.BCC 暗送
message.setRecipient(Message.RecipientType.TO, new InternetAddress(email));
// message.setRecipient(Message.RecipientType.CC, new InternetAddress("2175902747@qq.com"));
//主题
message.setSubject("账号注册验证码");
//正文
message.setContent("您好,来自三峰博客您的六位验证码是:"+code+",请不要告诉别人30分钟有效!","text/html;charset=utf-8");
//保存邮件
message.saveChanges();
//发送邮件
ts.sendMessage(message, message.getAllRecipients());
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
ts.connect();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
}
创建一个controller,让前端可以调用邮件发送类
@RequestMapping("/code")
@ResponseBody
public String code(HttpSession session,String email){
int i = (int) (r.nextDouble()*1000000);
String code = i>100000? i+"" :i+100000 +"";
session.setAttribute("code",code);
EmailDemo emailDemo = new EmailDemo();
System.out.println(email+"==="+code);
// emailDemo.fromEmail(code,email);
return "发送成功!";
}