邮件发送接口
- 定时发送邮件
- 邮件报警
- 程序运行成功/失败通知
- 统计报表发送
输入参数说明 :
参数 | 类型 | 说明 | 例子 |
---|---|---|---|
title | String | 邮件标题 | 邮件测试 |
content | String | 邮件内容 | 该邮件由代码自动发送 |
emails | List《String》 | 邮件接收者 | address@email.com |
> 接收者定义为List意味着可以同时发给多人
代码参数说明 :
| 参数 | 说明 | 例子 |
| :-------- | -------- |
| setHostName | 发送方所在邮件服务器 | 可以在邮箱设置➡️客户端设置找到
例如腾讯企业邮箱是:smtp.exmail.qq.com
阿里云邮箱是:smtp.aliyun.com |
| DefaultAuthenticator |认证用的,分别是用户名和密码|user: address@email.com pasword:xxxxxx|
| setFrom |发送方的邮箱地址| address@email.com |
> 发送方所在邮件服务器的hostName可以在设置中找到,端口一般默认为465
*代码中写的中文等等需要自己去修改
#####HostName及端口 如下图所示
代码块
代码类如下:
public class EmailUtil {
public static void sendEmain(String title, String content, List<String> emails) {
int cnt = 10;
while (true && cnt > 0) {
cnt --;
try {
Email emailS = new SimpleEmail();
emailS.setHostName("smtp.aliyun.com");
emailS.setSmtpPort(465);
emailS.setAuthenticator(new DefaultAuthenticator("发送方", "发送方登录密码"));
emailS.setSSLOnConnect(true);
emailS.setFrom("发送方");
emailS.setSubject(title);
//emailS.setMsg(content);
emailS.setCharset("UTF-8");
emailS.setContent(content, EmailConstants.TEXT_HTML);
for (String e : emails) {
emailS.addTo(e);
}
emailS.send();
break;
} catch (Exception e) {
if (cnt==1) {
sendEmain2(title, content+"<br>*发送方异常,xxx代发", emails);
}
TimeUtil.sleep(5000L);
e.printStackTrace();
}
}
}
/**
* 上边那个可能坏掉,
*/
public static void sendEmain2(String title, String content, List<String> emails) {
int cnt = 10;
while (true && cnt > 0) {
cnt --;
try {
Email emailS = new SimpleEmail();
emailS.setHostName("smtp.exmail.qq.com");
emailS.setSmtpPort(465);
emailS.setAuthenticator(new DefaultAuthenticator("代发者邮箱", "代发者登录密码"));
emailS.setSSLOnConnect(true);
emailS.setFrom("代发者邮箱");
emailS.setSubject(title);
//emailS.setMsg(content);
emailS.setCharset("UTF-8");
emailS.setContent(content, EmailConstants.TEXT_HTML);
for (String e : emails) {
emailS.addTo(e);
}
emailS.send();
break;
} catch (Exception e) {
TimeUtil.sleep(5000L);
e.printStackTrace();
}
}
}
//将内容拼接成表格发送到邮件,一般用于发送统计报表或表格相关内容
public static String getTableHtml(List<String []> m) {
StringBuilder sb = new StringBuilder();
sb.append("<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\" style=\"border:solid #eee\">");
for(String [] a: m) {
sb.append("<tr>");
for(String cell: a) {
sb.append("<td style=\"padding:5px;\">");
sb.append(cell);
sb.append("</td>");
}
sb.append("</tr>");
}
sb.append("</table>");
return sb.toString();
}
}
**注意:**如果邮件报警或某些应用发送邮件太频繁,会导致发送失败,故这里循环10次,有一次发送成功即break,太过异常的即便循环10次也会失败,所以这里做了一个邮件发送的备份sendEmain2()方法。
###使用方法:
//把统计结果直接发送到邮件
List<String> emails = new ArrayList<String>();
List<String[]> list = new ArrayList<String[]>();//邮件内容
//列名自己写,一般都是固定的
list.add(new String[]{"计数器名","计数器值"});
String title = "邮件标题"; //jobName也可以
emails.add("address@email.com");
if (job.waitForCompletion(true)) {
Counters counters = job.getCounters();
CounterGroup gc = counters.getGroup( COUNTER_NAME );
for (Counter counter : gc) {
list.add(new String[]{counter.getName(), counter.getValue()+"" });
System.out.println(counter.getName() + "\t" + counter.getValue()+"");
}
emails.add("xxx@email.com");
EmailUtil.sendEmain(title+"Success", EmailUtil.getTableHtml(list), emails);
} else {
EmailUtil.sendEmain(title+"Failed", EmailUtil.getTableHtml(list), emails);
}
**注意:**这里贴的是一个mapreduce运行结果的判断,运行成功将统计结果邮件发送给别人及自己,如果运行失败,则只发错误报警给自己。
<!--maven工程需要引入如下依赖包-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.4</version>
</dependency>
版权所有 © Copyright AdMaster address@email.com。