java动态发送邮箱验证

2024-06-10 23:32
文章标签 java 动态 验证 邮箱 发送

本文主要是介绍java动态发送邮箱验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近这两天看了一下java邮箱验证的相关资料,发送邮箱的关键词是javaMail,因为现在这个邮箱验证很常见,在写javaWeb时基本上都会用到邮箱验证,以确保登录者的身份。

因为要用到所以学习了一下,并做了一个简单的例子。

这个邮箱验证的设计思路是:需要建立两个表,一个是存储验证码的表、另一个是存储用户名、密码、邮箱号的表。验证码可以自动生成,调用javaMail中的发短信的方法,

实现短信的发送同时将生成的验证码传输到邮箱中,用户点击邮箱进行验证,如果验证信息正确,便可以完成注册。反之,注册失败。

下面是是实现的源码(这里只写核心代码):

Mailer.java 代码(嘿嘿,这个在网上找的源码,自己稍微改变了一下。)

package edu.hpu.sendemail.util;


import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class Mailer {
/** javamail session对象. */
protected Session session;
/** 发信地址 */
protected String from;
/** 信的标题*/
protected String subject;
/** 存放字符串形式的收信地址 */
protected ArrayList toList = new ArrayList();
/** 抄送地址*/
protected ArrayList ccList = new ArrayList();
/** 暗送地址 */
protected ArrayList bccList = new ArrayList();
/** 信的文本内容*/
protected String body;
/** SMTP服务器地址*/
protected String mailHost;
/**是否在控制台打印信息*/
protected boolean verbose=true;
/** Get from */
public String getFrom() {
return from;
}
public void setFrom(String fm) {
from = fm;
}
public String getSubject() {
return subject;
}
public void setSubject(String subj) {
subject = subj;
}
public ArrayList getToList() {
return toList;
}
public void setToList(ArrayList to) {
toList = to;
}
public void setToList(String s) {
toList = tokenize(s);
}
public void addTo(String to) {
toList.add(to);
}
public ArrayList getCcList() {
return ccList;
}
public void setCcList(ArrayList cc) {
ccList = cc;
}
public void setCcList(String s) {
ccList = tokenize(s);
}
public void addCc(String cc) {
ccList.add(cc);
}
public ArrayList getBccList() {
return bccList;
}
public void setBccList(ArrayList bcc) {
bccList = bcc;
}
public void setBccList(String s) {
bccList = tokenize(s);
}
public void addBcc(String bcc) {
bccList.add(bcc);
}
public String getBody() {
return body;
}
public void setBody(String text) {
body = text;
}
public boolean isVerbose() {
return verbose;
}
public void setVerbose(boolean v) {
verbose = v;
}


public boolean isComplete() { //
if (from == null || from.length()==0) {
System.err.println("doSend: no FROM");
return false;
}
if (subject == null || subject.length()==0) {
System.err.println("doSend: no SUBJECT");
return false;
}
if (toList.size()==0) {
System.err.println("doSend: no recipients");
return false;
}
if (body == null || body.length()==0) {
System.err.println("doSend: no body");
return false;
}
if (mailHost == null || mailHost.length()==0) {
System.err.println("doSend: no server host");
return false;
}
return true;
}
public void setServer(String s) {
mailHost = s;
}
/** Send the message.
*/
public synchronized void doSend() throws MessagingException {
if (!isComplete())
throw new IllegalArgumentException("doSend called before message was complete");
Properties props = new Properties();
props.put("mail.smtp.host", mailHost);
props.put("mail.smtp.auth", "true");//指定是否需要SMTP验证
// Create the Session object
if (session == null) {
session = Session.getDefaultInstance(props, null);
if (verbose)
session.setDebug(true); // Verbose!
}
// create a message
final Message mesg = new MimeMessage(session);
InternetAddress[] addresses;
// TO Address list
addresses = new InternetAddress[toList.size()];
for (int i=0; i<addresses.length; i++)
addresses[i] = new InternetAddress((String)toList.get(i));
mesg.setRecipients(Message.RecipientType.TO, addresses);
// From Address
mesg.setFrom(new InternetAddress(from));
// CC Address list
addresses = new InternetAddress[ccList.size()];
for (int i=0; i<addresses.length; i++)
addresses[i] = new InternetAddress((String)ccList.get(i));
mesg.setRecipients(Message.RecipientType.CC, addresses);
// BCC Address list
addresses = new InternetAddress[bccList.size()];
for (int i=0; i<addresses.length; i++)
addresses[i] = new InternetAddress((String)bccList.get(i));
mesg.setRecipients(Message.RecipientType.BCC, addresses);
// The Subject
mesg.setSubject(subject);     //此处是标题,可以提取数据库填入的内容。
// Now the message body.
mesg.setText(body);
Transport transport =session.getTransport("smtp");
transport.connect(mailHost, "15239751075", "li1314li");
transport.sendMessage(mesg, mesg.getAllRecipients());
}
protected ArrayList tokenize(String s) {
ArrayList al = new ArrayList();
StringTokenizer tf = new StringTokenizer(s, ",");
// For each word found in the line
while (tf.hasMoreTokens()) {
// trim blanks, and add to list.
al.add(tf.nextToken().trim());
}
return al;
}
public void sendMail(String UUID,String Md5,String stu_email){
Mailer mailer = new Mailer();
mailer.setServer("smtp.163.com");
mailer.setFrom("15239751075@163.com");
mailer.addTo(stu_email);
mailer.setSubject("i优停车官网");
String m = "点击激活";
mailer.setBody("点击激活验证"+ //设置路径
"http://localhost:8080/SendEmail/mailVerifySer?uuid="+UUID+"&md5="+Md5+"");

try{
mailer.doSend();
}catch (MessagingException e) {}
}
}
 AddStuSer.java 代码(这个是用户注册提交的servlet代码。)

