java實現系統捕獲異常發送郵件案例_java

來源:互聯網
上載者:User

在實際運用中,比如你淘寶購物,申請退款,這時你在郵箱中看到退款郵件,或者你註冊某個帳號,申請驗證郵箱通知等等,這些都是郵件發送,這裡將介紹下系統捕獲異常發送郵件案例。

準備工作:
eclipse4.5 64位
jdk1.7 64位

郵件發送所需jar:

fastjson-1.1.24.jar,javax.mail-1.5.6.jar

類Developer:

枚舉類型,發送郵件人姓名和郵箱地址

package mail; /**  * @class:Developer  *@descript:枚舉類型,發送郵件人姓名和郵箱地址  *@date:2016年10月26日 下午8:07:50  *@author sanghaiqin  *@version:V1.0  */ public enum Developer {   zhoujing("周靜","405687038@qq.com"),   peiyuxiang("裴玉翔","498736875@qq.com"),   yipeng("乙鵬","729325112@qq.com"),   liuan("劉安","2211747233@qq.com"),   chenyuhao("陳宇豪","631604198@qq.com"),   wangdong("王棟","1217295649@qq.com"),   sanghaiqin("桑海芹","1522580013@qq.com");      //寄件者姓名   private String name;   //寄件者email   private String mail;      private Developer() {        }      private Developer(String name, String mail) {     this.name = name;     this.mail = mail;   }      /**    * @descript:傳遞寄件者姓名得到該寄件者的郵箱    * @param name 寄件者姓名    * @return    */   public static String getMail(String name) {     for (Developer c : Developer.values()) {       if (c.getName().equals(name)) {         return c.mail;       }     }     return null;   }      public String getName() {     return name;   }   public void setName(String name) {     this.name = name;   }   public String getMail() {     return mail;   }   public void setMail(String mail) {     this.mail = mail;   }    } 

類ExceptionInfo:寄件者資訊

package mail; /**  * @class:ExceptionInfo  *@descript:寄件者資訊  *@date:2016年10月26日 下午8:11:27  *@author sanghaiqin  *@version:V1.0  */ public class ExceptionInfo {    //寄件者姓名   private String developer;   //寄件者方法   private String method;   //寄件者url   private String url;   //寄件者捕獲異常資訊   private Exception e;      /**    * @param developer 寄件者姓名    * @param method 寄件者方法    * @param url 寄件者url    * @param e 寄件者捕獲異常資訊    */   public ExceptionInfo(String developer, String method, String url, Exception e) {     super();     this.developer = developer;     this.method = method;     this.url = url;     this.e = e;   }   public String getDeveloper() {     return developer;   }   public void setDeveloper(String developer) {     this.developer = developer;   }   public String getMethod() {     return method;   }   public void setMethod(String method) {     this.method = method;   }   public String getUrl() {     return url;   }   public void setUrl(String url) {     this.url = url;   }   public Exception getE() {     return e;   }   public void setE(Exception e) {     this.e = e;   }       } 

類MailSenderInfo:發送郵箱資訊

package mail;  import java.util.Properties; /**  * @class:MailSenderInfo  *@descript:發送郵箱資訊  *@date:2016年10月26日 下午8:14:22  *@author sanghaiqin  *@version:V1.0  */ public class MailSenderInfo {   //發送郵件的伺服器的IP   private String mailServerHost;   //發送郵件的伺服器的連接埠預設為25   private String mailServerPort = "25";   // 郵件寄件者的地址   private String fromAddress;   // 郵件接收者的地址   private String toAddress;   // 登陸郵件發送伺服器的使用者名稱   private String username;   // 登陸郵件發送伺服器的密碼   private String password;   // 是否需要身分識別驗證   private boolean validate = false;   // 郵件主題   private String subject;   // 郵件的常值內容   private String content;   // 郵件附件的檔案名稱   private String[] attachFileNames;      public MailSenderInfo() {     super();   }    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;   }      /**    * @descript:獲得郵件會話屬性    * @return    */   public Properties getProperties() {     PropertyUtil propertyUtil = new PropertyUtil();     Properties properties =propertyUtil.readProperties();     return properties;   }        } 

類MyAuthenticator:使用者驗證

package mail;  import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; /**  * @class:MyAuthenticator  *@descript:使用者驗證  *@date:2016年10月26日 下午8:57:45  *@author sanghaiqin  *@version:V1.0  */ public class MyAuthenticator extends Authenticator {   //使用者名稱   String username = null;   //密碼   String password = null;    public MyAuthenticator() {        }    public MyAuthenticator(String username, String password) {     this.username = username;     this.password = password;   }    protected PasswordAuthentication getPasswordAuthentication() {     return new PasswordAuthentication(username, password);   }    } 

類PropertyUtil:獲得properties檔案工具類

package mail;  import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /**  * @class:PropertyUtil  *@descript:獲得properties檔案工具類  *@date:2016年10月26日 下午8:20:10  *@author sanghaiqin  *@version:V1.0  */ public class PropertyUtil {   /**    * @descript:載入資源檔    * @param resources 資源檔    * @return    * @throws FileNotFoundException    */   private Properties loadProperties(String resources) {     InputStream inputstream = null;     Properties properties = new Properties();     // 使用InputStream得到一個資源檔     try {       inputstream = new FileInputStream(resources);        // 載入設定檔        properties.load(inputstream);     } catch (FileNotFoundException e) {       e.printStackTrace();     } catch (IOException e) {       e.printStackTrace();     }finally{       if(inputstream!=null){         try {           inputstream.close();         } catch (IOException e) {           e.printStackTrace();         }        }     }     return properties;   }      /**    * @descript:讀屬性檔案    * @return    * @throws FileNotFoundException    */   public Properties readProperties(){     String resources = PropertyUtil.class.getClassLoader().getResource("prop.properties").getPath();     Properties properties = loadProperties(resources);     return properties;   }      /**    * @descript:測試    * @param args    */   public static void main(String[] args) {     PropertyUtil p=new PropertyUtil();     Properties pro=p.readProperties();     String mailSenderUsername=(String) pro.get("mail.sender.username");     System.out.println("郵件寄件者使用者名稱:"+mailSenderUsername);//neo_lifes@163.com     String path = PropertyUtil.class.getClassLoader().getResource("prop.properties").getPath();     System.out.println(path);// /G:/Workspaces4.4/test/bin/prop.properties   }    } 

資源檔pro.properties:

#-------------------郵件功能------------------ #----------------這兩個是構建session必須的欄位---------- #smtp伺服器,構建session回話必須的欄位 mail.smtp.host=smtp.163.com #身分識別驗證,構建session回話必須的欄位 mail.smtp.auth=true #-------------------------------------------------------------- #寄件者的信箱使用者名 mail.sender.username=neo_lifes@163.com #寄件者的郵箱密碼 mail.sender.password=827623LIU #寄件者的郵箱地址 mail.sender.address=neo_lifes@163.com 

類JavaMail:發送郵箱

package mail;  import java.io.PrintWriter; import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Date; import java.util.Properties;  import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; 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; import javax.mail.internet.MimeUtility;  /**  * @class:JavaMail  *@descript:發送資訊郵箱  *所需jar包:  *fastjson-1.1.24.jar  *javax.mail-1.5.6.jar  *@date:2016年10月26日 下午8:13:05  *@author sanghaiqin  *@version:V1.0  */ public class JavaMail {      public static void sendExceptionMail(ExceptionInfo info){     try {       //通過寄件者獲得寄件者郵箱       String mail = Developer.getMail(info.getDeveloper());       if(mail!=null){         MailSenderInfo mailInfo = new MailSenderInfo();         //設定郵件的常值內容         mailInfo.setContent("負責人 : "+info.getDeveloper()+"==>伺服器 ip:"+InetAddress.getLocalHost().getHostAddress()+"==>方法名: "+info.getMethod()+"==>地址:"+info.getUrl()+"==>異常資訊: "+getEmessage(info.getE()));         //設定郵件接收者的地址         mailInfo.setToAddress(mail);         //郵件主題         mailInfo.setSubject("易卡愛途異常通知");         //發送郵件         sendTextMail(mailInfo);       }     } catch (UnknownHostException e) {       e.printStackTrace();     }   }      /**    * @descript:以文字格式設定發送郵件    * @param: mailInfo 待發送的郵件的資訊    * @return: 發送成功返回true;失敗返回false    */   public static boolean sendTextMail(MailSenderInfo mailInfo) {     // 判斷是否需要身份認證     MyAuthenticator authenticator = null;     Properties pro = mailInfo.getProperties();     try {        if ("true".trim().equals(pro.getProperty("mail.smtp.auth"))) {         // 如果需要身份認證,則建立一個密碼驗證器         authenticator = new MyAuthenticator(pro.getProperty("mail.sender.username"),pro.getProperty("mail.sender.password"));       }       // 根據郵件會話屬性和密碼驗證器構造一個發送郵件的session       Session sendMailSession = Session.getDefaultInstance(pro, authenticator);       // 根據session建立一個郵件訊息       Message mailMessage = new MimeMessage(sendMailSession);       // 建立郵件寄件者地址       Address from = new InternetAddress(pro.getProperty("mail.sender.address"));       // 設定郵件訊息的寄件者       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());       // 設定郵件訊息的主要內容       mailMessage.setText(mailInfo.getContent());       // 發送郵件       Transport.send(mailMessage);       return true;     } catch (MessagingException ex) {       ex.printStackTrace();     }     return false;   }    /**    * @descript:以HTML格式發送郵件    * @param mailInfo: 待發送的郵件的資訊    * @param attachment:附件內容    * @return:發送成功返回true;失敗返回false    */   public static boolean sendHtmlMail(MailSenderInfo mailInfo, String[] attachment) {     // 判斷是否需要身份認證     MyAuthenticator authenticator = null;     Properties pro = mailInfo.getProperties();     try {       // 如果需要身份認證,則建立一個密碼驗證器       if ("true".trim().equals(pro.getProperty("mail.smtp.auth"))) {         // 如果需要身份認證,則建立一個密碼驗證器         authenticator = new MyAuthenticator(pro.getProperty("mail.sender.username"),pro.getProperty("mail.sender.password"));       }       // 根據郵件會話屬性和密碼驗證器構造一個發送郵件的session       Session sendMailSession = Session.getDefaultInstance(pro, authenticator);       // 根據session建立一個郵件訊息       Message mailMessage = new MimeMessage(sendMailSession);       // 建立郵件寄件者地址       Address from = new InternetAddress(pro.getProperty("mail.sender.address"));       // 設定郵件訊息的寄件者       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");       //添加HTML內容的MimeBodyPart       mainPart.addBodyPart(html);       // 添加附件的內容       if (attachment != null) {         for (String filePath : attachment) {           MimeBodyPart filePart = new MimeBodyPart();           DataSource source = new FileDataSource(filePath);           filePart.setDataHandler(new DataHandler(source));           try {             // 網上流傳的解決檔案名稱亂碼的方法,其實用MimeUtility.encodeWord就可以很方便的搞定             filePart.setFileName(MimeUtility.encodeWord(source.getName()));           } catch (UnsupportedEncodingException e) {             e.printStackTrace();           }           mainPart.addBodyPart(filePart);         }       }       // 將MiniMultipart對象設定為郵件內容       mailMessage.setContent(mainPart);       //保持內容       mailMessage.saveChanges();       // 發送郵件       Transport.send(mailMessage);       return true;     } catch (MessagingException ex) {       ex.printStackTrace();     }     return false;   }         /**    * @descript:獲得寄件者方法的異常資訊    * 使用字串作為物理節點的字元輸入輸出資料流的用法,即StringReader和StringWriter的用法    * PrintWriter(Writer out, boolean autoFlush) 建立帶自動行重新整理的新 PrintWriter, true代表能自動重新整理    * @param e 異常資訊    * @return    */   private static String getEmessage(Exception e){       //StringWriter輸出異常資訊     StringWriter sw = new StringWriter();       PrintWriter pw = new PrintWriter(sw, true);       e.printStackTrace(pw);       pw.flush();       sw.flush();       return sw.toString();     }       /**    * @descript:測試    * @param args    */   public static void main(String[] args) {     //測試1:發送郵件以文字格式設定     try {       String s="";       s.substring(2);     } catch (Exception e) {       e.printStackTrace();       System.out.println(getEmessage(e));       sendExceptionMail(new ExceptionInfo( Developer.sanghaiqin.getName(),"get()", "123",e));     }          //測試2:發送郵件以html格式     MailSenderInfo mailInfo = new MailSenderInfo();     mailInfo.setToAddress("1522580013@qq.com");       // 設定接受者郵箱地址     mailInfo.setSubject("標題");      mailInfo.setContent("內容<h1>www.baidu.com</h1>");     String[] files = {"G:/upload/image/2016/10/28/1477372845440.jpg","G:/upload/image/2016/10/28/1477372845660.jpg"};     JavaMail.sendHtmlMail(mailInfo,files); // 發送html格式          System.out.println("發送成功");             }    } 

測試截圖:

測試1:發送郵件以文字格式設定:

測試2:發送郵件以html格式:


項目結構截圖:

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.