邮件发送

来源:互联网 发布:淘宝联盟电脑版 编辑:程序博客网 时间:2024/04/30 17:44

现在邮件用的越来越强大了 ,各种通知都需要涉及到邮件,首先用户在本地搭建一个邮件服务器或者是拥有远程邮箱服务器的ip地址和端口号,以及连接时所需要的账号和密码。本地邮箱服务器你可以下载eyoumailserver.

首先需要导入jar文件  activation-1.1.jar和jar文件mail.jar

下面直接上代码

1.前台与后台的通信采用ajax

点击button

<button type="button" class="btn btn-primary" id="btnNotifyCustomerByEmail"><i class="fa fa-envelope-o"></i> Notify Customer by Email</button>

执行的js

  1.  $("#btnNotifyCustomerByEmail").click(function () {
  2.                 if (!confirm("Are you sure to send a email to customer for notification?")) {
  3.                     return;
  4.                 }
  5.                 var orderNumber = $("#OrderNumber").val();
  6.                 var email = $("#txtCustomerTag").val();
  7.                 $.ajax({
  8.                     url: "<%=basePath%>orderList/NotifyCustomerByEmail",
  9.                     type: "post",
  10.                     dataType: "json",
  11.                     data: { orderNumber: orderNumber, email: email },
  12.                     async: false,
  13.                     success: function (data) {
  14.                         if (data.result == "1") {
  15.                             $("#msg").html(data.message);
  16.                         }
  17.                         else {
  18.                             alert(data.message);
  19.                         }
  20.                     }
  21.                 });
  22.             })
  23.         })

2.前台ajax访问controller里面的方法


  1. /**
  2. * 给用户发送order邮件
  3. * @throws Exception
  4. */
  5. @RequestMapping("NotifyCustomerByEmail")
  6. public @ResponseBody String NotifyCustomerByEmail(String orderNumber, String email, HttpServletRequest request) {
  7. Subject subject = SecurityUtils.getSubject();
  8. Session session = subject.getSession();
  9. SystemUser user = (SystemUser) session.getAttribute(Const.SESSION_USER);
  10. //发送邮件同时给orderemailsent表中插入一条记录
  11. PageData ordersend=new PageData();
  12. ordersend.put("orderNumber", orderNumber);
  13. ordersend.put("sentBy", user.getsystemUserID());
  14. ordersend.put("sentDate", new Date());
  15. try {
  16. ordersend.put("OrderID", orderService.getOrderIDByNumber(ordersend));
  17. orderService.insertEmailSend(ordersend);
  18. } catch (Exception e) {
  19. // TODO Auto-generated catch block
  20. e.printStackTrace();
  21. }
  22. return orderService.notifyCustomerByEmail(orderNumber, email, request, user.getsystemUserID());
  23. }

3.service层的方法,主要用来封装数据,然后调用发送邮件的方法


  1. public String notifyCustomerByEmail(String orderNumber, String email, HttpServletRequest request,
  2. Integer systemUserId) {
  3. String method = new Exception().getStackTrace()[0].getClassName() + "."
  4. + new Exception().getStackTrace()[0].getMethodName() + "()";

  5. //Date date = new Date();
  6. //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");


  7. MailSenderInfo mailSenderInfo = new MailSenderInfo();

  8. mailSenderInfo.setMailServerHost(Const.MAIL_SERVER);
  9. mailSenderInfo.setMailServerPort(Const.MAIL_PORT);
  10. mailSenderInfo.setUserName(Const.REQUEST_EMAIL);
  11. mailSenderInfo.setPassword(Const.REQUEST_PWD);
  12. mailSenderInfo.setValidate(true);

  13. mailSenderInfo.setSubject("Your order arrived at warehouse");

  14. mailSenderInfo.setContent("邮件内容");

  15. mailSenderInfo.setFromAddress(Const.REQUEST_EMAIL);

  16. mailSenderInfo.setToAddress(email);
  17. System.out.println(email);
  18. SimpleMailSender simpleMailSender = new SimpleMailSender();
  19. JSONObject jsonObject = new JSONObject();
  20. try {
  21. boolean flag = simpleMailSender.sendHtmlMail(mailSenderInfo);

  22. SystemLog log = new SystemLog();
  23. log.setCreatedDate(new Date());

  24. Integer orderId = findOrderByOrderNumber(orderNumber);
  25. log.setDescription("send notify success. orderId: " + orderId);
  26. log.setIp(PublicUtil.getRemoteHost(request));
  27. log.setMethodName(method);
  28. log.setSystemUserId(systemUserId);
  29. logService.SystemLog(log);
  30. if (flag) {
  31. jsonObject.put("result", 1);
  32. jsonObject.put("message", "Email has been sent successfully!");
  33. return jsonObject.toString();
  34. } else {
  35. jsonObject.put("result", 1);
  36. jsonObject.put("message", "Email send failed!");
  37. return jsonObject.toString();
  38. }
  39. } catch (Exception e) {
  40. e.printStackTrace();
  41. jsonObject.put("result", 1);
  42. jsonObject.put("message", "Email send failed!");
  43. return jsonObject.toString();
  44. }
  45. }

