Spring技术_邮箱注册_激活_获取验证码

项目结构

Spring技术_邮箱注册_激活_获取验证码

项目中用到的sql:

 create database hrSystem;
use hrSystem; CREATE TABLE `emailverificationcode` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`activie` int(11) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gb2312;

登录界面:

Spring技术_邮箱注册_激活_获取验证码

注册信息:

Spring技术_邮箱注册_激活_获取验证码

注册成功:

Spring技术_邮箱注册_激活_获取验证码

邮箱激活:

Spring技术_邮箱注册_激活_获取验证码

成功激活:

Spring技术_邮箱注册_激活_获取验证码

进行登录:

Spring技术_邮箱注册_激活_获取验证码

获取验证码:

Spring技术_邮箱注册_激活_获取验证码

输入验证码:

Spring技术_邮箱注册_激活_获取验证码

登录成功:

Spring技术_邮箱注册_激活_获取验证码

当然,在你输入验证码错误的时候,系统会让你重新登录。

==============================================

/EmailforVerificationCode/src/com/b510/action/ActiveEmailAction.java

 package com.b510.action;

  import com.b510.domain.Emailverificationcode;
import com.b510.service.EmailVerificationCodeService;
import com.opensymphony.xwork2.ActionSupport; /**
* 激活邮箱
*
* @author Hongten
*
*/
public class ActiveEmailAction extends ActionSupport { /**
* identification number
*/
private static final long serialVersionUID = -4621519681196499222L;
/**
* id号
*/
private int id;
/**
* 登录的时候填写的email
*/
private String email;
/**
* 登录的时候填写的password
*/
private String password; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public int getActive() {
return active;
} public void setActive(int active) {
this.active = active;
} public EmailVerificationCodeService getEmailVerificationCodeService() {
return emailVerificationCodeService;
} public void setEmailVerificationCodeService(
EmailVerificationCodeService emailVerificationCodeService) {
this.emailVerificationCodeService = emailVerificationCodeService;
} /**
* 是否激活
*/
private int active;
/**
* 通过spring的IoC方式注入EmailVerificationCodeService一个实例
*/
private EmailVerificationCodeService emailVerificationCodeService; // 激活邮箱
private String activeEmail() {
Emailverificationcode emailverificationcode = new Emailverificationcode();
emailverificationcode.setId(getId());
emailverificationcode.setEmail(getEmail());
emailverificationcode.setPassword(getPassword());
emailverificationcode.setActive(getActive());
getEmailVerificationCodeService().updateActive(emailverificationcode);
return "active";
} @Override
public String execute() throws Exception {
return activeEmail();
} }

/EmailforVerificationCode/src/com/b510/action/EmailVerificationCodeAction.java

package com.b510.action;

 import com.b510.domain.Emailverificationcode;
