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

相关文章

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

22.手绘Spring DI运行时序图

1.依赖注入发生的时间 当Spring loC容器完成了 Bean定义资源的定位、载入和解析注册以后,loC容器中已经管理类Bean 定义的相关数据,但是此时loC容器还没有对所管理的Bean进行依赖注入,依赖注入在以下两种情况 发生: 、用户第一次调用getBean()方法时,loC容器触发依赖注入。 、当用户在配置文件中将<bean>元素配置了 lazy-init二false属性,即让