一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|

服務(wù)器之家 - 編程語言 - JAVA教程 - java實(shí)現(xiàn)系統(tǒng)捕獲異常發(fā)送郵件案例

java實(shí)現(xiàn)系統(tǒng)捕獲異常發(fā)送郵件案例

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

這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)系統(tǒng)捕獲異常發(fā)送郵件案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在實(shí)際運(yùn)用中,比如你淘寶購物,申請退款,這時(shí)你在郵箱中看到退款郵件,或者你注冊某個(gè)賬號,申請驗(yàn)證郵箱通知等等,這些都是郵件發(fā)送,這里將介紹下系統(tǒng)捕獲異常發(fā)送郵件案例。

準(zhǔn)備工作:
eclipse4.5 64位
jdk1.7 64位

郵件發(fā)送所需jar:

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

類Developer:

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

?
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:枚舉類型,發(fā)送郵件人姓名和郵箱地址
 *@date:2016年10月26日 下午8:07:50
 *@author sanghaiqin
 *@version:V1.0
 */
public enum Developer {
  zhoujing("周靜","[email protected]"),
  peiyuxiang("裴玉翔","[email protected]"),
  yipeng("乙鵬","[email protected]"),
  liuan("劉安","[email protected]"),
  chenyuhao("陳宇豪","[email protected]"),
  wangdong("王棟","[email protected]"),
  sanghaiqin("桑海芹","[email protected]");
   
  //發(fā)件人姓名
  private String name;
  //發(fā)件人email
  private String mail;
   
  private Developer() {
     
  }
   
  private Developer(String name, String mail) {
    this.name = name;
    this.mail = mail;
  }
   
  /**
   * @descript:傳遞發(fā)件人姓名得到該發(fā)件人的郵箱
   * @param name 發(fā)件人姓名
   * @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:發(fā)件人信息

?
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:發(fā)件人信息
 *@date:2016年10月26日 下午8:11:27
 *@author sanghaiqin
 *@version:V1.0
 */
public class ExceptionInfo {
 
  //發(fā)件人姓名
  private String developer;
  //發(fā)件人方法
  private String method;
  //發(fā)件人url
  private String url;
  //發(fā)件人捕獲異常信息
  private Exception e;
   
  /**
   * @param developer 發(fā)件人姓名
   * @param method 發(fā)件人方法
   * @param url 發(fā)件人url
   * @param e 發(fā)件人捕獲異常信息
   */
  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:發(fā)送郵箱信息

?
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:發(fā)送郵箱信息
 *@date:2016年10月26日 下午8:14:22
 *@author sanghaiqin
 *@version:V1.0
 */
public class MailSenderInfo {
  //發(fā)送郵件的服務(wù)器的IP
  private String mailServerHost;
  //發(fā)送郵件的服務(wù)器的端口默認(rèn)為25
  private String mailServerPort = "25";
  // 郵件發(fā)送者的地址
  private String fromAddress;
  // 郵件接收者的地址
  private String toAddress;
  // 登陸郵件發(fā)送服務(wù)器的用戶名
  private String username;
  // 登陸郵件發(fā)送服務(wù)器的密碼
  private String password;
  // 是否需要身份驗(yàn)證
  private boolean validate = false;
  // 郵件主題
  private String subject;
  // 郵件的文本內(nèi)容
  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:用戶驗(yàn)證

?
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:用戶驗(yàn)證
 *@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得到一個(gè)資源文件
    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("郵件發(fā)送者用戶名:"+mailSenderUsername);//[email protected]
    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
#-------------------郵件功能------------------
#----------------這兩個(gè)是構(gòu)建session必須的字段----------
#smtp服務(wù)器,構(gòu)建session回話必須的字段
mail.smtp.host=smtp.163.com
#身份驗(yàn)證,構(gòu)建session回話必須的字段
mail.smtp.auth=true
#--------------------------------------------------------------
#發(fā)送者的郵箱用戶名
#發(fā)送者的郵箱密碼
mail.sender.password=827623LIU
#發(fā)送者的郵箱地址

類JavaMail:發(fā)送郵箱

?
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:發(fā)送信息郵箱
 *所需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 {
      //通過發(fā)送者獲得發(fā)送者郵箱
      String mail = Developer.getMail(info.getDeveloper());
      if(mail!=null){
        MailSenderInfo mailInfo = new MailSenderInfo();
        //設(shè)置郵件的文本內(nèi)容
        mailInfo.setContent("負(fù)責(zé)人 : "+info.getDeveloper()+"==>服務(wù)器 ip:"+InetAddress.getLocalHost().getHostAddress()+"==>方法名: "+info.getMethod()+"==>地址:"+info.getUrl()+"==>異常信息: "+getEmessage(info.getE()));
        //設(shè)置郵件接收者的地址
        mailInfo.setToAddress(mail);
        //郵件主題
        mailInfo.setSubject("易卡愛途異常通知");
        //發(fā)送郵件
        sendTextMail(mailInfo);
      }
    } catch (UnknownHostException e) {
      e.printStackTrace();
    }
  }
   
