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

服務(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ù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: ssni-497新任美脚女教师 | 操小女人 | 男人和女人日 | 亚洲日本久久一区二区va | 欧美艳星kagneyiynn | 18国产精品白浆在线观看免费 | 被强迫变性翘秘书 | 日韩一级片免费观看 | 农夫69小说小雨与农村老太 | 激情影院费观看 | 国产亚洲女人久久久久久 | 日本免费一区二区三区四区五六区 | 亚洲春色综合另类网蜜桃 | 99re这里只有精品视频在线观看 | 4438全国最大免费观看 | www四虎影院 | 男生和老师一起差差差 | 亚洲日韩欧美一区二区在线 | 99爱免费 | 久久精品观看影院2828 | 99视频九九精品视频在线观看 | 成人啪啪漫画全文阅读 | 亚洲区精品久久一区二区三区 | 无限在线观看免费入口 | 91理论片午午伦夜理片久久 | 满溢游泳池免费 | 特级老女人淫片高清视频 | 午夜私人影院在线观看 视频 | 亚洲成人网在线 | 欧美a级v片不卡在线观看 | 海角社区在线视频 | 暖暖 免费 高清 中文 日本 | 国产高清经典露脸3p | 秋霞一级成人欧美理论 | 国产一区二区视频免费 | 亚洲精品国产精品国自产观看 | 范冰冰a级一级特级毛片 | 免费网站看v片在线香蕉 | 毛片应用 | 日本激情小说 | 2021国产精品成人免费视频 |