import com.b510.service.EmailVerificationCodeService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; /**
*
* @author Hongten
*
*/
public class EmailVerificationCodeAction extends ActionSupport { /**
* identification number
*/
private static final long serialVersionUID = 1514692413102258755L; /**
* 登录的时候填写的email
*/
private String email;
/**
* 登录的时候填写的password
*/
private String password;
/**
* id号
*/
private int id;
/**
* 是否激活
*/
private int active; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public int getActive() {
return active;
} public void setActive(int active) {
this.active = active;
} /**
* 登录的时候填写的验证码
*/
private String verificationCode;
/**
* 通过spring的IoC方式注入EmailVerificationCodeService一个实例
*/
private EmailVerificationCodeService emailVerificationCodeService; @Override
public String execute() throws Exception {
// 如果email,password都不为null的时候,执行登录操作
if (getEmail() != null && getPassword() != null) {
Emailverificationcode emailVerificationCode = new Emailverificationcode();
emailVerificationCode = getEmailVerificationCodeService()
.getByEmailAndPassword(getEmail(), getPassword());
if (emailVerificationCode.getActive() == 0) {
return "error";
} else {
String verificationCode = getEmailVerificationCodeService()
.getRandomChar()
+ getEmailVerificationCodeService().getRandomChar()
+ getEmailVerificationCodeService().getRandomChar()
+ getEmailVerificationCodeService().getRandomChar();
String content = "验证码是:" + verificationCode;
// 创建ActionContext实例
ActionContext ctx = ActionContext.getContext();
// 获取HttpSession中的verificationCode属性
ctx.getSession().put("verificationCode", verificationCode);
getEmailVerificationCodeService()
.sendEmail(
getEmail(),
EmailVerificationCodeService.SUBJECT_MAIL_GETVERIFICATIONCODE,
content);
return "input";
}
}
return "error";
} public String getEmail() {
return email;
} public EmailVerificationCodeService getEmailVerificationCodeService() {
return emailVerificationCodeService;
} public String getPassword() {
return password;
} public String getVerificationCode() {
return verificationCode;
} // 处理验证码
public String inputVerificationCode() throws Exception {
// 创建ActionContext实例
ActionContext ctx = ActionContext.getContext();
// 获取HttpSession中的verificationCode属性
String ver = (String) ctx.getSession().get("verificationCode"); // 如果verificationCode不为null的时候,执行登录操作
if (getVerificationCode() != null
&& getVerificationCode().equalsIgnoreCase(ver)) {
return SUCCESS;
} else {
return "errorVerCode";
}
} public void setEmail(String email) {
this.email = email;
} public void setEmailVerificationCodeService(
EmailVerificationCodeService emailVerificationCodeService) {
this.emailVerificationCodeService = emailVerificationCodeService;
} public void setPassword(String password) {
this.password = password;
} public void setVerificationCode(String verificationCode) {
this.verificationCode = verificationCode;
} public String login() throws Exception {
return "login";
} }

/EmailforVerificationCode/src/com/b510/action/RegisterAction.java

 package com.b510.action;

  import com.b510.domain.Emailverificationcode;
import com.b510.service.EmailVerificationCodeService;
import com.opensymphony.xwork2.ActionSupport; /**
* 注册Action
*
* @author Hongten
*
*/
public class RegisterAction extends ActionSupport { /**
* identification number
*/
private static final long serialVersionUID = 1L;
/**
* 注册的email
*/
private String email;
/**
* 注册的password
*/
private String password; private String url; public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
} private EmailVerificationCodeService emailVerificationCodeService; public EmailVerificationCodeService getEmailVerificationCodeService() {
return emailVerificationCodeService;
} public void setEmailVerificationCodeService(
EmailVerificationCodeService emailVerificationCodeService) {
this.emailVerificationCodeService = emailVerificationCodeService;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} @Override
public String execute() throws Exception {
// 如果email,password都不为null的时候,执行注册操作
if (getEmail() != null && getPassword() != null) {
Emailverificationcode emailVerificationCode = new Emailverificationcode();
emailVerificationCode.setEmail(getEmail());
emailVerificationCode.setPassword(getPassword());
emailVerificationCode.setActive(0);
getEmailVerificationCodeService().save(emailVerificationCode);
Emailverificationcode evc = new Emailverificationcode();
evc = getEmailVerificationCodeService().getByEmailAndPassword(
getEmail(), getPassword());
String content = "hello,请点击此处进行邮箱激活," + getUrl() + "?id="
+ evc.getId() + "&email=" + getEmail() + "&password="
+ getPassword() + "&active=1";
// 发送邮件进行邮箱激活
getEmailVerificationCodeService().sendEmail(getEmail(),
EmailVerificationCodeService.SUBJECT_MAIL_ACTIVE, content);
return "login";
} else {
return "register";
}
} }

