下载javax.mail.jar导入项目
//以下是action代码
/**
* 注册第一步,保存用户名和密码
* @return
*/
@SuppressWarnings("unchecked")
public String register(){
userInfo.setTradersPassword(userInfo.getLoginPassword());
session.put("REGISTER_USER",userInfo);
return "verify";
}
/**
* 注册第二步,发送验证邮件
* @return
*/
public String sendEmail(){
if(null!=session.get("REGISTER_USER")){
UUserInfo user = (UUserInfo) session.get("REGISTER_USER");
user.setLoginPassword(MD5.encode(user.getLoginPassword()));
user.setTradersPassword(MD5.encode(user.getTradersPassword()));
user.setEmail(userInfo.getEmail());
user.setArticlesCount(0L);
user.setEmailAuth(0L);
user.setPhoneAuth(0L);
user.setRegDate(new Date());
user.setIsLock(1L);
session.put("REGISTER_USER", user);
//获取是第一次发还是重发邮件 0:第一次 1:更换邮箱发送
String active = request.getParameter("active");
boolean sendSuccess = sendHtmlEmail(user);
if(sendSuccess && "0".equals(active)){//发送成功并且是第一次发送验证邮件,添加用户信息
userInfoBiz.addUser(user);
}else if(sendSuccess && "1".equals(active)) {//更换邮箱发送成功,修改用户邮箱
UUserInfo userInfo = userInfoBiz.getUserInfoByUserName(user.getUserName());
if(userInfo!=null)
userInfo.setEmail(user.getEmail());
else
userInfo = user;
userInfoBiz.modifyUserInfo(userInfo);
}
}
session.put("email",userInfo.getEmail());
return "sendEmail";
}
/**
* 重新发送验证邮件
*/
@SuppressWarnings("unchecked")
public void sendEmailAgain(){
UUserInfo user = (UUserInfo) session.get("REGISTER_USER");
int sendCount = session.get("sendCount")==null?0:Integer.valueOf(session.get("sendCount").toString());
if(null!=user){
if(null!=session.get("REGISTER_USER")){
if(sendHtmlEmail(user)){
sendCount = sendCount+1;
session.put("sendCount",sendCount);
}else {
sendCount = -1;
}
}
}else {
sendCount = -1;
}
getWriter().print(sendCount);
closeOut();
}
/**
* 激活邮箱
* @return
*/
public String verifyEmail(){
String email = request.getParameter("ID");
int verifyInfo = 0;
if(null!=email){
email = Encryption.decrypt(email);
UUserInfo userInfo = userInfoBiz.getUserInfoByEmail(email);
if(null!=userInfo){//改用户邮箱修改为已激活
if(userInfo.getEmailAuth().intValue() ==0){
userInfo.setEmailAuth(1L);
userInfo.setIsLock(0L);
userInfoBiz.modifyUserInfo(userInfo);
session.put("USER_INFO",userInfo);
verifyInfo = 1;
}else {
verifyInfo = 2;
}
}else {
verifyInfo =-1;
}
}
session.put("verifyInfo",verifyInfo);
return "verifyEmail";
}
//一下方法中的systemInfo中保存了后台配置的一些参数
/**
* 发送邮件
* @return
*/
public boolean sendHtmlEmail(UUserInfo user){
//获取系统信息
systemInfo = systemBiz.getSystemInfo();
boolean flag=false;
if(systemInfo!=null && systemInfo.getMailAddress()!=null){
//发送验证邮件
MailSenderInfo mailInfo = new MailSenderInfo();
mailInfo.setMailServerHost(systemInfo.getMailSmtpIp()); // "smtp.qq.com"
mailInfo.setMailServerPort("25");
mailInfo.setValidate(true);
mailInfo.setUserName(systemInfo.getMailAddress().split("@")[0]);//(mail_address.split("@")[0]); // "863406563"
mailInfo.setPassword(Encryption.decrypt(systemInfo.getMailPassword()));// 您的邮箱密码
mailInfo.setFromAddress(systemInfo.getMailAddress()); // 发送人
mailInfo.setToAddress(user.getEmail()); //接收人
mailInfo.setSubject(systemInfo.getMailSenderName()+"用户邮箱验证!");
//生成激活链接
String Uip = request.getServerName();
String path = request.getScheme() + "://" + Uip + ":"
+ request.getServerPort() + request.getContextPath()
+ "/webUserInfoAction_verifyEmail.do?ID="+Encryption.encrypt(user.getEmail());
String mailContent = " 亲爱的"+systemInfo.getMailSenderName()+"用户 <span style=\"color:red\"> "
+ user.getUserName()
+ "</span> ,您好!<p> 感谢您注册"+systemInfo.getMailSenderName()+",请确认您的邮箱帐号为 <span style=\"font-weight: bold\">"
+ user.getEmail()
+ " </span> </p><p> 请点击下面的链接即可完成激活。</p><p> "
+ path
+ "</p><p> (如果链接无法点击,请将它拷贝到浏览器的地址栏中)"
+ "</p><p> "+systemInfo.getMailSenderName()+",您的互联网理财新渠道!</p><p> </p><p> 此为自动发送邮件,请勿直接回复!</p>";
mailInfo.setContent(mailContent);
mailInfo.setNickname(systemInfo.getMailSenderName());
try {
flag=MailSender.sendHtmlMail(mailInfo);
} catch (Exception e) {
e.printStackTrace();
}
}
return flag;
}
新建一个实体类MailSenderInfo
import java.util.Properties;
public class MailSenderInfo {
// 发送邮件的服务器的IP和端口
private String mailServerHost;
private String mailServerPort;
// 邮件发送者的地址
private String fromAddress;
// 邮件接收者的地址
private String toAddress;
// 登陆邮件发送服务器的用户名和密码
private String userName;
private String password;
// 发送者昵称
private String nickname;
// 是否需要身份验证
private boolean validate = false;
// 邮件主题
private String subject;
// 邮件的文本内容
private String content;
// 邮件附件的文件名
private String[] attachFileNames;
/** *//**
* 获得邮件会话属性
*/
public Properties getProperties(){
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost);
p.put("mail.smtp.port", this.mailServerPort);
p.put("mail.smtp.auth", validate ? "true" : "false");
return p;
}
public String getMailServerHost() {
return mailServerHost;
}
public void setMailServerHost(String mailServerHost) {
this.mailServerHost = mailServerHost;
}
public String getMailServerPort() {
return mailServerPort;
}
public void setMailServerPort(String mailServerPort) {
this.mailServerPort = mailServerPort;
}
public boolean isValidate() {
return validate;
}
public void setValidate(boolean validate) {
this.validate = validate;
}
public String[] getAttachFileNames() {
return attachFileNames;
}
public void setAttachFileNames(String[] fileNames) {
this.attachFileNames = fileNames;
}
public String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getToAddress() {
return toAddress;
}
public void setToAddress(String toAddress) {
this.toAddress = toAddress;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String textContent) {
this.content = textContent;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
//新建类MailSender
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class MailSender {
/**
* 以文本格式发送邮件
* @param mailInfo 待发送的邮件的信息
*/
public boolean sendTextMail(MailSenderInfo mailInfo) {
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
if (mailInfo.isValidate()) {
// 如果需要身份认证,则创建一个密码验证器
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
try {
// 根据session创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO,to);
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(new Date());
// 设置邮件消息的主要内容
String mailContent = mailInfo.getContent();
mailMessage.setText(mailContent);
// 发送邮件
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
/** *//**
* 以HTML格式发送邮件
* @param mailInfo 待发送的邮件信息
* @throws UnsupportedEncodingException
*/
public static boolean sendHtmlMail(MailSenderInfo mailInfo) throws UnsupportedEncodingException{
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
//如果需要身份认证,则创建一个密码验证器
if (mailInfo.isValidate()) {
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
try {
// 根据session创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
//MimeMessage mailMessage=new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from =new InternetAddress(mailInfo.getFromAddress(),mailInfo.getNickname());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
// Message.RecipientType.TO属性表示接收者的类型为TO
mailMessage.setRecipient(Message.RecipientType.TO,to);
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(new Date());
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart html = new MimeBodyPart();
// 设置HTML内容
html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
mainPart.addBodyPart(html);
// 将MiniMultipart对象设置为邮件内容
mailMessage.setContent(mainPart);
// 发送邮件
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
}