手把手写个web端QQ邮箱发送验证码的模块

一个基于VUE的web端QQ邮箱发送验证码的模板

看了很多人写的发送邮件验证码的博客,发现没有几个用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>

效果图,此处填写你想要发送的邮箱号,我这里自己发给自己了
在这里插入图片描述

写在最后

新人上路,代码基本原创,感谢一起和我研究的同学,分享一下自己的创作经验,第一次写博客,如果有违规请告诉我,我立马改正。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值