java实现系统捕获异常发送邮件案例
程序员文章站
2024-03-12 16:42:38
在实际运用中,比如你淘宝购物,申请退款,这时你在邮箱中看到退款邮件,或者你注册某个账号,申请验证邮箱通知等等,这些都是邮件发送,这里将介绍下系统捕获异常发送邮件案例。...
在实际运用中,比如你淘宝购物,申请退款,这时你在邮箱中看到退款邮件,或者你注册某个账号,申请验证邮箱通知等等,这些都是邮件发送,这里将介绍下系统捕获异常发送邮件案例。
准备工作:
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格式:
项目结构截图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
下一篇: 20200724Java多态练习