码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA 邮件发送工具类

时间:2018-02-28 12:58:14      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:exception   发件人   请求   long   throws   host   empty   ams   doctype   

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公证员&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp法务:xxx<br /> 电  话:010-52601155-627或641<br /> 地  址:北京市西城区金融街广宁伯路2号铁通大厦五层<br /><br /> </div> </div> </body>

 

JAVA 邮件发送工具类

标签:exception   发件人   请求   long   throws   host   empty   ams   doctype   

原文地址:https://www.cnblogs.com/zwcry/p/8482887.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!