淘淘商城40-使用java发送邮件提醒开发人员系统异常

版权声明:本文为博主原创文章,如有转载请注明出处,谢谢。 https://blog.csdn.net/pdsu161530247/article/details/82015557

在web应用中经常需要发送邮件,比如用户找回密码、系统异常时提醒开发人员、提醒用户生日、获取通知用户一些重要消息等等。

1.配置邮箱

1.1开启SMTP

这里以163为例

 

 

1.2开启邮箱授权码

授权码是用于登录第三方邮件客户端的专用密码。不同于邮箱密码,你用java代码发送邮箱时,使用邮箱密码是发不出去的,一定要填写自己在163设置的邮箱授权码。

2.使用java发送邮件

2.1导入依赖

你可以直接导入jar包,我这里使用的maven,直接导入坐标(GAV)让maven帮我下载jar。

<dependency>
	<groupId>com.sun.mail</groupId>
	<artifactId>javax.mail</artifactId>
	<version>1.5.6<version>
</dependency>

2.2使用java发送邮件

有了jar包支撑后,可以调用jmail的api了。

这个代码是在jmail的api上在进行一层封装,只需要将里面的邮箱和授权码换成你自己的,就可使用了。

package com.taotao.search.utils;
 
import java.util.Properties;
 
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 
public class MailUtils {
	
	public static void sendEmail(String email,String subject,String text) throws MessagingException {
			//1.创建一个程序与邮件服务器会话对象 Session
			Properties properties = new Properties();  
	        properties.setProperty("mail.smtp.auth", "true");//设置访问smtp服务器需要认证  
	        properties.setProperty("mail.transport.protocol", "smtp"); //设置访问服务器的协议  
	        Session session = Session.getDefaultInstance(properties);  
	        //session.setDebug(true); //打开debug功能  
	        //2.创建一个Message,它相当于是邮件内容
	        Message msg = new MimeMessage(session);  
	        // 设置发送者
	        msg.setFrom(new InternetAddress("123456798@163.com")); 
	        msg.setSubject(subject); //设置邮件主题  
	        msg.setText(text); //设置邮件内容  
	        //3.发送邮件
	        Transport trans = session.getTransport();  
	        //连接邮箱smtp服务器;25为默认端口;163邮箱;客户端授权密码(注意,不是登录密码)
	        trans.connect("smtp.163.com", 25, "123456798@163.com", "123456798"); 
	        //邮件接收者
	        if(email==null)email="123456798@163.com";
	        trans.sendMessage(msg, new Address[]{new InternetAddress(email)}); //发送邮件  
	        //关闭连接
	        trans.close();  
	}
}

2.3MailUtils测试

我这里是自己发给自己,只需要修改邮件接收者的email即可

邮件发送成功,通过这种方式,可以给别人发送。

3.发送web系统异常给开发人员

在全局异常处理器,增加发送邮件代码

由于邮件发送太慢,所以新增线程发送

//发邮件、发短信
		Runnable runnable =new Runnable() {
			@Override
			public void run() {
				try {
					MailUtils.sendEmail(null,"搜索页面出现异常", StackTrace.getStackTrace(e));
				} catch (AddressException e) {
					e.printStackTrace();
				} catch (MessagingException e) {
					e.printStackTrace();
				}
			}
		};
		Thread thread = new Thread(runnable);
		thread.start();

将抛出的异常堆栈信息转换为字符串,因为邮箱发送的是字符串,而我们无法直接将堆栈信息当成字符串来传,所以就需要转一下,新建工具类StackTrace

package com.taotao.search.utils;
 
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
 
public class StackTrace {
	
	public static String getStackTrace(Throwable throwable) {
	    final Writer result = new StringWriter();
	    final PrintWriter printWriter = new PrintWriter(result);
	    throwable.printStackTrace(printWriter);
	    return result.toString();
	}
}

当系统发送异常,全局异常处理器就会将异常信息通过邮件发送给开发人员

 

没有更多推荐了,返回首页