/EmailforVerificationCode/src/com/b510/dao/EmailVerificationCodeDAO.java

 package com.b510.dao;

  import com.b510.domain.Emailverificationcode;

  /**
* EmailVerificationCodeDAO接口
*
* @author Hongten
*
*/
public interface EmailVerificationCodeDAO { /**
* 保存一条记录
*
* @param emailVerificationCode
* 需要被持久化的emailVerificationConde实例
*/
public void save(Emailverificationcode emailVerificationCode); /**
* 根据id值获取一条记录
*
* @param id
* 需要获取记录的id值
* @return 对应id值的一条记录
*/
public Emailverificationcode getById(int id); /**
* 根据email,password获取一条记录
*
* @param email
* 电子邮箱
* @param password
* 密码
* @return 根据email,password返回相应值的一条记录
*/
public Emailverificationcode getByEmailAndPassword(String email,
String password); /**
* 根据email,password,active获取一条记录
*
* @param email
* 电子邮箱
* @param password
* 密码
* @param active
* @return 根据email,password,active返回相应值的一条记录
*/
public Emailverificationcode getByEmailAndPassword(String email,
String password, int active); /**
* 根据id激活对应的email,active默认为0,激活状态为1
*
* @param emailverificationcode
* emailverificationcode的一个实例
* @return 返回时候激活成功
*/
public int updateActive(Emailverificationcode emailverificationcode);
}

/EmailforVerificationCode/src/com/b510/dao/impl/EmailVerificationCodeDAOImpl.java

package com.b510.dao.impl;

 import java.util.List;

 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

 import com.b510.dao.EmailVerificationCodeDAO;
import com.b510.domain.Emailverificationcode; public class EmailVerificationCodeDAOImpl extends HibernateDaoSupport implements
EmailVerificationCodeDAO { @SuppressWarnings("unchecked")
public Emailverificationcode getByEmailAndPassword(String email,
String password) {
List<Emailverificationcode> evc = (List<Emailverificationcode>) getHibernateTemplate()
.find(
"from Emailverificationcode where email=? and password=?",
email, password);
if (evc != null && evc.size() >= 1) {
return evc.get(evc.size() - 1);
}
return null;
} public Emailverificationcode getById(int id) {
return getHibernateTemplate().get(Emailverificationcode.class, id);
} public void save(Emailverificationcode emailVerificationCode) {
getHibernateTemplate().save(emailVerificationCode);
} public int updateActive(Emailverificationcode emailverificationcode) {
getHibernateTemplate().update(emailverificationcode);
return 1;
} public Emailverificationcode getByEmailAndPassword(String email,
String password, int active) {
return (Emailverificationcode) getHibernateTemplate()
.find(
"from Emailverificationcode as e where e.email=? and e.password=? and e.active=?",
new Object[] { email, password, active });
} }

/EmailforVerificationCode/src/com/b510/domain/Emailverificationcode.java

 package com.b510.domain;

  import java.io.Serializable;

  /**
* 电子邮件激活实体类
*
* @author Hongten
*
*/
public class Emailverificationcode implements Serializable { /**
* identification number
*/
private static final long serialVersionUID = 6596616450068919832L; /**
* id号
*/
private int id; /**
* email邮箱
*/
private String email; /**
* 密码
*/
private String password;
/**
* 激活状态,
*/
private int active; public Emailverificationcode() {
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public int getActive() {
return active;
} public void setActive(int active) {
this.active = active;
} }

/EmailforVerificationCode/src/com/b510/domain/Emailverificationcode.hbm.xml

 <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.b510.domain.Emailverificationcode" table="emailverificationcode"
catalog="hrSystem">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<property name="email" type="java.lang.String">
<column name="email" length="50" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="50" />
</property>
<property name="active" type="java.lang.Integer">
<column name="active" />
</property>
</class>
</hibernate-mapping>

/EmailforVerificationCode/src/com/b510/service/EmailVerificationCodeService.java

 package com.b510.service;

  import com.b510.domain.Emailverificationcode;

