1.封装邮件接收地址MODEL和邮件信息MODEL
package com.sicdt.jnzxgzc.common.mail.model;
import java.io.Serializable;
/**
*
* <br>类 名: MailAddress
* <br>描 述: InternetAddress的封装类
* <br>作 者: shizhenwei
* <br>创 建: 2017年8月4日
* <br>版 本: v1.0.0
* <br>
* <br>历 史: (版本) 作者 时间 注释
*/
public class MailAddress implements Serializable{
/** **/
private static final long serialVersionUID = -2636919632818478505L;
private String address;//邮箱地址
private String personal;//邮箱显示名称
public MailAddress() {
}
public MailAddress(String address) {
this.address = address;
}
public MailAddress(String address, String personal) {
this.address = address;
this.personal = personal;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPersonal() {
return personal;
}
public void setPersonal(String personal) {
this.personal = personal;
}
@Override
public String toString() {
return "AddressModel{" + "address='" + address + '\'' + ", personal='" + personal + '\'' + '}';
}
}
package com.sicdt.jnzxgzc.common.mail.model;
import java.io.Serializable;
import java.util.Arrays;
/**
*
* <br>类 名: MailMessage
* <br>描 述: 邮寄信息类
* <br>作 者: shizhenwei
* <br>创 建: 2017年8月4日
* <br>版 本: v1.0.0
* <br>
* <br>历 史: (版本) 作者 时间 注释
*/
public class MailMessage implements Serializable {
/** **/
private static final long serialVersionUID = 1269256094401416828L;
private String subject;//主题
private String htmlText;//内容
private String charset;//编码集
private MailAddress[] to;//收件人地址
private MailAddress[] cc;//抄送人地址
private MailAddress[] bcc;//暗送人地址
private MailAddress from;//发件人地址
private MailAddress replyTo;//回复发件人地址
public MailMessage() {}
public MailMessage(String subject,String plainText, String htmlText,String charset,boolean multipart,
MailAddress[] to, MailAddress[] cc,MailAddress[] bcc,MailAddress from,MailAddress replyTo) {
this.subject = subject;
this.htmlText = htmlText;
this.charset = charset;
this.to = to;
this.cc = cc;
this.bcc = bcc;
this.from = from;
this.replyTo = replyTo;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getHtmlText() {
return htmlText;
}
public void setHtmlText(String htmlText) {
this.htmlText = htmlText;
}
public String getCharset() {
return charset;
}
public void setCharset(String charset) {
this.charset = charset;
}
public MailAddress[] getTo() {
return to;
}
public void setTo(MailAddress[] to) {
this.to = to;
}
public MailAddress[] getCc() {
return cc;
}
public void setCc(MailAddress[] cc) {
this.cc = cc;
}
public MailAddress[] getBcc() {
return bcc;
}
public void setBcc(MailAddress[] bcc) {
this.bcc = bcc;
}
public MailAddress getFrom() {
return from;
}
public void setFrom(MailAddress from) {
this.from = from;
}
public MailAddress getReplyTo() {
return replyTo;
}
public void setReplyTo(MailAddress replyTo) {
this.replyTo = replyTo;
}
@Override
public String toString() {
return "MailModel{" +
"subject='" + subject + '\'' +
", htmlText='" + htmlText + '\'' +
", charset='" + charset + '\'' +
", to=" + Arrays.toString(to) +
", cc=" + Arrays.toString(cc) +
", bcc=" + Arrays.toString(bcc) +
", from=" + from +
", replyTo=" + replyTo +
"} ";
}
}
2.邮件转换工具类(这一步可能会觉得多余,我只能讲为了以后升级扩展吧)
package com.sicdt.jnzxgzc.common.mail.util;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import javax.mail.internet.InternetAddress;
import org.apache.commons.lang3.ArrayUtils;
import com.sicdt.jnzxgzc.common.mail.model.MailAddress;
/**
*
* <br>类 名: EmailConvert
* <br>描 述: 邮件信息转换类
* <br>作 者: shizhenwei
* <br>创 建: 2017年8月4日
* <br>版 本: v1.0.0
* <br>
* <br>历 史: (版本) 作者 时间 注释
*/
public class EmailConvert {
public static InternetAddress[] convert(MailAddress[] ams) throws UnsupportedEncodingException{
if(ArrayUtils.isEmpty(ams)) {
return new InternetAddress[0];
}
List<InternetAddress> ial = new ArrayList<>();
for(MailAddress am : ams){
ial.add(convert(am));
}
return ial.toArray(new InternetAddress[0]);
}
public static InternetAddress convert(MailAddress am) throws UnsupportedEncodingException{
if(am == null) {
return new InternetAddress();
}
return new InternetAddress(am.getAddress(), am.getPersonal());
}
}
3.邮件发送工具
package com.sicdt.jnzxgzc.common.mail.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.apache.commons.lang3.ArrayUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.MimeMessageHelper;
import com.alibaba.druid.util.StringUtils;
import com.sicdt.jnzxgzc.common.mail.model.MailAddress;
import com.sicdt.jnzxgzc.common.mail.model.MailMessage;
/**
*
* <br>类 名: MailUtils
* <br>描 述: 邮件发送UTILS
* <br>作 者: shizhenwei
* <br>创 建: 2017年8月4日
* <br>版 本: v1.0.0
* <br>
* <br>历 史: (版本) 作者 时间 注释
*/
public class MailUtils {
private static final Logger LOG = LoggerFactory.getLogger(MailUtils.class);
static{
InputStreamReader in;
Properties prop = new Properties();
try {
in = new InputStreamReader(MailUtils.class.getClassLoader().getResourceAsStream("config.properties"),"UTF-8");
prop.load(in);
} catch (IOException e) {
e.printStackTrace();
}
host=prop.getProperty("mail.smtp.host");
username=prop.getProperty("mail.sender.username");
password=prop.getProperty("mail.sender.password");
timeout=prop.getProperty("mail.smtp.timeout");
username_dispaly = prop.getProperty("mail.sender.username_dispaly");
subject = prop.getProperty("mail.sender.subject");
}
public static String host;
public static String username;
public static String username_dispaly;
public static String password;
public static String timeout;
public static String subject;
public static void main(String[] args) throws MessagingException, IOException {
MailMessage message = new MailMessage();
/**
* 收件人
*/
MailAddress t1 = new MailAddress("389262566@qq.com");
MailAddress t2 = new MailAddress("954496177@qq.com");
message.setTo(new MailAddress[]{t1,t2});
/**
* 回复人
*/
message.setReplyTo(t1);
/**
* 消息内容
*/
message.setHtmlText(readEmailTemplate("mail/mail_template_zwlxhsh.ts"));
sendMail(message,true);
}
public static Session createSession() throws IOException{
Properties mailprop=new Properties();
mailprop.put("mail.host",host);
mailprop.put("mail.transport.protocol", "smtp");
mailprop.put("mail.smtp.auth", true);
//使用java发送邮件5步骤
//1.创建sesssion
Session session=Session.getInstance(mailprop);
//开启session的调试模式,可以查看当前邮件发送状态
session.setDebug(true);
return session;
}
public static Transport createTransport(Session session) throws MessagingException{
//2.通过session获取Transport对象(发送邮件的核心API)
Transport ts=session.getTransport();
//3.通过邮件用户名密码链接
ts.connect(username, password);
return ts;
}
public static MimeMessage createMimeMessage(Session session) throws AddressException,MessagingException{
//创建邮件对象
MimeMessage mm=new MimeMessage(session);
//设置发件人
mm.setFrom(new InternetAddress(username));
return mm;
}
public static void sendMail(MailMessage message) {
sendMail(message, null);
}
public static void sendMail(MailMessage message, boolean html) {
sendMail(message, null, true);
}
public static void sendMail(MailMessage message, File[] attachment) {
sendMail(message, attachment, false);
}
public static void sendMail(MailMessage message, File[] attachment, boolean html) {
try {
Session session = createSession();
MimeMessage mm = createMimeMessage(session);
if(StringUtils.isEmpty(message.getCharset())){
message.setCharset("utf-8");
}
MimeMessageHelper helper = new MimeMessageHelper(mm, true, message.getCharset());
helper.setTo(EmailConvert.convert(message.getTo()));
if(null != message.getCc()){
helper.setCc(EmailConvert.convert(message.getCc()));
}
if(null !=message.getBcc()){
helper.setBcc(EmailConvert.convert(message.getBcc()));
}
if(null == message.getFrom()){
MailAddress from = new MailAddress(username, username_dispaly);
message.setFrom(from);
}
helper.setFrom(EmailConvert.convert(message.getFrom()));
if(null == message.getReplyTo()){
MailAddress replyTo = new MailAddress(username, username_dispaly);
message.setReplyTo(replyTo);
}
helper.setReplyTo(EmailConvert.convert(message.getReplyTo()));
if(StringUtils.isEmpty(message.getSubject())){
message.setSubject(subject);
}
helper.setSubject(message.getSubject());
helper.setText(message.getHtmlText(), html);
if (!ArrayUtils.isEmpty(attachment)) {
for (int i = 0; attachment != null && i < attachment.length; i++) {
File file = attachment[i];
FileSystemResource resource = new FileSystemResource(file);
helper.addAttachment(file.getName(), resource);
}
}
Transport ts = createTransport(session);
ts.sendMessage(mm, mm.getAllRecipients());
} catch (Exception e) {
LOG.warn(message.toString());
LOG.error(e.toString());
}
}
/**
* <br>描 述: 读取模块文件 转换为 String
* <br>作 者: shizhenwei
* <br>历 史: (版本) 作者 时间 注释
* @param url
* @return
*/
public static String readEmailTemplate(String url){
try {
String classpath = MailUtils.class.getResource("/").getPath();
FileInputStream in = new FileInputStream(classpath+"/"+url);
int size=in.available();
byte[] buffer=new byte[size];
in.read(buffer);
in.close();
return new String(buffer,"UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
4.配置文件
#mail
mail.smtp.host=smtp.163.com
mail.sender.username=xxx@163.com
mail.sender.password=xxx
mail.smtp.timeout=25000
mail.sender.username_dispaly=中国人民
mail.sender.subject=债务履行核实函
文件名称:mail_template_zwlxhsh.st
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Untitled Document</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<head/>
<body>
<!--
注释
mail_debt_name 欠款人
mail_lender_name 出借人
mail_debt_date 合同签订时间
mail_notarization_cod 公证申请编号
mail_contract_amont 合同金额
mail_contract_deadline 合同期限
mail_dept_principal 欠款本金
mail_dept_endate 借款截止时间
mail_dept_interest_date 欠款利息日
mail_late_charge 利率
mail_send_date 邮件发送日期
mail_statement_date 各个贷款时间
-->
<div style="margin-left:80px;">
债务履行核实函<br />
<br />
mail_debt_name:<br />
<p>
mail_debt_date,你方与出借人mail_lender_name签订《借款合同》,并在我处对该合同办理了具有强制执行效力的债权文书公证【公证书编号:mail_notarization_cod】。合同约定:借款人mail_debt_name向出借人mail_lender_name申请借款人民币mail_contract_amont元,借款期限mail_contract_deadline。
</p>
<p>
现出借人向本处提出申请称:其于mail_statement_date以银行转帐方式给付mail_debt_name借款共计mail_contract_amont元,现借款期限已到期,但是mail_debt_name未能依约还款,尚欠本金mail_dept_principal元,利息给付至mail_dept_endate。故依合同约定向公证处申请出具《执行证书》,请求确认执行标的:一、借款本金mail_dept_principal元;二、借款利息,自mail_dept_interest_date起至还款之日止,按月利率mail_late_charge%计算。
</P>
<p>
现与你方核实上述借款的还款情况,请收到此函后三个工作日内以书面形式回复、或者亲自到我处向承办公证员如实陈述履行合同的情况,并提供相关证据。若到期没有回复或未能提供证据,则视为你方对上述债权主张无异议,我处将按上述合同约定及出借人主张的债权金额,出具执行证书。之后,出借人可以不经诉讼,直接向有管辖权的人民法院对你方申请强制执行。
</p>
<br />
<div>
<div style="float:right;width:400px">
<div style="text-align:-webkit-center">北京市中信公证处</div>
<div style="text-align:-webkit-center">mail_send_date</div>
</div>
</div>
<br />
<div>
联系人:xxx公证员 法务:xxx<br />
电 话:010-52601155-627或641<br />
地 址:北京市西城区金融街广宁伯路2号铁通大厦五层<br /><br />
</div>
</div>
</body>