下載下傳javax.mail.jar導入項目
//以下是action代碼
@SuppressWarnings("unchecked")
public String register(){
userInfo.setTradersPassword(userInfo.getLoginPassword());
session.put("REGISTER_USER",userInfo);
return "verify";
}
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();
}
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中儲存了背景配置的一些參數
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 {
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;
}
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;
}
}