JAVA邮件发送

本文介绍了一种利用Java实现的邮件发送方法,包括定时发送、报警通知、运行状态报告等功能。通过示例代码展示了如何配置邮件服务器、设置邮件内容及收件人列表,并提供了异常处理策略。

邮件发送接口

  1. 定时发送邮件
  2. 邮件报警
  3. 程序运行成功/失败通知
  4. 统计报表发送

输入参数说明 :

参数类型说明例子
titleString邮件标题邮件测试
contentString邮件内容该邮件由代码自动发送
emailsList《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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值