国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|

服務器之家 - 編程語言 - JAVA教程 - java實現系統捕獲異常發送郵件案例

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

2020-06-30 11:03薔薇玫瑰 JAVA教程

這篇文章主要為大家詳細介紹了java實現系統捕獲異常發送郵件案例,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

郵件發送所需jar:

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

類Developer:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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:發件人信息

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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:發送郵箱信息

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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:用戶驗證

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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文件工具類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#-------------------郵件功能------------------
#----------------這兩個是構建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:發送郵箱

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
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:發送郵件以文本格式:

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

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

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

項目結構截圖:

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费黄色在线 | 天堂网中文在线 | 午夜视频网 | 国产日韩一区二区三区 | 久久香蕉国产 | 亚洲人成在线播放 | 狠狠爱天天操 | 亚洲一区二区在线 | 成人免费观看视频 | 国产精品观看 | 97国产精品久久久 | 中文日韩在线 | 日韩有码一区二区三区 | 久久精品亚洲精品 | 久久精品国产免费 | 久久精品日产第一区二区三区 | 欧美亚洲| 一区二区在线看 | 亚洲国产精品99久久久久久久久 | 91免费在线视频 | 成人黄色电影小说 | 久久国产精品一区二区 | 日韩免费av一区二区 | 无码一区二区三区视频 | 99福利视频 | 亚洲精品国产综合99久久夜夜嗨 | 亚洲欧美中文字幕 | 毛片网页 | 欧美国产在线观看 | 国产成人一区二区 | 久久婷婷av | 黄色精品在线 | 自拍第1页 | 久久国产精品久久久久久电车 | 亚洲色综合 | 韩日精品一区 | 九九99九九 | 欧美日韩激情一区 | 天堂免费在线 | 九九精品视频在线观看 | 欧美在线一区二区 |