4.发送邮件封装的实体类


  1. package com.zipx.util.mail;   
  2. /**   
  3.  *发送邮件需要使用的基本信息 
  4.  *  
  5.  */    
  6. import java.util.Properties;    
  7. public class MailSenderInfo {    
  8.     // 发送邮件的服务器的IP和端口    
  9.     private String mailServerHost;    
  10.     private String mailServerPort = "25";    
  11.     // 邮件发送者的地址    
  12.     private String fromAddress;    
  13.     // 邮件接收者的地址    
  14.     private String toAddress;    
  15.     // 登陆邮件发送服务器的用户名和密码    
  16.     private String userName;    
  17.     private String password;    
  18.     // 是否需要身份验证    
  19.     private boolean validate = false;    
  20.     // 邮件主题    
  21.     private String subject;    
  22.     // 邮件的文本内容    
  23.     private String content;    
  24.     // 邮件附件的文件名    
  25.     private String[] attachFileNames;      
  26.     /**   
  27.       * 获得邮件会话属性   
  28.       */    
  29.     public Properties getProperties(){    
  30.       Properties p = new Properties();    
  31.       p.put("mail.smtp.host", this.mailServerHost);    
  32.       p.put("mail.smtp.port", this.mailServerPort);    
  33.       p.put("mail.smtp.auth", validate ? "true" : "false");    
  34.       return p;    
  35.     }    
  36.     public String getMailServerHost() {    
  37.       return mailServerHost;    
  38.     }    
  39.     public void setMailServerHost(String mailServerHost) {    
  40.       this.mailServerHost = mailServerHost;    
  41.     }   
  42.     public String getMailServerPort() {    
  43.       return mailServerPort;    
  44.     }   
  45.     public void setMailServerPort(String mailServerPort) {    
  46.       this.mailServerPort = mailServerPort;    
  47.     }   
  48.     public boolean isValidate() {    
  49.       return validate;    
  50.     }   
  51.     public void setValidate(boolean validate) {    
  52.       this.validate = validate;    
  53.     }   
  54.     public String[] getAttachFileNames() {    
  55.       return attachFileNames;    
  56.     }   
  57.     public void setAttachFileNames(String[] fileNames) {    
  58.       this.attachFileNames = fileNames;    
  59.     }   
  60.     public String getFromAddress() {    
  61.       return fromAddress;    
  62.     }    
  63.     public void setFromAddress(String fromAddress) {    
  64.       this.fromAddress = fromAddress;    
  65.     }   
  66.     public String getPassword() {    
  67.       return password;    
  68.     }   
  69.     public void setPassword(String password) {    
  70.       this.password = password;    
  71.     }   
  72.     public String getToAddress() {    
  73.       return toAddress;    
  74.     }    
  75.     public void setToAddress(String toAddress) {    
  76.       this.toAddress = toAddress;    
  77.     }    
  78.     public String getUserName() {    
  79.       return userName;    
  80.     }   
  81.     public void setUserName(String userName) {    
  82.       this.userName = userName;    
  83.     }   
  84.     public String getSubject() {    
  85.       return subject;    
  86.     }   
  87.     public void setSubject(String subject) {    
  88.       this.subject = subject;    
  89.     }   
  90.     public String getContent() {    
  91.       return content;    
  92.     }   
  93.     public void setContent(String textContent) {    
  94.       this.content = textContent;    
  95.     }    
  96. }   


