All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.javahao.util.senders.email.EmailHandle Maven / Gradle / Ivy

The newest version!
package com.github.javahao.util.senders.email;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
/**
 * usedfor:邮件发送处理工具类
 * Created by javahao on 2017/6/26.
 * auth:JavaHao
 */
public class EmailHandle {

    private static final Logger LOGGER = LoggerFactory.getLogger(EmailHandle.class);

    /** 邮件对象 **/
    private MimeMessage mimeMsg;

    /** 发送邮件的Session会话 **/
    private Session session;

    /** 邮件发送时的一些配置信息的一个属性对象 **/
    private Properties props;

    /** 发件人的用户名 **/
    private String sendUserName;

    /** 发件人密码 **/
    private String sendUserPass;

    /** 附件添加的组件 **/
    private Multipart mp;

    /** 存放附件文件 **/
    private List files = new LinkedList();


    public EmailHandle(String smtp) {
        sendUserName = "";
        sendUserPass = "";
        setSmtpHost(smtp);
        createMimeMessage();
    }

    private void setSmtpHost(String hostName) {
        if (props == null){
            props = System.getProperties();
        }
        props.put("mail.smtp.host", hostName);
    }

    public boolean createMimeMessage() {
        try {
            /**用props对象来创建并初始化session对象**/
            session = Session.getDefaultInstance(props, null);
            /**用session对象来创建并初始化邮件对象**/
            mimeMsg = new MimeMessage(session);
            /**生成附件组件的实例**/
            mp = new MimeMultipart();
            return true;
        } catch (Exception e) {
            System.err.println("获取邮件会话对象时发生错误!" + e);
            return false;
        }

    }

    /**
     * 设置SMTP的身份认证
     * @param need 是否必须
     */
    public void setNeedAuth(boolean need) {
        if (props == null){ props = System.getProperties();}
        if (need){
            props.put("mail.smtp.auth", "true");
        }else{
            props.put("mail.smtp.auth", "false");
        }

    }

    /**
     * 进行用户身份验证时,设置用户名和密码
     * @param name 用户名
     * @param pass 密码
     */
    public void setNamePass(String name, String pass) {
        sendUserName = name;
        sendUserPass = pass;
    }

    /**
     * 设置邮件主题
     *
     * @param mailSubject 邮件标题
     * @return 结果
     */
    public boolean setSubject(String mailSubject) {
        try {
            mimeMsg.setSubject(mailSubject);
            return true;
        } catch (Exception e) {
            return false;
        }

    }

    /**
     * 设置邮件内容,并设置其为文本格式或HTML文件格式,编码方式为UTF-8
     * @param mailBody 邮件主体
     * @return 结果
     */
    public boolean setBody(String mailBody) {
        try {
            BodyPart bp = new MimeBodyPart();
            bp.setContent("" + mailBody, "text/html;charset=UTF-8");
            /**在组件上添加邮件文本**/
            mp.addBodyPart(bp);
        } catch (Exception e) {
            System.err.println("设置邮件正文时发生错误!" + e);
            return false;
        }
        return true;
    }

    /**
     * 增加发送附件
     * @param filename 邮件附件的地址,只能是本机地址而不能是网络地址,否则抛出异常
     * @return 结果
     */
    public boolean addFileAffix(String filename) {
        try {
            BodyPart bp = new MimeBodyPart();
            FileDataSource fileds = new FileDataSource(filename);
            bp.setDataHandler(new DataHandler(fileds));
            /**解决附件名称乱码**/
            bp.setFileName(MimeUtility.encodeText(fileds.getName(), "UTF-8",null));
            /**添加附件**/
            mp.addBodyPart(bp);
            files.add(fileds);
            return true;
        } catch (Exception e) {
            System.err.println("增加邮件附件<" + filename + ">时发生错误:" + e);
            return false;
        }

    }

    /**
     * 删除添加的附件
     * @return 结果
     */
    public boolean delFileAffix() {
        try {
            FileDataSource fileds = null;
            for (Iterator it = files.iterator(); it.hasNext();) {
                fileds = it.next();
                if (fileds != null && fileds.getFile() != null) {
                    fileds.getFile().delete();
                }
            }
            return true;
        } catch (Exception e) {
            System.err.println("删除邮件附件发生错误:" + e);
            return false;
        }

    }

    /**
     * 设置发件人地址
     * @param from   发件人地址
     * @return 结果
     */
    public boolean setFrom(String from) {
        try {
            mimeMsg.setFrom(new InternetAddress(from));
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 设置收件人地址
     * @param to 收件人的地址
     * @return 结果
     */
    public boolean setTo(String to) {
        try {
            if (to == null)
                return false;

            mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 设置收件人地址
     * @param toList    收件人的地址列表
     * @return 结果
     */
    public boolean setToList(String toList) {
        try {
            if (toList == null)
                return false;
            InternetAddress[] iaToList = InternetAddress.parse(toList);
            mimeMsg.setRecipients(Message.RecipientType.TO, iaToList);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 发送抄送
     * @param copyto 抄送
     * @return 结果
     */
    public boolean setCopyTo(String copyto) {
        try {
            if (copyto == null)
                return false;
            mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC,InternetAddress.parse(copyto));
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 发送抄送
     * @param copytoList 抄送
     * @return 结果
     */
    public boolean setCopyToList(String copytoList) {
        try {
            if (copytoList == null)
                return false;
            InternetAddress[] iacopytoList = InternetAddress.parse(copytoList);
            mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC, iacopytoList);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 发送邮件
     * @return 结果
     * @throws Exception 异常
     */
    public boolean sendEmail() throws Exception {
        LOGGER.debug("正在发送邮件....");

        mimeMsg.setContent(mp);
        mimeMsg.saveChanges();
        Session mailSession = Session.getInstance(props, null);
        Transport transport = mailSession.getTransport("smtp");

        /** 连接邮件服务器并进行身份验证 **/
        transport.connect((String) props.get("mail.smtp.host"), sendUserName, sendUserPass);

        /** 发送邮件 **/
        transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
        transport.close();
        LOGGER.debug("发送邮件成功!");
        return true;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy