太精彩了(email)

SendMailSAOImpl.java

package com.paic.batch.sao.impl;

import javax.mail.Message;
import javax.mail.Session;

import org.apache.log4j.Logger;

import com.paic.batch.sao.SendMailSAO;
import com.paic.batch.util.MailUtils;
import com.paic.batch.util.StrUtil;

/**
 * 自定义邮件发送服务接口
 * 
 * @date 2014-07-18
 */
public class SendMailSAOImpl implements SendMailSAO {

 private static Logger logger = Logger.getLogger(SendMailSAOImpl.class);

 /** eMail以HTML发送编码格式 */
 private final static String ENCODING = "UTF-8";

 private Session defaultSession = null;

 private static String DO_MAIN = "pingan.com.cn";

 private java.util.Properties props;

 public java.util.Properties getProps() {
  return props;
 }

 public void setProps(java.util.Properties props) {
  this.props = props;
 }

 /**
  * 自定义邮件初始化
  */
 private void init() {
  try {
   defaultSession = Session.getInstance(props);
   String domain = defaultSession.getProperty("mail.default.domain");
   if (StrUtil.isEmpty(domain)) {
    throw new Exception("默认邮件发送DOMAIN配置为空,domain=" + domain);
   } else {
    DO_MAIN = domain;
   }
  } catch (Throwable e) {
   logger.error("自定义邮件初始化失败", e);
  }
 }

 

 /**
  * 发送邮件
  *
  * @param sFrom
  *            发件人 --一律为: LPMS-ADMIN@pingan.com.cn
  * @param sTo
  *            收件人列表
  * @param sSubject
  *            标题
  * @param sContent
  *            邮件内容
  */
 @SuppressWarnings("static-access")
 public void sendEmail(String sFrom, String[] sTo,
   String sSubject, String sContent)
   throws Exception {
  try {
   this.init();
   logger.debug(new StringBuilder("SendMailDaoImpl.sendMessage发件人:")
     .append(sFrom).append("收件人列表:").append(sTo).append("标题:")
     .append(sSubject).append("邮件内容:").append(sContent));
   sTo = this.appendDoMain(sTo);

   if (StrUtil.isEmpty((sFrom))) {
    throw new Exception("发件人为空。sFrom=" + sFrom);
   }
   sFrom = this.processDomain(sFrom, DO_MAIN);

   Message message = message = MailUtils.createHtmlMessage(defaultSession, ENCODING,
      sFrom, sTo, null, sSubject, sContent);
   
   logger.debug(new StringBuilder("message创建成功:").append(message)
     .append("开始发送Email请求"));
   long startTime = System.currentTimeMillis();
   // 发送邮件
   javax.mail.Transport.send(message);

   long endTime = System.currentTimeMillis();
   logger.debug(new StringBuilder("邮件发送请求成功!共计花费:").append(
     (endTime - startTime)).append("ms"));
  } catch (Throwable ex) {
   StringBuffer message = new StringBuffer();
   message.append("'").append(sFrom).append("'").append(" 发送邮件给'");
   for (int i = 0; i < sTo.length; i++) {
    message.append(sTo[i]).append(",");
    message.append(" '失败");
   }
   throw new Exception("sendMessage:" + message.toString() + ex);
  }
 }

 /**
  * 追加默认domain
  *
  * @param strs
  * @return
  * @throws Exception
  */
 private String[] appendDoMain(String[] strs) throws Exception {
  if (strs == null)
   return null;
  strs = processDomain(strs, DO_MAIN);
  if ((null != strs) && (0 < strs.length)) {
   StringBuffer logInfo = new StringBuffer("发送邮件给" + strs.length
     + "个收件人。\n");
   for (int i = 0, n = strs.length; i < n; i++) {
    logInfo.append("收件人:").append(strs[i]).append("\n");
   }
   logger.debug(logInfo.toString());
  }
  return strs;
 }

 /**
  * 处理邮件接收人
  *
  * @param receiver
  * @param domain
  * @return
  * @throws Exception
  */
 private String[] processDomain(String[] receiver, String domain)
   throws Exception {
  if ((null != receiver) && (0 < receiver.length)) {
   String[] receivers = new String[receiver.length];
   for (int i = 0; i < receiver.length; i++) {
    receivers[i] = processDomain(receiver[i], domain);
   }
   return receivers;
  } else {
   logger.error("邮件接收人列表为空。receiver=" + receiver.toString());
  }
  return receiver;
 }

 /**
  * 重载处理邮件接收人
  *
  * @param name
  * @param domain
  * @return
  */
 private static String processDomain(String name, String domain) {
  if (StrUtil.isEmpty((name))) {
   logger.error("地址为空:" + name);
   return null;
  }
  return ((null != name) && (0 > name.indexOf("@"))) ? (name + "@" + domain)
    : name;
 }
}