  public interface EmailVerificationCodeService {
// 发件人
static final String FROM_MAIL = "hongtenzoneb@163.com";
// 邮件服务器
static final String SERVER_MAIL = "smtp.163.com";
// 邮件主题
static final String SUBJECT_MAIL_ACTIVE = "激活邮件";
// 邮件主题
static final String SUBJECT_MAIL_GETVERIFICATIONCODE = "获取验证码";
// 发件人,在邮件的发件人栏目中显示
static final String DATAFROM_MAIL = FROM_MAIL;
// 登陆邮箱的用户名
static final String USER_MAIL = "hongtenzoneb";
// 登陆邮箱的密码
static final String PASSWORD_MAIL = "***********";
/**
* 保存一条记录
*
* @param emailVerificationCode
* 需要被持久化的emailVerificationConde实例
*/
public void save(Emailverificationcode emailVerificationCode); /**
* 根据id值获取一条记录
*
* @param id
* 需要获取记录的id值
* @return 对应id值的一条记录
*/
public Emailverificationcode getById(int id); /**
* 根据email,password获取一条记录
*
* @param email
* 电子邮箱
* @param password
* 密码
* @return 根据email,password返回相应值的一条记录
*/
public Emailverificationcode getByEmailAndPassword(String email,
String password);
/**
* 根据email,password,active获取一条记录
*
* @param email
* 电子邮箱
* @param password
* 密码
* @param active
* @return 根据email,password,active返回相应值的一条记录
*/
public Emailverificationcode getByEmailAndPassword(String email,
String password,int active); /**
* 根据id激活对应的email,active默认为0,激活状态为1
*
* @param emailverificationcode
* emailverificationcode一个实例
* @return 返回时候激活成功
*/
public int updateActive(Emailverificationcode emailverificationcode);
/**
* 激活邮箱
*/
public void sendEmail(String toMail,String subject,String content);
/**
* 定义获取随机字符串方法
* @return 返回一个随机字符串
*/
public String getRandomChar();
}

/EmailforVerificationCode/src/com/b510/service/impl/EmailVerificationCodeServiceBean.java

 package com.b510.service.impl;

