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

相关文章

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过