java给邮箱发送验证码

邮箱发送信息需要用到邮箱授权码 

获取qq邮箱授权码方式:

邮箱——>设置——>账户——>往下拖到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务——>获取授权码

  

引入依赖

        org.apache.commonscommons-email1.5

工具类:(测试过两种方式都可以,随意哪种)

package com.kgc.ymw.util;import java.security.GeneralSecurityException;
import java.util.Properties;
import java.util.Random;import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;import com.sun.mail.util.MailSSLSocketFactory;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.junit.jupiter.api.Test;/*** @author: BruceYoung* @date: 2023/5/11*/
@SuppressWarnings({"all"})
public class EmailTest {private static String yzm;@Testpublic void send1() {String email = "xxxxxx@qq.com";//接收人邮箱//HtmlEmail方式sendEmail(email);}@Testpublic void send2() {
//        yzm = random1();try {//javax.mail方式(发送方的邮箱,qq邮箱中申请的16位授权码,接收人邮箱,邮件标题,邮件内容)sendMail("xxxx@qq.com", "授权码", "xxxxxx@qq.com", "名称", "

邀请您注册验证码:" + yzm + "

");} catch (MessagingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (GeneralSecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 方式1:发送QQ邮件*/public static String sendEmail(String email) {HtmlEmail send = new HtmlEmail();//创建一个HtmlEmail实例对象// 获取随机验证码yzm = random1();String resultCode = yzm;try {send.setHostName("smtp.qq.com");send.setAuthentication("xxxxx@qq.com", "邮箱授权码"); //第一个参数是发送者的QQEamil邮箱 第二个参数是刚刚获取的授权码send.setFrom("xxxxxx@qq.com", "名称");//发送人的邮箱为自己的,用户名可以随便填 记得是自己的邮箱不是qq // send.setSmtpPort(465); //端口号 可以不开send.setSSLOnConnect(true); //开启SSL加密send.setCharset("utf-8");send.addTo(email); //设置收件人 email为你要发送给谁的邮箱账户send.setSubject("标题"); //邮箱标题send.setMsg("您的验证码为: " + resultCode + " ,五分钟后失效"); //Eamil发送的内容send.send(); //发送} catch (EmailException e) {e.printStackTrace();}return yzm;}/*** 方式2:发送QQ邮件** @param sender 发送方的邮箱* @param auth qq邮箱中申请的16位授权码* @param to 接收人邮箱* @param title 邮件标题* @param content 邮件内容*/public static String sendMail(String sender, String auth, String to, String title, String content) throws MessagingException, GeneralSecurityException, javax.mail.MessagingException {yzm = random1();//创建一个配置文件并保存Properties properties = new Properties();properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");properties.setProperty("mail.smtp.socketFactory.fallback", "false");properties.setProperty("mail.smtp.port", "465");properties.setProperty("mail.smtp.socketFactory.port", "465");properties.setProperty("mail.host", "smtp.qq.com");properties.setProperty("mail.transport.protocol", "smtp");properties.setProperty("mail.smtp.auth", "true");//QQ存在一个特性设置SSL加密MailSSLSocketFactory sf = new MailSSLSocketFactory();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() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(sender, auth);}});//开启debug模式session.setDebug(true);//获取连接对象Transport transport = session.getTransport();//连接服务器transport.connect("smtp.qq.com", sender, auth);//创建邮件对象MimeMessage mimeMessage = new MimeMessage(session);//邮件发送人mimeMessage.setFrom(new InternetAddress(sender));//邮件接收人mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//邮件标题mimeMessage.setSubject(title);//邮件内容mimeMessage.setContent(content, "text/html;charset=UTF-8");//发送邮件transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());//关闭连接transport.close();return yzm;}//生成6位数 验证码public static String random1() {String code = "";Random rd = new Random();for (int i = 0; i < 6; i++) {int r = rd.nextInt(10); //每次随机出一个数字(0-9)code = code + r; //把每次随机出的数字拼在一起}System.out.println(code);return code;}}

前端页面参考:

//输入邮箱
* 邮箱  

{{ email_error }}

//输入验证码 * 验证码  

如果要实现验证码在几分钟内失效的功能,则需要在后端把验证码存入redis中并设置一个有效期,取验证码就从redis里面取,点击提交时如果从redis中取得验证码为null则表示验证码失效。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部