package edu.hpu.sendemail.Servlet;


import java.io.IOException;
import java.io.PrintWriter;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import edu.hpu.sendemail.dao.InSendEmail;
import edu.hpu.sendemail.dao.SendEmailImpl;
import edu.hpu.sendemail.model.Student;
import edu.hpu.sendemail.model.Verify;
import edu.hpu.sendemail.util.Mailer;
import edu.hpu.sendemail.util.TimeStamp;


public class AddStuSer extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
 
String stu_name = request.getParameter("stu_name");
String stu_password = request.getParameter("stu_password");
String stu_email = request.getParameter("stu_email");
 
Mailer sendemail = new Mailer();
TimeStamp ts = new TimeStamp();
String uuid = ts.UUID();
String md5 = ts.MD5(stu_name);    //生成验证码。
sendemail.sendMail(uuid,md5,stu_email);   //调用发送email方法
 
Student student = new Student();
student.setStu_email(stu_email);
student.setStu_name(stu_name);
student.setStu_password(stu_password);
 
 Verify verify = new Verify();
 verify.setRandMd5(md5);
 verify.setStu_nameMd5(uuid);
 verify.setStu_name(stu_name);
 
 InSendEmail is = new SendEmailImpl();
 boolean flag = is.addVerify(verify);
 if(flag){
 request.getSession().setAttribute("student", student);   //用session将数据发送到另一个servlet
 response.sendRedirect("index.jsp");   //暂时先跳转到这
 }
}
}
MailVerifSery.java 代码(这里是用户点击邮箱验证的servlet,如果验证成功,将信息注册到数据库中。并显示账号已成功激活)

package edu.hpu.sendemail.Servlet;


import java.io.IOException;
import java.io.PrintWriter;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


import edu.hpu.sendemail.dao.InSendEmail;
import edu.hpu.sendemail.dao.SendEmailImpl;
import edu.hpu.sendemail.model.Student;
import edu.hpu.sendemail.util.*;


public class mailVerifySer extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}


public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
 
HttpSession session = request.getSession();
String UUID = request.getParameter("uuid");
String Md5 = request.getParameter("md5");
Student student = (Student) session.getAttribute("student");
PrintWriter out = response.getWriter();
InSendEmail is = new SendEmailImpl();
boolean flag = is.getVerify(UUID,Md5);
if(flag){   //说明邮箱验证正确。
InSendEmail  ise = new SendEmailImpl();
boolean falgV = ise.delVerify(student.getStu_name());
System.out.println("falgV"+falgV);
boolean flagS = ise.addStudent(student);  //向表中添加信息
if(flagS){
out.print("账号已激活");
}
}
}
}

SendEmailImpl.java 代码(在这个验证过程中要实现的方法)

package edu.hpu.sendemail.dao;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


import edu.hpu.sendemail.model.Student;
import edu.hpu.sendemail.model.Verify;
import edu.hpu.sendemail.util.DBC;


public class SendEmailImpl implements InSendEmail {


public boolean addStudent(Student student) {
boolean flag = false;
Connection conn = null;
PreparedStatement pst = null;
conn = DBC.getConnection();
String sql = "insert into student (stu_name,stu_password,stu_email)values(?,?,?)";
try {
pst = conn.prepareStatement(sql);
pst.setString(3, student.getStu_email());
pst.setString(2, student.getStu_password());
pst.setString(1, student.getStu_name());
if(pst.executeUpdate()>0){
flag = true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}




public boolean addVerify(Verify verify) {
boolean flag = false;
Connection conn = null;
PreparedStatement pst = null;
conn = DBC.getConnection();
String sql = "insert into verify (stu_name,stu_nameMd5,randMd5)values(?,?,?)";
try {
pst = conn.prepareStatement(sql);
pst.setString(3, verify.getRandMd5());
pst.setString(2, verify.getStu_nameMd5());
pst.setString(1, verify.getStu_name());
if(pst.executeUpdate()>0){
flag = true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}


public boolean delVerify(String stuName) {
boolean flag =false; 
Connection conn = null;
PreparedStatement pst = null;
conn = DBC.getConnection();
String sql = "delete from verify where stu_nameMd5 = '"+stuName+"'";
try {
pst = conn.prepareStatement(sql);
if(pst.executeUpdate()>0){
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
}

return flag;
}


public boolean getVerify(String stuNameMd5, String randMd5) {
boolean flag =false; 
Connection conn = null;
Statement st = null;
ResultSet rs = null;
conn = DBC.getConnection();
String sql = "select stu_name from verify where stu_nameMd5 = '"+stuNameMd5+"' and randMd5='"+randMd5+"'";
try {
st = conn.createStatement();
rs = st.executeQuery(sql);
if(rs.next()){
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
}

return flag;
}
}

}

代码就粘到这吧,一下就是javaBean和一个jsp界面了。这个是自己跟着平时注册账号的感觉写的,然后又在网上找的一些资料。不知道正规的这个邮箱验证是什么设计思路。

如果感觉有不对的地方,希望大家提出来,批评指教才能进步。

这篇关于java动态发送邮箱验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1049574

相关文章

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、