JAVA 邮件发送工具类

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("[email protected]");
        MailAddress t2 = new MailAddress("[email protected]");
        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[email protected].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>

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

时间: 2024-08-04 14:08:36

JAVA 邮件发送工具类的相关文章

Java邮件发送工具类

个人博客 地址:https://www.wenhaofan.com/article/20190507104851 引入Pom依赖 依赖于apchae email包,maven项目可直接加入以下依赖,普通项目将jar添加进build path即可 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version&

邮件发送工具类

import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.Properties; import javax.mail.Address; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress;

java实现发邮件的工具类,方便 好用(需要架包的Send Email To me)

原文:java实现发邮件的工具类,方便 好用(需要架包的Send Email To me) 源代码下载地址:http://www.zuidaima.com/share/1550463394794496.htm package com.zuidaima.util; import java.util.Properties; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.Multipart; impor

新版本Java邮件发送类

之前曾经做过几个邮件发送类,有兴趣可以查阅前面的帖子. 使用过程中,发现一些不便之处,并作出了改进,将改进后的版本发布如下: 基类及其附属类共三个:(下载地址:http://pan.baidu.com/s/1bn1VkUN) import java.io.File; import java.util.Date; import java.util.List; import java.util.Properties; import javax.activation.DataHandler; impo

Java邮件发送与屏幕截屏

前几天七夕情人节孤独寂寞的程序猿闲来没事,花了一两个小时写了个小Demo主要实现Java的Mail发送功能和桌面截屏功能. 首先让我们先看看Java sendMail邮件发送和桌面屏幕截屏功能是怎么实现的基础知识. 一.Java  SendMail邮件发送 首先让我们来看看邮件发送的原理图: JavaMail 是一套sun 提供开发邮件收发程序API,JavaMail编写程序就是邮件客户端程序(和outlook.foxmail功能类似) * JavaMail开发需要类库 javamail API

JAVA邮件发送的简单实现

JAVA邮件发送的简单实现 JAVA邮件发送的简单实现 JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件.这一机制被广泛的用在注册激活和垃圾邮件的发送等方面. JavaMail可以到http://www.oracle.com/technetwork/java/javamail/index-138643.html进行下载,并将mail.jar添加到classpath即可.

java邮件发送(含附件)

1. [代码]java邮件发送(含附件)疯狂的IT人站长整理的:利用Java发送邮件(含附件)的例子:1.邮件发送的配置propertity文件内容如下:(utils.properties文件放在src下面)emailsmtp=smtp.qq.com[email protected]emailpass=******2.读取配置文件的类文件(ReadPropertity.java)import java.io.IOException;import java.util.Properties;publ

基于JavaMail的Java邮件发送:简单邮件发送

http://blog.csdn.net/xietansheng/article/details/51673073 http://www.cnblogs.com/codeplus/archive/2011/10/30/2229391.html http://blog.csdn.net/ghsau/article/details/17839983 ******************** 电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信

Redis Java客户端jedis工具类以及Redis实现的跨jvm的锁

Redis Java客户端jedis工具类以及Redis实现的跨jvm的锁 最近项目中使用redis,学习了一下,client端使用jedis-2.1.0 首先是一个redis实现的跨jvm的lock, 接着是一个简单封装的工具类,也对pipeline处理进行了几个常用的封装 然后是对应Spring的相关配置 Java代码   public class RedisLock { /** 加锁标志 */ public static final String LOCKED = "TRUE";