5.实现发送邮件的功能

  1. package com.zipx.util.mail;
  2. /**   
  3.  * 简单邮件(不带附件的邮件)发送器   
  4.  */ 
  5. import java.util.Date;    
  6. import java.util.Properties;   


  7. import javax.mail.Address;    
  8. import javax.mail.BodyPart;    
  9. import javax.mail.Message;    
  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. import com.zipx.controller.base.BaseController;


  18.     
  19. public class SimpleMailSender extends BaseController {    

  20.     /**   
  21.       * 以HTML格式发送邮件   
  22.       * @param mailInfo 待发送的邮件信息   
  23.       */    
  24.    
  25.    public  boolean sendHtmlMail(MailSenderInfo mailInfo) throws Exception{    
  26.       // 判断是否需要身份认证    
  27.       MyAuthenticator authenticator = null;   
  28.       Properties pro = mailInfo.getProperties();   
  29.       //如果需要身份认证,则创建一个密码验证器     
  30.       if (mailInfo.isValidate()) {    
  31.         authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());   
  32.       }    
  33.       // 根据邮件会话属性和密码验证器构造一个发送邮件的session    
  34.       Session sendMailSession = Session.getDefaultInstance(pro,authenticator);    
  35.         
  36.       // 根据session创建一个邮件消息    
  37.       Message mailMessage = new MimeMessage(sendMailSession);    
  38.       // 创建邮件发送者地址    
  39.       Address from = new InternetAddress(mailInfo.getFromAddress());    
  40.       // 设置邮件消息的发送者    
  41.       mailMessage.setFrom(from);    
  42.       // 创建邮件的接收者地址,并设置到邮件消息中    
  43.       Address to = new InternetAddress(mailInfo.getToAddress());    
  44.       // Message.RecipientType.TO属性表示接收者的类型为TO    
  45.       mailMessage.setRecipient(Message.RecipientType.TO,to);    
  46.       //设置密送
  47.       Address bcc=new InternetAddress(Const.MAIL_BCC);
  48.       mailMessage.setRecipient(Message.RecipientType.BCC,bcc);
  49.       // 设置邮件消息的主题    
  50.       mailMessage.setSubject(mailInfo.getSubject());    
  51.       // 设置邮件消息发送的时间    
  52.       mailMessage.setSentDate(new Date());    
  53.       // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象    
  54.       Multipart mainPart = new MimeMultipart();    
  55.       // 创建一个包含HTML内容的MimeBodyPart    
  56.       BodyPart html = new MimeBodyPart();    
  57.       // 设置HTML内容   
  58.    html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");    
  59.       mainPart.addBodyPart(html);    
  60.       // 将MiniMultipart对象设置为邮件内容    
  61.       mailMessage.setContent(mainPart);    
  62.       // 发送邮件    
  63.       Transport.send(mailMessage);    
  64.       return true;   
  65. }   

  66. package com.zipx.util.mail;
  67. /**   
  68.  *  
  69.  */ 
  70. import javax.mail.*;   


  71. public class MyAuthenticator extends Authenticator{   
  72.     String userName=null;   
  73.     String password=null;   
  74.         
  75.     public MyAuthenticator(){   
  76.     }   
  77.     public MyAuthenticator(String username, String password) {    
  78.         this.userName = username;    
  79.         this.password = password;    
  80.     }    
  81.     protected PasswordAuthentication getPasswordAuthentication(){   
  82.         return new PasswordAuthentication(userName, password);   
  83.     }   
  84. }   


0 0