1 package com.xxx.util; 2 3 import java.util.Date; 4 import java.util.Properties; 5 6 import javax.mail.Address; 7 import javax.mail.BodyPart; 8 import javax.mail.Message; 9 import javax.mail.MessagingException; 10 import javax.mail.Multipart; 11 import javax.mail.Session; 12 import javax.mail.Transport; 13 import javax.mail.internet.InternetAddress; 14 import javax.mail.internet.MimeBodyPart; 15 import javax.mail.internet.MimeMessage; 16 import javax.mail.internet.MimeMultipart; 17 18 public class SimpleMailSender { 19 public boolean sendTextMail(MailSenderInfo mailInfo) { 20 // 判断是否需要身份认证 21 MyAuthenticator authenticator = null; 22 Properties pro = mailInfo.getProperties(); 23 if (mailInfo.isValidate()) { 24 // 如果需要身份认证,则创建一个密码验证器 25 authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); 26 } 27 // 根据邮件会话属性和密码验证器构造一个发送邮件的session 28 Session sendMailSession = Session.getDefaultInstance(pro,authenticator); 29 try { 30 // 根据session创建一个邮件消息 31 Message mailMessage = new MimeMessage(sendMailSession); 32 // 创建邮件发送者地址 33 Address from = new InternetAddress(mailInfo.getFromAddress()); 34 // 设置邮件消息的发送者 35 mailMessage.setFrom(from); 36 // 创建邮件的接收者地址,并设置到邮件消息中 37 Address to = new InternetAddress(mailInfo.getToAddress()); 38 mailMessage.setRecipient(Message.RecipientType.TO,to); 39 // 设置邮件消息的主题 40 mailMessage.setSubject(mailInfo.getSubject()); 41 // 设置邮件消息发送的时间 42 mailMessage.setSentDate(new Date()); 43 // 设置邮件消息的主要内容 44 String mailContent = mailInfo.getContent(); 45 mailMessage.setText(mailContent); 46 // 发送邮件 47 Transport.send(mailMessage); 48 return true; 49 } catch (MessagingException ex) { 50 ex.printStackTrace(); 51 } 52 return false; 53 } 54 55 /** 56 * 以HTML格式发送邮件 57 * @param mailInfo 待发送的邮件信息 58 */ 59 public static boolean sendHtmlMail(MailSenderInfo mailInfo){ 60 // 判断是否需要身份认证 61 MyAuthenticator authenticator = null; 62 Properties pro = mailInfo.getProperties(); 63 //如果需要身份认证,则创建一个密码验证器 64 if (mailInfo.isValidate()) { 65 authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); 66 } 67 // 根据邮件会话属性和密码验证器构造一个发送邮件的session 68 Session sendMailSession = Session.getDefaultInstance(pro,authenticator); 69 try { 70 // 根据session创建一个邮件消息 71 Message mailMessage = new MimeMessage(sendMailSession); 72 // 创建邮件发送者地址 73 Address from = new InternetAddress(mailInfo.getFromAddress()); 74 // 设置邮件消息的发送者 75 mailMessage.setFrom(from); 76 // 创建邮件的接收者地址,并设置到邮件消息中 77 Address to = new InternetAddress(mailInfo.getToAddress()); 78 // Message.RecipientType.TO属性表示接收者的类型为TO 79 mailMessage.setRecipient(Message.RecipientType.TO,to); 80 // 设置邮件消息的主题 81 mailMessage.setSubject(mailInfo.getSubject()); 82 // 设置邮件消息发送的时间 83 mailMessage.setSentDate(new Date()); 84 // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象 85 Multipart mainPart = new MimeMultipart(); 86 // 创建一个包含HTML内容的MimeBodyPart 87 BodyPart html = new MimeBodyPart(); 88 // 设置HTML内容 89 html.setContent(mailInfo.getContent(), "text/html; charset=utf-8"); 90 mainPart.addBodyPart(html); 91 // 将MiniMultipart对象设置为邮件内容 92 mailMessage.setContent(mainPart); 93 // 发送邮件 94 Transport.send(mailMessage); 95 return true; 96 } catch (MessagingException ex) { 97 ex.printStackTrace(); 98 } 99 return false; 100 } 101 }
1 package com.xxx.util; 2 3 import java.util.Properties; 4 5 public class MailSenderInfo { 6 7 // 发送邮件的服务器的IP和端口 8 private String mailServerHost; 9 private String mailServerPort = "25"; 10 11 // 邮件发送者的地址 12 private String fromAddress; 13 14 // 邮件接收者的地址 15 private String toAddress; 16 17 // 登陆邮件发送服务器的用户名和密码 18 private String userName; 19 private String password; 20 21 // 是否需要身份验证 22 private boolean validate = false; 23 24 // 邮件主题 25 private String subject; 26 27 // 邮件的文本内容 28 private String content; 29 30 // 邮件附件的文件名 31 private String[] attachFileNames; 32 /** 33 * 获得邮件会话属性 34 */ 35 public Properties getProperties(){ 36 Properties p = new Properties(); 37 p.put("mail.smtp.host", this.mailServerHost); 38 p.put("mail.smtp.port", this.mailServerPort); 39 p.put("mail.smtp.auth", validate ? "true" : "false"); 40 return p; 41 } 42 public String getMailServerHost() { 43 return mailServerHost; 44 } 45 public void setMailServerHost(String mailServerHost) { 46 this.mailServerHost = mailServerHost; 47 } 48 public String getMailServerPort() { 49 return mailServerPort; 50 } 51 public void setMailServerPort(String mailServerPort) { 52 this.mailServerPort = mailServerPort; 53 } 54 public boolean isValidate() { 55 return validate; 56 } 57 public void setValidate(boolean validate) { 58 this.validate = validate; 59 } 60 public String[] getAttachFileNames() { 61 return attachFileNames; 62 } 63 public void setAttachFileNames(String[] fileNames) { 64 this.attachFileNames = fileNames; 65 } 66 public String getFromAddress() { 67 return fromAddress; 68 } 69 public void setFromAddress(String fromAddress) { 70 this.fromAddress = fromAddress; 71 } 72 public String getPassword() { 73 return password; 74 } 75 public void setPassword(String password) { 76 this.password = password; 77 } 78 public String getToAddress() { 79 return toAddress; 80 } 81 public void setToAddress(String toAddress) { 82 this.toAddress = toAddress; 83 } 84 public String getUserName() { 85 return userName; 86 } 87 public void setUserName(String userName) { 88 this.userName = userName; 89 } 90 public String getSubject() { 91 return subject; 92 } 93 public void setSubject(String subject) { 94 this.subject = subject; 95 } 96 public String getContent() { 97 return content; 98 } 99 public void setContent(String textContent) { 100 this.content = textContent; 101 } 102 }
以上是两个工具类,下面是action里面的使用
1 //找回密码 2 public String findpwd(){ 3 try { 4 boolean result = userService.checkEmail(item.getEmail()); 5 int randNum= (int) (((Math.random()+1)*1000000)); 6 if (result) { 7 MailSenderInfo mailInfo = new MailSenderInfo(); 8 mailInfo.setMailServerHost("smtp.126.com"); 9 mailInfo.setMailServerPort("25"); 10 mailInfo.setValidate(true); 11 mailInfo.setUserName("chuguozhan@126.com"); 12 mailInfo.setPassword("60514895a");//您的邮箱密码 13 mailInfo.setFromAddress("chuguozhan@126.com"); 14 mailInfo.setToAddress(item.getEmail()); 15 mailInfo.setSubject("密码找回:"); 16 mailInfo.setContent("您的重置密码是:"+String.valueOf(randNum)); 17 18 SimpleMailSender sms = new SimpleMailSender(); 19 if(sms.sendHtmlMail(mailInfo)){ 20 User user = userService.getUserByEmail(item.getEmail()); 21 user.setPassword(String.valueOf(randNum)); 22 userService.doModifyPwd(user); 23 log.info("findpwd success!!!"); 24 resultMap.put("retcode", RetCode.SUCCESS); 25 resultMap.put("retmsg", "重置密码已发送到了您的注册邮箱"); 26 }else{ 27 log.info("findpwd fail!!!"); 28 resultMap.put("retcode", RetCode.FAIL); 29 resultMap.put("retmsg", "密码找回失败"); 30 } 31 }else{ 32 log.info("checkPwd fail!!!"); 33 resultMap.put("retcode", RetCode.CHECK); 34 resultMap.put("retmsg", "邮箱不存在,请确认您输入的邮箱是否正确!"); 35 } 36 } catch (Exception e) { 37 log.error("findpwd is bug",e); 38 resultMap.put("retcode", RetCode.UNKOWN_WRONG); 39 resultMap.put("retmsg", "密码找回出现错误!"); 40 } 41 return SUCCESS; 42 }
Dao层和Service层功能实现就不贴了