  /**
   * @descript:以文本格式發(fā)送郵件
   * @param: mailInfo 待發(fā)送的郵件的信息
   * @return: 發(fā)送成功返回true;失敗返回false
   */
  public static boolean sendTextMail(MailSenderInfo mailInfo) {
    // 判斷是否需要身份認(rèn)證
    MyAuthenticator authenticator = null;
    Properties pro = mailInfo.getProperties();
    try
      if ("true".trim().equals(pro.getProperty("mail.smtp.auth"))) {
        // 如果需要身份認(rèn)證,則創(chuàng)建一個(gè)密碼驗(yàn)證器
        authenticator = new MyAuthenticator(pro.getProperty("mail.sender.username"),pro.getProperty("mail.sender.password"));
      }
      // 根據(jù)郵件會話屬性和密碼驗(yàn)證器構(gòu)造一個(gè)發(fā)送郵件的session
      Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
      // 根據(jù)session創(chuàng)建一個(gè)郵件消息
      Message mailMessage = new MimeMessage(sendMailSession);
      // 創(chuàng)建郵件發(fā)送者地址
      Address from = new InternetAddress(pro.getProperty("mail.sender.address"));
      // 設(shè)置郵件消息的發(fā)送者
      mailMessage.setFrom(from);
      // 創(chuàng)建郵件的接收者地址,并設(shè)置到郵件消息中
      Address to = new InternetAddress(mailInfo.getToAddress());
      // Message.RecipientType.TO屬性表示接收者的類型為TO
      mailMessage.setRecipient(Message.RecipientType.TO, to);
      // 設(shè)置郵件消息的主題
      mailMessage.setSubject(mailInfo.getSubject());
      // 設(shè)置郵件消息發(fā)送的時(shí)間
      mailMessage.setSentDate(new Date());
      // 設(shè)置郵件消息的主要內(nèi)容
      mailMessage.setText(mailInfo.getContent());
      // 發(fā)送郵件
      Transport.send(mailMessage);
      return true;
    } catch (MessagingException ex) {
      ex.printStackTrace();
    }
    return false;
  }
 