============================================================

spring-mail.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="
  http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="emailProperties" class="java.util.Properties">
       <constructor-arg>
           <props>
              <prop key="mail.smtp.host">
                  ${mail.smtp.host}
              </prop>
              <prop key="mail.smtp.port">
                  ${mail.smtp.port}
              </prop>
              <prop key="mail.default.domain">
                  ${mail.default.domain}
              </prop>

 

====================================================

spring-placeholders.properties

#邮件配置

mail.smtp.host= devsmtprelay.paic.com.cn
mail.smtp.port=25
mail.default.domain=paic.com.cn

=====================================================

eMailUtil.java

package com.paic.batch.util;

import java.io.UnsupportedEncodingException;
import java.util.Date;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.internet.AddressException;
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;

import org.apache.log4j.Logger;

/**
 * 邮件工具类
 * 

 * @date 2014/08/05
 */
public class MailUtils {
 
 private final static Logger logger = Logger.getLogger(MailUtils.class);
 
 private final static String TEXT_MAIL = "textMail";
 
 private final static String HTML_MAIL = "htmlMail";
 
 /**** 以纯文本的形式 <h2>带附件 </h2>发邮件
    * 构造一个Message
    * @param session 邮件的session
    * @param sFrom 发件人
    * @param sTo 收件人
    * @param sCC 抄送人
    * @param sSubject 标题
    * @param sContent 内容 (text格式)
    * @param sFileName 附件文件名
    * @return 构造完的Message
    * @throws Exception
    */
   public static Message createTextMessage(Session session,String sFrom,
              String[] sTo,String[] sCC,
                                    String sSubject, String sContent,
                                    String[] sFileName) throws Exception{
    return createMessage(session, null, sFrom, sTo, sCC, sSubject, sContent, sFileName, TEXT_MAIL);
   }
  
   /**** 以纯文本的形式 <h2>不带附件</h2> 发邮件
    * 构造一个Message
    * @param session 邮件的session
    * @param sFrom 发件人
    * @param sTo 收件人
    * @param sCC 抄送人
    * @param sSubject 标题
    * @param sContent 内容 (text格式)
    * @return 构造完的Message
    * @throws Exception
    */
   public static Message createTextMessage(Session session,String sFrom,
              String[] sTo,String[] sCC,
                                    String sSubject, String sContent
                                    ) throws Exception {
    return createMessage(session, null, sFrom, sTo, sCC, sSubject, sContent, null, TEXT_MAIL);
   }
 
   /*** 以html的形式发邮件<h2>不带附件</h2> 发邮件
    * 构造一个Message
    * @param session 邮件的session
    * @param sEncoding 信息编码
    * @param sFrom 发件人
    * @param sTo 收件人
    * @param sCC 抄送人
    * @param sSubject 标题
    * @param sContent 内容 ( html格式)
    * @param flag (HtmlMail:构造Multipart格式             TextMail:添加html格式的文本内容)
    * @return 构造完的Message
    * @throws Exception
    */
   public static Message createHtmlMessage(Session session, String sEncoding,
                      String sFrom, String[] sTo,String[] sCC,
                      String sSubject, String sContent
                     ) throws Exception {
    return createMessage(session, sEncoding, sFrom, sTo, sCC, sSubject, sContent, null, HTML_MAIL);
   }
  
   /*** 以html的形式发邮件 <h2>带附件 </h2>发邮件
    * 构造一个Message
    * @param session 邮件的session
    * @param sEncoding 信息编码
    * @param sFrom 发件人
    * @param sTo 收件人
    * @param sCC 抄送人
    * @param sSubject 标题
    * @param sContent 内容 ( html格式)
    * @param sFileName 附件文件名
    * @param flag (HtmlMail:构造Multipart格式             TextMail:添加html格式的文本内容)
    * @return 构造完的Message
    * @throws Exception
    */
   public static Message createHtmlMessage(Session session, String sEncoding,
                      String sFrom, String[] sTo,String[] sCC,
                      String sSubject, String sContent,
                      String[] sFileName) throws Exception {
    return createMessage(session, sEncoding, sFrom, sTo, sCC, sSubject, sContent, sFileName, HTML_MAIL);
   }
  

