JAVAEMAIL发送邮件参数可配置,模板可配置
**发送邮件实现的代码和配置⽂件的加载,统⼀将邮件相关的配置置于配置⽂件中,增强⼯具类的适应性。
闲来⽆事,⾃⼰写了⼀个⼯具类,发送邮件使⽤⾃定义的模板,配置⽂件采⽤了 xml 和 properties ⽂件,并且采⽤ JSSE 的 SSL
socketfactory 来取代默认的 socketfactory。**
相关 jar 包:
*①:commons-lang-2.4.jar
②:jdom.jar
③:mail.jar
*整个的参数处理,配置⽂件加载,详见代码即其中的注释:
邮件模板:del**
[lqs-##] [lqs-##],此为注释 --- 此为实例模板,图⽚ logo 替换规则 cid:logo , 正⽂替换格式${xxx},在调⽤的时候⾃定义替换其中的内容 2017年3⽉28⽇18:27:07 <div id="mainmail">
<div class="body"id="contentDiv"qm_con_body">
<div class="emailbox"lucida Grande", Verdana
<table align="center"border="0"cellspacing="0"cellpadding="0">
<tr>
<td align="left"valign="top">
<table width="500"border="0"cellspacing="0"cellpadding="0">
<tr>
<td align="left"valign="top"><img width="127"height="28"src="cid:taizi_logo.png"border="0"></td>
<td align="right"valign="top"></td>
新东方英语培训视频[lqs-##]<td align="right"valign="top"><img width="328"height="44"src="cid:right_logo"border="0"></td>
<td align="right"valign="top"> </td>
</tr>
<tr>
<td colspan="2"><img width="500"height="1"src="cid:email_line"border="0"></td>
</tr>
genius什么意思<tr height="24">
<td height="24"colspan="2">
</tr>
<tr>
<td colspan ${content}
</td>
</tr>
<tr height="24">
<td height="24"colspan="2">
</tr>
<tr>
<td colspan="2"><img width="500"height="1"src="cid:email_line"border="0"></td>
</tr>
<tr height="36">
<td height="24"colspan="2">
</tr>
<tr>电影推荐
<td class="message"colspan=
<a href="ur./1194895584"target="_blank">T a i z i</a><br><br>获取常见问题的解答,请咨询T a i z i
<a href="ur./1194895584"target="_blank">ur./1194895584</a>
</td>
</tr>
</table>
</td>
</tr>
<tr height="75">
<td height="75">
</tr>
<tr>
<td>
<table align="center">
<tr>
millo
<td width="500"align="center"class="message"ur./1194895584"target="_blank">T a i z i</a><br><br></td>
</tr>
<tr>
<td width="500"align="center"class="message"ur./1194895584"target="_blank">ur./1194895584</a><br
</tr>
blackhole<tr>
<td width="500"align="center"class="disclaimer"ur./1194895584"target="_blank">保留所有权利</a>
</td>
inventory是什么意思
</tr>
</table>
</td>
</tr>
</table><br><br><img src="cid:email_spacer"></div>
</div>
</div>
</div>
使⽤ email.properties 配置:
## 尝试使⽤AUTH命令认证⽤户
mail.smtp.auth=true
## 服务协议
## 邮件服务器
mail.smtp.host=
## 使⽤ JSSE 的 SSL socketfactory 来取代默认的 socketfactory
mail.smtp.socketFactory.ssl.SSLSocketFactory
## fal:只处理 SSL 的连接,对于⾮ SSL 的连接不做处理. true:处理 SSL 和⾮ SSL 的连接
mail.smtp.socketFactory.fallback=fal
## 端⼝号
## mail.smtp.port=25
mail.smtp.port=465
## 服务邮箱
urname=xxx
## 邮箱密码
password=xxx
## 发送⼈名称
nderNick=T a i z i
## logUrl 请以逗号分隔,且除去后缀后的名称和模板中的名称⼀致,不⼀致则不会替换,
## 会出现 tcmime.9162.9263.10034.bin 此类型的附件,凡是有图⽚参数的,请在模板设置对应的替换字段 cid:name
logoUrl=taizi_logo.png,email_line.gif,email_spacer.gif
其中读取⽂件代码及加载到 JAVA MAIL 的 ssion 中:
public EmailUtils(){
pro = new Properties();
try {
if(!fileIsTrue(filePath)){
System.out.println("配置⽂件不存在");
return;
}
in = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "UTF-8"));
if(in == null) return;
pro.load(in);//加载配置⽂件
in.clo();//关闭流
} catch (FileNotFoundException e) {
System.out.println("⽂件不存在:"+e.toString());
} catch (IOException e) {
System.out.println("IO 流关闭异常:"+e.toString());
} finally {
if(in != null){
try {
in.clo();//关闭流
} catch (IOException e) {
System.out.println("IO 流关闭异常:"+e.toString());
}
}
}
/*MailSSLSocketFactory msf = null;//SSL 加密
try {
msf = new MailSSLSocketFactory();
msf.tTrustAllHosts(true);
} catch (GeneralSecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pro.put("mail.smtp.ssl.socketFactory",msf);*/
//尝试使⽤AUTH命令认证⽤户
auth = Property("mail.smtp.auth").toString();
//装载服务协议、服务器
protocol = Property("ansport.protocol").toString();
host = Property("mail.smtp.host").toString();
//装载发件⼈昵称
nderNick = Property("nderNick").toString();
//装载服务邮箱和密码
urname = Property("urname").toString();
password = Property("password").toString();
//装载 logo 图标路径
logoUrl = Property("logoUrl").toString();
/
/建⽴会话
ssion = DefaultInstance(pro);
ssion.tDebug(true);
}
使⽤ XML 配置:
<?xml version="1.0" encoding="UTF-8"?>
<Email>
<!--
## 尝试使⽤AUTH命令认证⽤户
mail.smtp.auth=true
## 服务协议
## 邮件服务器
mail.smtp.host=
fiction是什么意思## 使⽤ JSSE 的 SSL socketfactory 来取代默认的 socketfactory
mail.smtp.socketFactory.ssl.SSLSocketFactory
## fal:只处理 SSL 的连接,对于⾮ SSL 的连接不做处理. true:处理 SSL 和⾮ SSL 的连接
mail.smtp.socketFactory.fallback=true
## 端⼝号
## mail.smtp.port=25 ⾮加密
mail.smtp.port=465加密
## 服务邮箱
urname=xxx
## 邮箱密码
password=xxx
## 发送⼈名称
nderNick=T a i z i
## logUrl 请以逗号分隔,且除去后缀后的名称和模板中的名称⼀致,不⼀致则不会替换,
## 会出现 tcmime.9162.9263.10034.bin 此类型的附件,凡是有图⽚参数的,请在模板设置对应的替换字段 cid:name logoUrl=logo_apple.png,right_logo.gif,email_line.gif,email_spacer.gif
-->
<package mail.smtp.auth="true" ansport.protocol="smtp"
mail.smtp.host="" mail.smtp.port="465" mail.smtp.socketFactory.class="ssl.SSLSocketFactory"
mail.smtp.socketFactory.fallback="fal" urname="xxx" password="xxx" nderNick="T a i z i"
logoUrl="taizi_logo.png,email_line.gif,email_spacer.gif"></package>
</Email>
加载 XML 中的配置进 Session:
public EmailUtils(){
pro = new Properties();
SAXBuilder builder = new SAXBuilder(fal);
Document doc = new Document();//解析XML配置⽂件
try {
doc = builder.build(filePath);
//获取根元素<package>
root = (RootElement().getChildren().get(0);
//尝试使⽤AUTH命令认证⽤户
auth = AttributeValue("mail.smtp.auth");
//装载服务协议、服务器
protocol = AttributeValue("ansport.protocol");
host = AttributeValue("mail.smtp.host");
//装载端⼝
port = AttributeValue("mail.smtp.port");
//使⽤ JSSE 的 SSL socketfactory 来取代默认的 socketfactory
socketFactoryclass = AttributeValue("mail.smtp.socketFactory.class");
//fal:只处理 SSL 的连接,对于⾮ SSL 的连接不做处理. true:处理 SSL 和⾮ SSL 的连接
socketFactoryfallback = AttributeValue("mail.smtp.socketFactory.fallback");
//装载服务邮箱和密码
urname = AttributeValue("urname");
password = AttributeValue("password");
//装载发件⼈昵称
nderNick = AttributeValue("nderNick");
//装载 logo 图标
logoUrl = AttributeValue("logoUrl");
} catch (JDOMException e) {
System.out.println("JDOMException 异常:"+e.toString());i like it like that
} catch (IOException e) {
System.out.println("IO 异常:"+e.toString());
}
/*~采⽤JSSE SSL 加密代替 SSL 加密~*/
/*MailSSLSocketFactory msf = null;//SSL 加密
try {少儿英语1对1外教
msf = new MailSSLSocketFactory();
msf.tTrustAllHosts(true);
} catch (GeneralSecurityException e) {
System.out.println("GeneralSecurityException 异常:"+e.toString());
}
pro.put("mail.smtp.ssl.socketFactory",msf);*/
pro.put("mail.smtp.auth", auth);//auth 认证
pro.put("ansport.protocol", protocol);//协议
pro.put("mail.smtp.host", host);//服务器
pro.put("mail.smtp.port", port);//端⼝
pro.put("mail.smtp.socketFactory.class", socketFactoryclass);//加密⽅式 JSSE SSL
pro.put("mail.smtp.socketFactory.fallback", socketFactoryfallback);//是否同时处理⾮加密连接
pro.put("urname", urname);//发送邮箱
钱正英
pro.put("password", password);//密码
//建⽴会话
ssion = DefaultInstance(pro);
ssion.tDebug(fal);
}
配置⽂件加载进 Session 中之后,就可以开始发送邮件了,可以直接在main ⽅法中测试,前提是先配置好邮箱服务器,配制⽅法详见百度,x相关的变量,请⾃⾏增加或者下载附件
详见代码:
static{
rpath = getRealPath();//src ⽬录
filePath = rpath+PROPERTIESNAME;//配置⽂件路径
}
/**
*