  /**
   * @descript:以HTML格式發(fā)送郵件
   * @param mailInfo: 待發(fā)送的郵件的信息
   * @param attachment:附件內(nèi)容
   * @return:發(fā)送成功返回true;失敗返回false
   */
  public static boolean sendHtmlMail(MailSenderInfo mailInfo, String[] attachment) {
    // 判斷是否需要身份認(rèn)證
    MyAuthenticator authenticator = null;
    Properties pro = mailInfo.getProperties();
    try {
      // 如果需要身份認(rèn)證,則創(chuàng)建一個(gè)密碼驗(yàn)證器
      if ("true".trim().equals(pro.getProperty("mail.smtp.auth"))) {
        // 如果需要身份認(rèn)證,則創(chuàng)建一個(gè)密碼驗(yàn)證器
        authenticator = new MyAuthenticator(pro.getProperty("mail.sender.username"),pro.getProperty("mail.sender.password"));
      }
      // 根據(jù)郵件會話屬性和密碼驗(yàn)證器構(gòu)造一個(gè)發(fā)送郵件的session
      Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
      // 根據(jù)session創(chuàng)建一個(gè)郵件消息
      Message mailMessage = new MimeMessage(sendMailSession);
      // 創(chuàng)建郵件發(fā)送者地址
      Address from = new InternetAddress(pro.getProperty("mail.sender.address"));
      // 設(shè)置郵件消息的發(fā)送者
      mailMessage.setFrom(from);
      // 創(chuàng)建郵件的接收者地址,并設(shè)置到郵件消息中
      Address to = new InternetAddress(mailInfo.getToAddress());
      // Message.RecipientType.TO屬性表示接收者的類型為TO
      mailMessage.setRecipient(Message.RecipientType.TO, to);
      // 設(shè)置郵件消息的主題
      mailMessage.setSubject(mailInfo.getSubject());
      // 設(shè)置郵件消息發(fā)送的時(shí)間
      mailMessage.setSentDate(new Date());
      // MiniMultipart類是一個(gè)容器類,包含MimeBodyPart類型的對象
      Multipart mainPart = new MimeMultipart();
      // 創(chuàng)建一個(gè)包含HTML內(nèi)容的MimeBodyPart
      BodyPart html = new MimeBodyPart();
      // 設(shè)置HTML內(nèi)容
      html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
      //添加HTML內(nèi)容的MimeBodyPart
      mainPart.addBodyPart(html);
      // 添加附件的內(nèi)容
      if (attachment != null) {
        for (String filePath : attachment) {
          MimeBodyPart filePart = new MimeBodyPart();
          DataSource source = new FileDataSource(filePath);
          filePart.setDataHandler(new DataHandler(source));
          try {
            // 網(wǎng)上流傳的解決文件名亂碼的方法,其實(shí)用MimeUtility.encodeWord就可以很方便的搞定
            filePart.setFileName(MimeUtility.encodeWord(source.getName()));
          } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
          }
          mainPart.addBodyPart(filePart);
        }
      }
      // 將MiniMultipart對象設(shè)置為郵件內(nèi)容
      mailMessage.setContent(mainPart);
      //保持內(nèi)容
      mailMessage.saveChanges();
      // 發(fā)送郵件
      Transport.send(mailMessage);
      return true;
    } catch (MessagingException ex) {
      ex.printStackTrace();
    }
    return false;
  }
   
   
  /**
   * @descript:獲得發(fā)送者方法的異常信息
   * 使用字符串作為物理節(jié)點(diǎn)的字符輸入輸出流的用法,即StringReader和StringWriter的用法
   * PrintWriter(Writer out, boolean autoFlush) 創(chuàng)建帶自動行刷新的新 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:發(fā)送郵件以文本格式
    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:發(fā)送郵件以html格式
    MailSenderInfo mailInfo = new MailSenderInfo();
    mailInfo.setToAddress("[email protected]");       // 設(shè)置接受者郵箱地址
    mailInfo.setSubject("標(biāo)題"); 
    mailInfo.setContent("內(nèi)容<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); // 發(fā)送html格式
     
    System.out.println("發(fā)送成功");
     
     
  }
   
}

測試截圖:

測試1:發(fā)送郵件以文本格式:

java實(shí)現(xiàn)系統(tǒng)捕獲異常發(fā)送郵件案例

測試2:發(fā)送郵件以html格式:

java實(shí)現(xiàn)系統(tǒng)捕獲異常發(fā)送郵件案例

項(xiàng)目結(jié)構(gòu)截圖:

java實(shí)現(xiàn)系統(tǒng)捕獲異常發(fā)送郵件案例

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 人成午夜免费大片在线观看 | 麻豆小视频在线观看 | 亚洲人成影院午夜网站 | 欧洲男同直粗无套播放视频 | 99久久免费国产香蕉麻豆 | 亚州在线播放 | 激情三级做爰在线观看激情 | 探花国产 | 美女用手扒开粉嫩的屁股 | 日本-区二区三区免费精品 日本破处 | 亚洲精品国产自在现线最新 | 国产午夜精品理论片 | 免费观看视频网站 | 91制片厂制作果冻传媒2021 | 亚久久伊人精品青青草原2020 | 国产欧美成人不卡视频 | 精品人人视屏 | 久久re6热在线视频 久久AV喷吹AV高潮欧美 | 调教女帝 | 国产在线观看99 | 久久久久九九 | 99国内精品 | 好吊色视频988gao在线观看 | 国产精品va在线观看不 | 蜜桃麻豆| 日韩一品在线播放视频一品免费 | 亚洲欧美久久久久久久久久爽网站 | 色综合合久久天天综合绕视看 | 国产精品日韩欧美一区二区 | 亚洲国产在线视频精品 | 无遮挡激情 | 精品亚洲永久免费精品 | 国产美女亚洲精品久久久久久 | 99最新网址 | 日韩欧美精品一区二区 | 美国69xxxx59| 精品国产福利一区二区在线 | 亚洲国产成人超福利久久精品 | xxy中国厕所| 欧美一级免费看 | 色一情|