看了很多人写的发送邮件验证码的博客,发现没有几个用HTML页面发送的,这里自己整理琢磨了一下,搞了一个比较简单的模板,大概复制代码可以实现
准备工作
前往自己的QQ邮箱开启图示服务,记得保存给的16位授权码
需要的环境
得在tomcat的环境下有自己的本地服务器
需要的jar包
首先必须要mail.jar包
尽量下最新的,要不然少一个SSL加密的包,没有得话容易被判断为垃圾邮件直接丢进去垃圾桶
官网网址https://java.net/projects/javamail/pages/Home
解压后如图,
将mail.jar放入tomcat目录下的lib文件夹。再你的编辑器里building path即可
接下来是代码的演示
bean包
package com.yc.job.bean;
public class emailmsg {
private String password;
private String email;
public emailmsg(String password, String email) {
this.password = password;
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "emailmsg [password=" + password + ", email=" + email + "]";
}
}
controller包
package com.yc.job.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.yc.job.bean.User;
import com.yc.job.bean.emailmsg;
import com.yc.job.util.Sendmail;
@WebServlet("/mail")
public class SendmailController extends HttpServlet {
private static final long serialVersionUID = 3029832102202050262L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String op = request.getParameter("op");
if ("sendmail".equals(op)) {
sendmail(request, response);
}
}
private void sendmail(HttpServletRequest request, HttpServletResponse response) {
String password = request.getParameter("password");
String email = request.getParameter("email");
//System.out.println(email);
//将数据封装
System.out.println(password);
emailmsg emailmsg=new emailmsg(password, email);
Sendmail sendMail = new Sendmail(emailmsg);
sendMail.start();
}
}
工具类util包
package com.yc.job.util;
import com.sun.mail.util.MailSSLSocketFactory;
import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.sun.mail.util.MailSSLSocketFactory;
import com.yc.job.bean.User;
import com.yc.job.bean.emailmsg;
import java.security.GeneralSecurityException;
import java.security.PublicKey;
import java.util.Properties;
public class Sendmail extends Thread {
//发件人信息
private String From = "534983992@qq.com";
//发件人邮箱
private String recipient = "534983992@qq.com";
//成功开启POP3/SMTP服务,在第三方客户端登录时,此处放上16位授权码:
private String password = "你的16位授权码";
//邮件发送的服务器
private String host = "smtp.qq.com";
//收件人信息
private emailmsg emailmsg;
public Sendmail(emailmsg Emailmsg){
this.emailmsg = Emailmsg;
}
@Override
public void run() {
try {
Properties properties = new Properties();
properties.setProperty("mail.host","smtp.qq.com");
properties.setProperty("mail.transport.protocol","smtp");
properties.setProperty("mail.smtp.auth","true");
//QQ存在一个特性设置SSL加密,
//注意如果不是最新的mail.jar包可能会没有这个MailSSLSocketFactory
MailSSLSocketFactory sf = null;
try {
sf = new MailSSLSocketFactory();
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.ssl.socketFactory", sf);
//创建一个session对象
Session session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(recipient,password);
}
});
//开启debug模式
session.setDebug(true);
//获取连接对象
Transport transport = null;
try {
transport = session.getTransport();
} catch (NoSuchProviderException e) {
e.printStackTrace();
}
//连接服务器
transport.connect(host,From,password);
//创建一个邮件发送对象
MimeMessage mimeMessage = new MimeMessage(session);
//邮件发送人
mimeMessage.setFrom(new InternetAddress(recipient));
//邮件接收人
mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(emailmsg.getEmail()));
//邮件标题
mimeMessage.setSubject("网站注册成功");
//邮件内容
mimeMessage.setContent("网站注册成功,密码为"+emailmsg.getPassword()+",请妥善保管密码","text/html;charset=UTF-8");
//发送邮件
transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
transport.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
Html页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<form action="" method="post" onsubmit="return sendinfo()">
<p>邮箱:<input type="email" id="email" name="email" required></p>
<p><input type="submit" value="发送验证码" ></p>
</form>
<script type="text/javascript" src="../js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
function sendinfo() {
var password = $.trim(randomString(6));
var email = $.trim($("#email").val());
console.log(password);
if (email == "") {
alert("您输入的邮箱不完整..");
return false;
}
console.log(password);
$.post("mail",{op:"sendmail", password:password, email:email}, data => {
alert("数据发送成功");
},"text");
return false;
}
//产生需要长度的随机数
function randomString(length) {
var str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
var result = '';
for (var i = length; i > 0; --i)
result += str[Math.floor(Math.random() * str.length)];
return result;
}
</script>
</body>
</html>
效果图,此处填写你想要发送的邮箱号,我这里自己发给自己了
写在最后
新人上路,代码基本原创,感谢一起和我研究的同学,分享一下自己的创作经验,第一次写博客,如果有违规请告诉我,我立马改正。