  import java.io.IOException;
import java.net.UnknownHostException; import com.b510.dao.EmailVerificationCodeDAO;
import com.b510.domain.Emailverificationcode;
import com.b510.service.EmailVerificationCodeService;
import com.b510.utils.MailMessage;
import com.b510.utils.SendEmail; public class EmailVerificationCodeServiceBean implements
EmailVerificationCodeService {
/**
* 通过spring的IoC注入EmailVerificationCodeDAO的一个实例
*/
private EmailVerificationCodeDAO emailVerificationCodeDAO; /**
* 发送邮件的一个实体
*/
private SendEmail sendEmail; public Emailverificationcode getByEmailAndPassword(String email,
String password) { return getEmailVerificationCodeDAO().getByEmailAndPassword(email,
password);
}
public Emailverificationcode getById(int id) {
return getEmailVerificationCodeDAO().getById(id);
} public EmailVerificationCodeDAO getEmailVerificationCodeDAO() {
return emailVerificationCodeDAO;
} public SendEmail getSendEmail() {
return sendEmail;
} public void save(Emailverificationcode emailVerificationCode) {
getEmailVerificationCodeDAO().save(emailVerificationCode);
} public void setEmailVerificationCodeDAO(
EmailVerificationCodeDAO emailVerificationCodeDAO) {
this.emailVerificationCodeDAO = emailVerificationCodeDAO;
} public void setSendEmail(SendEmail sendEmail) {
this.sendEmail = sendEmail;
} public int updateActive(Emailverificationcode emailverificationcode) {
return getEmailVerificationCodeDAO().updateActive(emailverificationcode);
}
/**
* 激活邮箱
*/
public void sendEmail(String toMail,String subject,String content){
MailMessage message = new MailMessage();
message.setFrom(EmailVerificationCodeService.FROM_MAIL);// 发件人
message.setTo(toMail);// 收件人
String server = EmailVerificationCodeService.SERVER_MAIL;// 邮件服务器
message.setSubject(subject);// 邮件主题
message.setContent(content);// 邮件内容
message.setDatafrom(EmailVerificationCodeService.DATAFROM_MAIL);// 发件人,在邮件的发件人栏目中显示
message.setDatato(toMail);// 收件人,在邮件的收件人栏目中显示
message.setUser(EmailVerificationCodeService.USER_MAIL);// 登陆邮箱的用户名
message.setPassword(EmailVerificationCodeService.PASSWORD_MAIL);// 登陆邮箱的密码 SendEmail smtp;
try {
smtp = new SendEmail(server, 25);
boolean flag;
flag = smtp.sendMail(message, server);
if (flag) {
System.out.println("邮件发送成功!");
} else {
System.out.println("邮件发送失败!");
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }
public Emailverificationcode getByEmailAndPassword(String email,
String password, int active) {
return getEmailVerificationCodeDAO().getByEmailAndPassword(email,
password,active);
}
// 定义获取随机字符串方法
public String getRandomChar() {
// 生成一个0、1、2的随机数字
int rand = (int) Math.round(Math.random() * 2);
long itmp = 0;
char ctmp = '\u0000';
switch (rand) {
// 生成大写字母
case 1:
itmp = Math.round(Math.random() * 25 + 65);
ctmp = (char) itmp;
return String.valueOf(ctmp);
// 生成小写字母
case 2:
itmp = Math.round(Math.random() * 25 + 97);
ctmp = (char) itmp;
return String.valueOf(ctmp);
// 生成数字
default:
itmp = Math.round(Math.random() * 9);
return itmp + "";
}
}
}

/EmailforVerificationCode/src/com/b510/utils/MailMessage.java

 package com.b510.utils;

  /**
* 邮件信息
*
* @author Hongten
*
*/
public class MailMessage {
/**
* 发件人
*/
private String from;
/**
* 收件人
*/
private String to;
/**
* 发件人,在邮件的发件人栏目中显示
*/
private String datafrom;
/**
* 收件人,在邮件的收件人栏目中显示
*/
private String datato;
/**
* 邮件主题
*/
private String subject;
/**
* 邮件内容
*/
private String content;
/**
* 发送日期
*/
private String date;
/**
* 登陆邮箱的用户名
*/
private String user;
/**
* 登陆邮箱的密码
*/
private String password; /**
* 获取发件人
*
* @return 发件人
*/
public String getFrom() {
return from;
} /**
* 设置发件人
*
* @param from
* 发件人
*/
public void setFrom(String from) {
this.from = from;
} /**
* 获取收件人
*
* @return 收件人
*/
public String getTo() {
return to;
} /**
* 设置收件人
*
* @param to
* 收件人
*/
public void setTo(String to) {
this.to = to;
} /**
* 获取发件人,在邮件的发件人栏目中显示
*
* @return 发件人,在邮件的发件人栏目中显示
*/
public String getDatafrom() {
return datafrom;
} /**
* 设置发件人,在邮件的发件人栏目中显示
*
* @param datafrom
* 发件人,在邮件的发件人栏目中显示
*/
public void setDatafrom(String datafrom) {
this.datafrom = datafrom;
} /**
* 获取收件人,在邮件的收件人栏目中显示
*
* @return 收件人,在邮件的收件人栏目中显示
*/
public String getDatato() {
return datato;
} /**
* 设置收件人,在邮件的收件人栏目中显示
*
* @param datato
* 收件人,在邮件的收件人栏目中显示
*/
public void setDatato(String datato) {
this.datato = datato;
} /**
* 获取邮件主题
*
* @return 邮件主题
*/
public String getSubject() {
return subject;
} /**
* 设置邮件主题
*
* @param subject
* 邮件主题
*/
public void setSubject(String subject) {
this.subject = subject;
} /**
* 获取邮件内容
*
* @return 邮件内容
*/
public String getContent() {
return content;
} /**
* 设置邮件内容
*
* @param content
* 邮件内容
*/
public void setContent(String content) {
this.content = content;
} /**
* 获取发送日期
*
* @return 发送日期
*/
public String getDate() {
return date;
} /**
* 设置发送日期
*
* @param date
* 发送日期
*/
public void setDate(String date) {
this.date = date;
} /**
* 获取登陆邮箱的用户名
*
* @return 登陆邮箱的用户名
*/
public String getUser() {
return user;
} /**
* 设置登陆邮箱的用户名
*
* @param user
* 登陆邮箱的用户名
*/
public void setUser(String user) {
this.user = user;
} /**
* 获取登陆邮箱的密码
*
* @return 登陆邮箱的密码
*/
public String getPassword() {
return password;
} /**
* 设置登陆邮箱的密码
*
* @param password
* 登陆邮箱的密码
*/
public void setPassword(String password) {
this.password = password;
} }

/EmailforVerificationCode/src/com/b510/utils/SendEmail.java

 package com.b510.utils;

  import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.StringTokenizer; import sun.misc.BASE64Encoder; public class SendEmail {
public SendEmail() {
} private boolean debug = true;
BASE64Encoder encode = new BASE64Encoder();// 用于加密后发送用户名和密码 private Socket socket; public SendEmail(String server, int port) throws UnknownHostException,
IOException {
try {
socket = new Socket(server, 25);
} catch (SocketException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("已经建立连接!");
}
} // 注册到邮件服务器
public void helo(String server, BufferedReader in, BufferedWriter out)
throws IOException {
int result;
result = getResult(in); // 连接上邮件服务后,服务器给出220应答
if (result != 220) {
throw new IOException("连接服务器失败");
} result = sendServer("HELO " + server, in, out); // HELO命令成功后返回250
if (result != 250) {
throw new IOException("注册邮件服务器失败!");
}
} private int sendServer(String str, BufferedReader in, BufferedWriter out)
throws IOException {
out.write(str);
out.newLine();
out.flush(); if (debug) {
System.out.println("已发送命令:" + str);
} return getResult(in);
} public int getResult(BufferedReader in) {
String line = ""; try {
line = in.readLine();
if (debug) {
System.out.println("服务器返回状态:" + line);
}
} catch (Exception e) {
e.printStackTrace();
} // 从服务器返回消息中读出状态码,将其转换成整数返回
StringTokenizer st = new StringTokenizer(line, " "); return Integer.parseInt(st.nextToken());
} public void authLogin(MailMessage message, BufferedReader in,
BufferedWriter out) throws IOException {
int result;
result = sendServer("AUTH LOGIN", in, out); if (result != 334) {
throw new IOException("用户验证失败!");
}
result = sendServer(encode.encode(message.getUser().getBytes()), in,
out); if (result != 334) {
throw new IOException("用户名错误!");
}
result = sendServer(encode.encode(message.getPassword().getBytes()),
in, out); if (result != 235) {
throw new IOException("验证失败!");
}
} // 开始发送消息,邮件源地址
public void mailfrom(String source, BufferedReader in, BufferedWriter out)
throws IOException {
int result;
result = sendServer("MAIL FROM:<" + source + ">", in, out); if (result != 250) {
throw new IOException("指定源地址错误");
}
} // 设置邮件收件人
public void rcpt(String touchman, BufferedReader in, BufferedWriter out)
throws IOException {
int result;
result = sendServer("RCPT TO:<" + touchman + ">", in, out); if (result != 250) {
throw new IOException("指定目的地址错误!");
}
} // 邮件体
public void data(String from, String to, String subject, String content,
BufferedReader in, BufferedWriter out) throws IOException {
int result;
result = sendServer("DATA", in, out); // 输入date回车后,若收到354应答后,继续输入邮件内容
if (result != 354) {
throw new IOException("不能发送数据");
} out.write("From: " + from);
out.newLine();
out.write("To: " + to);
out.newLine();
out.write("Subject: " + subject);
out.newLine();
out.newLine();
out.write(content);
out.newLine(); // 句点加回车结束邮件内容输入
result = sendServer(".", in, out);
System.out.println(result); if (result != 250) {
throw new IOException("发送数据错误");
}
} // 退出
public void quit(BufferedReader in, BufferedWriter out) throws IOException {
int result;
result = sendServer("QUIT", in, out); if (result != 221) {
throw new IOException("未能正确退出");
}
} // 发送邮件主程序
public boolean sendMail(MailMessage message, String server) {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream()));
helo(server, in, out);// helo
authLogin(message, in, out);// auth login
mailfrom(message.getFrom(), in, out);// mail from
rcpt(message.getTo(), in, out);// rcpt to
data(message.getDatafrom(), message.getDatato(), message
.getSubject(), message.getContent(), in, out);// DATA
quit(in, out);// quit
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}

/EmailforVerificationCode/src/struts-email.xml

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Struts2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<!-- Struts2配置文件的根元素 -->
<struts>
<package name="default" extends="struts-default">
<!-- 定义处理注册请求的Action,注册完成后,进入登录页面 -->
<action name="register" class="registerAction">
<result name="login">/WEB-INF/content/registerSuccess.jsp</result>
<result name="register">/WEB-INF/content/register.jsp</result>
</action> <!-- 定义处理登录系统的的Action -->
<action name="activeEmail" class="activeEmailAction">
<!-- 邮箱激活 -->
<result name="active">/WEB-INF/content/active.jsp</result>
</action> <action name="login" class="emailVerificationCodeAction"
method="login">
<result name="login">/WEB-INF/content/login.jsp</result>
</action> <action name="processLogin" class="emailVerificationCodeAction">
<!-- 输入验证码页面 -->
<result name="input">/WEB-INF/content/loginInputVerCode.jsp</result>
<!-- email没有激活的时候,请重新登录 -->
<result name="error">/WEB-INF/content/error.jsp</result>
</action> <action name="verCode" class="emailVerificationCodeAction"
method="inputVerificationCode">
<!-- 验证码验证失败 -->
<result name="errorVerCode">/WEB-INF/content/errorVerCode.jsp</result>
<!-- 登录成功界面 -->
<result>/WEB-INF/content/welcome.jsp</result>
</action>
</package>
</struts>

/EmailforVerificationCode/src/struts.xml

 <?xml version="1.0" encoding="GBK"?>
<!-- 指定Struts2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<!-- Struts2配置文件的根元素 -->
<struts>
<!-- 配置了系列常量 -->
<constant name="struts.custom.i18n.resources" value="resource"/>
<constant name="struts.i18n.encoding" value="GBK"/>
<constant name="struts.devMode" value="true"/>
<include file="struts-email.xml"></include>
</struts>

/EmailforVerificationCode/WebRoot/WEB-INF/web.xml

 <?xml version="1.0" encoding="GBK"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"> <!-- 配置Spring配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- 使用ContextLoaderListener初始化Spring容器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- 定义Struts 2的核心Filter -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- 让Struts 2的核心Filter拦截所有请求 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- 定义Web应用的首页 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

/EmailforVerificationCode/WebRoot/WEB-INF/applicationContext.xml

 <?xml version="1.0" encoding="GBK"?>
<!-- 指定Spring配置文件的Schema信息 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <bean id="sendEmail" class="com.b510.utils.SendEmail"></bean> <!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="org.gjt.mm.mysql.Driver" />
<property name="url" value="jdbc:mysql://localhost:3307/hrSystem" />
<property name="username" value="root" />
<property name="password" value="root" />
<!-- 连接池启动时的初始值 -->
<property name="initialSize" value="1" />
<!-- 连接池的最大值 -->
<property name="maxActive" value="300" />
<!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
<property name="maxIdle" value="2" />
<!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
<property name="minIdle" value="1" />
</bean> <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 配置SessionFactory所需的数据源,注入上面定义的dataSource -->
<property name="dataSource" ref="dataSource" /> <!-- mappingResources属性用来列出全部映射文件 -->
<property name="mappingResources">
<list>
<!-- 配置所有PO映射文件 -->
<value>com/b510/domain/Emailverificationcode.hbm.xml</value>
</list>
</property> <!-- 定义hibernate的SessionFactory的属性 -->
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.cache.use_second_level_cache=true
hibernate.cache.use_query_cache=false
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
</value>
</property>
</bean> <!-- 配置Hibernate的局部事务管理器,使用HibernateTransactionManager类 -->
<!-- 该类是PlatformTransactionManager接口对采用Hibernate的特定实现类 -->
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <bean id="emailVerificationCodeDAO" class="com.b510.dao.impl.EmailVerificationCodeDAOImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <bean id="emailVerificationCodeService" class="com.b510.service.impl.EmailVerificationCodeServiceBean">
<property name="emailVerificationCodeDAO" ref="emailVerificationCodeDAO"></property>
<property name="sendEmail" ref="sendEmail"></property>
</bean> <bean id="registerAction" class="com.b510.action.RegisterAction">
<property name="emailVerificationCodeService" ref="emailVerificationCodeService"></property>
<property name="url"
value="http://10.5.116.39:1000/EmailforVerificationCode/activeEmail"></property>
</bean> <bean id="emailVerificationCodeAction" class="com.b510.action.EmailVerificationCodeAction">
<property name="emailVerificationCodeService" ref="emailVerificationCodeService"></property>
</bean> <bean id="activeEmailAction" class="com.b510.action.ActiveEmailAction">
<property name="emailVerificationCodeService" ref="emailVerificationCodeService"></property>
</bean> </beans>

/EmailforVerificationCode/WebRoot/index.jsp

<jsp:forward page="/WEB-INF/content/login.jsp"/>

/EmailforVerificationCode/WebRoot/WEB-INF/content/login.jsp

 <%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>登录系统</title>
<s:head/>
</head>
<body>
<table width="780" align="center">
<tr>
<td>
请输入邮箱和密码来登录,如果还没有注入,请点击这里进行<a href="register.action">注册</a><br />
<div align="center">
<s:form action="processLogin.action">
<s:textfield name="email" label="邮箱"/>
<s:textfield name="password" label="密码"/>
<tr><td colspan="2">
<s:submit value="登录" theme="simple"/><s:reset theme="simple" value="重填"/>
</td></tr>
</s:form>
</div>
</td>
</tr>
</table>
</body>
</html>

/EmailforVerificationCode/WebRoot/WEB-INF/content/register.jsp

 <%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>注册信息</title>
<s:head/>
</head>
<body>
<table width=780 align="center">
<tr>
<td>
注册信息:<br>
<div align="center">
<s:form action="register">
<s:textfield name="email" label="邮箱"/>
<s:textfield name="password" label="密码"/>
<s:token/>
<tr><td colspan="2">
<s:submit value="注册" theme="simple"/>
<s:reset theme="simple" value="重设"/>
</td></tr>
</s:form>
</div>
</td>
</tr>
</table>
</body>
</html>

/EmailforVerificationCode/WebRoot/WEB-INF/content/registerSuccess.jsp

 <%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>欢迎登录</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
恭喜你,注册成功了!系统会发一封邮件到你注册的邮箱,<br />
请打开你注册的邮箱,激活你注册的邮箱。
</body>
</html>

/EmailforVerificationCode/WebRoot/WEB-INF/content/active.jsp

 <%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>激活页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
你的邮箱已经激活,你现在可以进行<a href="login.action">登录操作</a>。
</body>
</html>

/EmailforVerificationCode/WebRoot/WEB-INF/content/loginInputVerCode.jsp

 <%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>登录系统-输入验证码</title>
<s:head/>
</head>
<body>
<table width="780" align="center">
<tr>
<td>
你会在你注册的邮箱中收到一封邮件,里面有验证码,请输入验证码完成登录<br />
<div align="center">
<s:form action="verCode">
<s:textfield name="verificationCode" label="验证码"/>
<tr><td colspan="2">
<s:submit value="提交" theme="simple"/><s:reset theme="simple" value="重填"/>
</td></tr>
</s:form>
</div>
</td>
</tr>
</table>
</body>
</html>

/EmailforVerificationCode/WebRoot/WEB-INF/content/error.jsp

 <%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>出错提示页</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
你的邮箱可能未激活,请进入你的邮箱进行激活!谢谢
</body>
</html>

/EmailforVerificationCode/WebRoot/WEB-INF/content/errorVerCode.jsp

 <%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>出错提示页</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
你输入的验证码有错误!请重新<a href="processLogin.action">登录</a>
</body>
</html>

/EmailforVerificationCode/WebRoot/WEB-INF/content/welcome.jsp

 <%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>欢迎登录</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
欢迎登录成功!
</body>
</html>

原文作者:http://www.cnblogs.com/hongten/archive/2012/04/04/java_spring_hibernate_struts2.html

源码下载http://files.cnblogs.com/hongten/EmailforVerificationCode.zip

上一篇:开源CMS系统Moodle对比中国本土化开源在线教育平台EduSoho


下一篇:Linux下PHP安装配置MongoDB数据库连接扩展