在生活中,我们在编写 java 代码时,一般都会 try...catch 包裹住可能会出现异常的代码块。但如果在一个java项目过大,同时又出现了bug时,这很不利于我们来查错。
所以我们就可以使用邮件,可以自己写一个邮件工具类,使用 try...catch 处理时,就可以使用邮件类每次发现问题时,向指定的邮箱发送一封邮件。
邮件工具类除了以上的用法,我们也可以自己写个QQ邮件群发。
首先是需要把邮件工具类给写出来:
这里使用IDEA,首先创建一个 Maven 项目:
然后,就会出现一个工程目录。找到 pom.xml 这个文件,打开它,并在其中添加一段代码:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>e-mailSystem</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<!--添加下面这段代码-->
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.5</version>
</dependency>
</dependencies>
</project>
当代码添加完成之后,就可以编写自己的邮件发送工具类了。
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
/**
* 自定义发送邮件工具类
*/
public class SendMailTools {
/**
*
* @param toUser 收件邮箱
* @param fromUser 发件邮箱
* @param fromUserPassWord 发件邮箱的POP3/SMTP服务密码
* @param theme 邮件主题
* @param content 邮件内容
* @return 返回一个提示,是否发送成功(true/false)
*/
public static boolean sendMail(String toUser, String fromUser,
String fromUserPassWord, String theme,
String content){
//实例化邮件资源
SimpleEmail email = new SimpleEmail();
//设置qq邮件服务器的端口号
email.setSslSmtpPort("465");
//使用QQ邮箱的固定写法
email.setHostName("smtp.qq.com");
//设置发件人的账户和POP3/SMTP服务密码
email.setAuthentication(fromUser, fromUserPassWord);
//编码方式
email.setCharset("UTF-8");
try {
//收件人
email.addTo(toUser);
//发件人
email.setFrom(fromUser);
//邮件主题
email.setSubject(theme);
//邮件内容
email.setMsg(content);
//发送
email.send();
return true;
} catch (EmailException e) {
e.printStackTrace();
return false;
}
}
}
最后就是测试使用我们这个邮件工具类了。
import java.io.BufferedReader;
import java.io.FileReader;
/**
* 使用自定义邮件发送工具类实现群发消息
*/
public class Test {
public static void main(String[] args) {
String toFrom = "xxxxxxxxxx@qq.com"; //发件人
String toFromPassWord = "xxxxxxxxxxxxxxxx"; //发件人邮箱POP3/SMTP服务密码
String theme = "这是一封测试邮件"; //邮件主题
String content = "hello word!~~~"; //邮件具体内容
try(
FileReader fs = new FileReader("toUser.txt");//字符流,默认当前项目下的文本文件
BufferedReader br = new BufferedReader(fs); //字符装饰流
){
String ret = null;
//循环读取,每次读一行
while((ret = br.readLine())!=null){
//发送成功提示一下
if(SendMailTools.sendMail(ret,toFrom,toFromPassWord,theme,content)){
System.out.println("发送成功》》》");
}else{
System.out.println("失败!!!");
}
}
}catch (Exception e){
e.printStackTrace();
}
}
}
这里我使用的是从一个 txt 文本文件中读取收件人的邮箱,然后发送。发件人则是固定的。大家在写这个代码时,有兴趣的可以将发件人也使用文件的方式读取,更可以将主题和内容也使用文件读取后发送。
程序运行结果:
注意:由于我们这里使用的是QQ邮箱的服务区,所以在同一时间这里可能发送成功了,但是收件人有的可能会收不到,而想要避免这个Bug,两个方法:
1.在同一时间内发送邮件的数量尽量减少
2.使用自己的服务器或者是第三方的服务器