 /**
    * 构造一个Message
    * @param session 邮件的session
    * @param sEncoding 信息编码
    * @param sFrom 发件人
    * @param sTo 收件人
    * @param sCC 抄送人
    * @param sSubject 标题
    * @param sContent 内容 ( html格式)
    * @param sFileName 附件文件名
    * @param flag (HtmlMail:构造Multipart格式             TextMail:添加html格式的文本内容)
    * @return 构造完的Message
    * @throws Exception
    */
   private static Message createMessage(Session session, String sEncoding,
                                    String sFrom, String[] sTo,String[] sCC,
                                    String sSubject, String sContent,
                                    String[] sFileName,String flag) throws Exception{
   MimeMessage message = new MimeMessage(session);
      InternetAddress from = null;
      InternetAddress[] to = null;
      InternetAddress[] cc = null;
      logger.debug("===============================进入邮件工具类,开始进行Message对象!");
      try {
       logger.debug("===============================开始构建发件人的InternetAddress对象--------");
       from = new InternetAddress(sFrom);
       logger.debug("===============================已经完成构建发件人的InternetAddress对象:"+from);
      } catch (AddressException ex) {
       throw new Exception(sFrom, ex);
      }
 
      if (sTo != null) {
       int i = 0;
       try {
        logger.debug("===============================开始构建收件人的InternetAddress对象--------");
        to = new InternetAddress[sTo.length];
        for (i = 0; i < sTo.length; i++) {
         to[i] = new InternetAddress( sTo[i]);
        }
        logger.debug("===============================已经完成构建收件人的InternetAddress对象:"+to);
       } catch (AddressException ex) {
        throw new Exception(sTo[i], ex);
       }
      }
     
      if (sCC != null) {
       int i = 0;
       try {
        logger.debug("===============================开始构建抄送人的InternetAddress对象--------");
        cc = new InternetAddress[sCC.length];
        for (i = 0; i < sCC.length; i++) {
         cc[i] = new InternetAddress( sCC[i]);
           }
        logger.debug("===============================已经完成构建抄送人的InternetAddress对象:"+cc);
       } catch (AddressException ex) {
        throw new Exception(sCC[i], ex);
       }
   }
 
      try {
       if(to == null && cc == null){
        logger.error("===============================message构建异常:主发件人和超送人都为null.....抛出异常");
        throw new Exception("===============================message构建异常:主发件人和超送人都为null.....抛出异常");
       }
       // 添加邮件信息的基本参数
       message.setFrom(from);
       if(to != null){
        message.addRecipients(Message.RecipientType.TO, to);
       }
       if(cc != null){
        message.addRecipients(Message.RecipientType.CC, cc);
       }
       // message.setHeader("Content-Type", "text/html;charset=" + sEncoding);
       message.setSentDate(new Date());
       message.setSubject( sSubject );
 
       // 构造Multipart格式
       Multipart mp = new MimeMultipart();
       // 添加html格式的文本内容
       MimeBodyPart mbpContent = new MimeBodyPart();
       if(flag != null && flag.equals(HTML_MAIL)){
        logger.debug("===============================以html的形式发送邮件中,编码格式为:"+sEncoding);
        mbpContent.setContent(sContent, "text/html;charset=" + sEncoding);    //这里设置发送的邮件内容以HTML格式发送
       }
       if(flag != null && flag.equals(TEXT_MAIL)){
        logger.debug("===============================以纯文本的形式发送邮件中");
        mbpContent.setText(sContent);     //这里设置发送的内容以纯文本方式发送
       }
       mp.addBodyPart(mbpContent);
 
       // 添加附件
       if (sFileName != null && sFileName.length > 0) {
        logger.debug("===============================存在附件,开始整理附件------------");
        String profix = "";    //附件的后缀名
        for (int j = 0; j < sFileName.length; j++) {
         MimeBodyPart mbp = new MimeBodyPart();
         FileDataSource fds = new FileDataSource(sFileName[j]);
         mbp.setDataHandler(new DataHandler(fds));
         mbp.setFileName(fds.getName());
         mp.addBodyPart(mbp);
         String[] strArr = sFileName[j].split("/");
         String fileName = "未命名文件";
         if (strArr != null) {  //组装附件名
          fileName = strArr[strArr.length-1];
          int li = 0;
          if ((li = fileName.lastIndexOf(".")) >0) {
           profix = fileName.substring(li+1);   //取得后缀名
          }
          fileName = fileName.substring(0,fileName.lastIndexOf("("));
          if(fileName.length() > 15){  //附件名字成度做限制不能超过15个字符
           fileName = fileName.substring(0,13)+"..";
          }
         }
         fileName = fileName +"."+profix;
         mbp.setFileName(MimeUtility.encodeWord(fileName));
     }
        logger.debug("===============================存在附件,整理附件完毕------------");
       }
 
       logger.debug("===============================开始设置mail message参数构建message------------");
       // 添加Multipart
       message.setContent(mp);
       logger.debug("===============================已经完成设置mail message参数构建message,构建成功------------");
      } catch (MessagingException ex) {
       logger.error("===============================message构建异常:"+ex);
       throw new Exception(ex);
      } catch (UnsupportedEncodingException ex) {
       logger.error("===============================message构建异常:"+ex);
       throw new Exception(ex);
      }
      return message;
   }
}


           </props>
       </constructor-arg>
    </bean>
  </beans>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值