WebService java 邮件发送接口

java发送邮件,主要用的jar

使用的jar包

mail.jar

web service 用的xfire

大致思路及步骤

   1. 定义邮件发送接口

   2. 配置邮件线程池

   3. 记录日志

 

实体 MailBean 

  1 package com.reagle.bean;
  2 
  3 
  4 import java.util.Date;
  5 import java.util.List;
  6 import java.util.Properties;
  7 
  8 import javax.activation.DataHandler;
  9 import javax.activation.FileDataSource;
 10 import javax.mail.Address;
 11 import javax.mail.BodyPart;
 12 import javax.mail.Message;
 13 import javax.mail.MessagingException;
 14 import javax.mail.Part;
 15 import javax.mail.PasswordAuthentication;
 16 import javax.mail.Session;
 17 import javax.mail.Transport;
 18 import javax.mail.URLName;
 19 import javax.mail.internet.AddressException;
 20 import javax.mail.internet.InternetAddress;
 21 import javax.mail.internet.MimeBodyPart;
 22 import javax.mail.internet.MimeMessage;
 23 import javax.mail.internet.MimeMultipart;
 24 
 25 import org.apache.log4j.LogManager;
 26 import org.apache.log4j.Logger;
 27 
 28 public class MailBean {
 29     private Logger log = LogManager.getLogger(MailBean.class);
 30     /**
 31      * 主题
 32      */
 33     private String subject;    
 34     /**
 35      * 发送邮箱地址
 36      */
 37     private String sendMail;
 38     /**
 39      * 发送邮箱密码
 40      */
 41     private String sendMailPassword;
 42     /**
 43      * 收件人
 44      */
 45     private List<String> tos;
 46     /**
 47      * 抄送
 48      */
 49     private List<String> ccs;
 50     /**
 51      * 发送内容
 52      */
 53     private String content;
 54     /**
 55      * 内容编码
 56      */
 57     private String character;
 58     /**
 59      * 发送服务器地址
 60      */
 61     private String mailHost;
 62     /**
 63      *  附件
 64      */
 65     private List<String> accessories;
 66     /**
 67      * 发送是否需要校验
 68      */
 69     private String isCheckSend;
 70     /**
 71      * 
 72      * @param subject 主题
 73      * @param sendMail 发件人
 74      * @param sendMailPassword 密码
 75      * @param tos 收件人 
 76      * @param content 内容
 77      * @param character  内容字符集
 78      * @param mailHost SMTP主机
 79      * @param isCheckSend 是否需要验证
 80      */
 81     public MailBean(String subject, String sendMail, String sendMailPassword,
 82             List<String> tos, String content, String character,
 83             String mailHost, String isCheckSend) {
 84         this.subject = subject;
 85         this.sendMail = sendMail;
 86         this.sendMailPassword = sendMailPassword;
 87         this.tos = tos;
 88         this.content = content;
 89         this.character = character;
 90         this.mailHost = mailHost;
 91         this.isCheckSend = isCheckSend;
 92     }
 93     /**
 94      * 
 95      * @param subject 主题
 96      * @param sendMail 发件人
 97      * @param sendMailPassword 密码
 98      * @param tos 收件人 
 99      * @param content 内容
100      * @param character  内容字符集
101      * @param mailHost SMTP主机
102      * @param isCheckSend 是否需要验证
103      * @param accessories 附件
104      */
105     public MailBean(String subject, String sendMail, String sendMailPassword,
106             List<String> tos, String content, String character,
107             String mailHost, List<String> accessories, String isCheckSend) {
108         this.subject = subject;
109         this.sendMail = sendMail;
110         this.sendMailPassword = sendMailPassword;
111         this.tos = tos;
112         this.content = content;
113         this.character = character;
114         this.mailHost = mailHost;
115         this.accessories = accessories;
116         this.isCheckSend = isCheckSend;
117     }
118     /**
119      * 
120      * @param subject 主题
121      * @param sendMail 发件人
122      * @param sendMailPassword 密码
123      * @param tos 收件人 
124      * @param content 内容
125      * @param character  内容字符集
126      * @param mailHost SMTP主机
127      * @param isCheckSend 是否需要验证
128      * @param accessories 附件
129      * @param cc 抄送
130      */
131     public MailBean(String subject, String sendMail, String sendMailPassword,
132             List<String> takeMail, String content, String character,
133             String mailHost, List<String> accessories, String isCheckSend, List<String> cc) {
134         this.subject = subject;
135         this.sendMail = sendMail;
136         this.sendMailPassword = sendMailPassword;
137         this.tos = takeMail;
138         this.content = content;
139         this.character = character;
140         this.mailHost = mailHost;
141         this.accessories = accessories;
142         this.isCheckSend = isCheckSend;
143         this.ccs = cc;
144     }
145     public String getSubject() {
146         return subject;
147     }
148     public void setSubject(String subject) {
149         this.subject = subject;
150     }
151     public String getSendMail() {
152         return sendMail;
153     }
154     public void setSendMail(String sendMail) {
155         this.sendMail = sendMail;
156     }
157     public String getSendMailPassword() {
158         return sendMailPassword;
159     }
160     public void setSendMailPassword(String sendMailPassword) {
161         this.sendMailPassword = sendMailPassword;
162     }
163 
164     public String getContent() {
165         return content;
166     }
167     public void setContent(String content) {
168         this.content = content;
169     }
170     public String getCharacter() {
171         return character;
172     }
173     public void setCharacter(String character) {
174         this.character = character;
175     }
176     public String getMailHost() {
177         return mailHost;
178     }
179     public void setMailHost(String mailHost) {
180         this.mailHost = mailHost;
181     }
182     public List<String> getAccessories() {
183         return accessories;
184     }
185     public void setAccessories(List<String> accessories) {
186         this.accessories = accessories;
187     }
188     public String getCheckSend() {
189         return isCheckSend;
190     }
191     public void setCheckSend(String isCheckSend) {
192         this.isCheckSend = isCheckSend;
193     }
194     public List<String> getTos() {
195         return tos;
196     }
197     public void setTos(List<String> tos) {
198         this.tos = tos;
199     }
200     public List<String> getCcs() {
201         return ccs;
202     }
203     public void setCcs(List<String> ccs) {
204         this.ccs = ccs;
205     }
206     public String getIsCheckSend() {
207         return isCheckSend;
208     }
209     public void setIsCheckSend(String isCheckSend) {
210         this.isCheckSend = isCheckSend;
211     }
212     // 获得所有收件人
213     private  Address[] getAllTake() throws ArrayIndexOutOfBoundsException, AddressException{
214         return valueOfAddress(tos);
215     }
216     private Address[] valueOfAddress(List<String> list) throws ArrayIndexOutOfBoundsException, AddressException{
217         Address[] takes = new Address[0];
218         if(null == list || list.size() == 0)
219             throw new ArrayIndexOutOfBoundsException("list is null");
220         takes = new Address[list.size()];
221         for(int i = 0; i < list.size();  ++ i) {
222             takes[i]  = InternetAddress.parse(list.get(i))[0];
223         }
224         return takes;
225     }
226     private Address[] getAllOtherTake() throws ArrayIndexOutOfBoundsException, AddressException {
227         if (null == ccs || ccs.size() == 0)
228             return new Address[0];    
229         else             
230             return valueOfAddress(getCcs());
231     }
232     // 添加所有附件
233     private void addBodyPartByMimeMultipart(MimeMultipart mm,
234             List<String> filePaths) throws MessagingException,
235             ArrayIndexOutOfBoundsException, NullPointerException {
236         
237         if (null == filePaths || filePaths.size() == 0)
238             return;
239         if(null == mm)
240             throw new NullPointerException("MimeMultipart is null");
241         for (int i = 0; i < filePaths.size(); i++) {
242             MimeBodyPart bp = new MimeBodyPart();
243             FileDataSource fileds = new FileDataSource(filePaths.get(i));
244             DataHandler dh = new DataHandler(fileds);
245             bp.setDisposition(Part.ATTACHMENT);
246             bp.setFileName(fileds.getName());
247             bp.setDataHandler(dh);
248             mm.addBodyPart(bp);
249         }
250     }
251     
252     public boolean send() throws Exception {
253         boolean isSend = false;
254         
255         // 设置SMTP发送服务器
256         Properties props = System.getProperties();
257         
258         // 设置SMTP的主机
259         props.put("mail.smtp.host", mailHost);          
260         
261         // 需要经过验证
262         props.put("mail.smtp.auth", isCheckSend);       
263         //Authenticator auth = Authenticator
264         
265         // 获得邮件会话对象
266         Session session = Session.getDefaultInstance(props,null);
267         URLName url = new URLName(this.sendMail);
268         PasswordAuthentication pw = new PasswordAuthentication(this.sendMail, this.sendMailPassword);
269         session.setPasswordAuthentication(url, pw);
270         
271         // 邮件对象
272         MimeMessage mimeMsg = new MimeMessage(session);
273         
274         MimeMultipart multipart = new MimeMultipart();
275         
276         // 发送邮件地址
277         mimeMsg.setFrom(new InternetAddress(sendMail));
278         
279         // 收件人
280         mimeMsg.setRecipients(Message.RecipientType.TO, getAllTake());
281         
282         mimeMsg.setSentDate(new Date());
283         // 抄送人
284         mimeMsg.setRecipients(Message.RecipientType.CC, getAllOtherTake());
285         
286         // 主题 与字符编码
287         mimeMsg.setSubject(getSubject(), getCharacter());
288         
289         // 设置邮件体格式
290         BodyPart bp = new MimeBodyPart();
291         //bp.setContent("<meta http-equiv=Content-Type content=text/html; charset="+getCharacter()+">"
292         //                + content, "text/html;charset="+getCharacter());
293         
294         bp.setText(content);
295         
296         log.info(bp.getContent().toString());
297         multipart.addBodyPart(bp);
298         
299         
300         // 添加附件
301         addBodyPartByMimeMultipart(multipart, getAccessories());
302         
303         isSend = process(session, mimeMsg, multipart, props);
304         
305         return isSend;
306     }
307     
308     private boolean process(Session session, MimeMessage mimeMsg, MimeMultipart multipart, Properties props) throws MessagingException {
309         boolean isSuccessfully = false;
310         mimeMsg.setContent(multipart);
311         mimeMsg.saveChanges();
312         Session mailSession = Session.getInstance(props, null);
313         Transport transport = mailSession.getTransport("smtp");
314         transport.connect((String) props.get("mail.smtp.host"), getSendMail(),
315                 getSendMailPassword());
316         transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
317         log.info("Mail Successfully Sended!");
318         transport.close();
319         isSuccessfully = true;
320         return isSuccessfully;
321     }
322 
323 }

 

邮件工具类

/**
 * 
 */
package com.reagle.util.others;

import java.io.IOException;
import java.util.Properties;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

/**
 * @Program Name : reaglews.com.reagle.util.others.MailUtil.java
 * @Written by : kzw
 * @version : v1.00
 * @Creation Date : 2012-7-17 上午10:40:40
 * @Description :
 * 邮件操作工具类
 * @ModificationHistory 
 * Who             When         What 
 * ------- -------------     ----------------- 
 * kzw    2012-7-17 上午10:40:40         create
 * 
 **/
public class MailUtil {
    private static Logger log = LogManager.getLogger(MailUtil.class);
    
    private static final String CONFIGPATH = "mail.properties";
    private static final String SMTP = "smtp";
    private static final String EMAILREGEX = "emailRegex";
    private static Properties mailConfig;
    
    static {
        reloadPro();
    }
    /**
     * 获取邮箱对应SMTP服务器
         * 通过邮件来判断需要的SMTP主机,这里默认了使用了QQ的SMTP服务器
     * @Eclosing_Method  : getMail2SMTP
     * @author  by       : kzw
     * @creation Date    : 2012-7-17上午11:02:33
     * @param mail
     * @return
     *
     */
    public static String getMail2SMTP(String mail) {
        return (String)getConfigValue(SMTP);
    }
    public static String getConfigValue(String key) {
        if(null == mailConfig)
            reloadPro();
        return (String)mailConfig.get(key);
    }
    /**
     * 重新加载配置文件
     * @Eclosing_Method  : reloadPro
     * @author  by       : kzw
     * @creation Date    : 2012-7-17上午11:57:19
     *
     */
    public static void reloadPro(){
        mailConfig = new Properties(); 
        try {
            mailConfig.load(MailUtil.class.getClassLoader().getResourceAsStream(CONFIGPATH));
        } catch (IOException e) {
            log.error("加载邮件配置错误! e=" + e.getMessage());
        }
    }
    /**
     * 邮箱地址是否正确
     * @Eclosing_Method  : isEmail
     * @author  by       : kzw
     * @creation Date    : 2012-7-17下午12:17:28
     * @param email
     * @return
     *
     */
    public static boolean isEmail(String email) {
        if(StringUtils.isNotBlank(email))
            return email.matches(getConfigValue(EMAILREGEX));
        return false;
    }
}

邮件配置文件mail.properties

 1 # 
 2 # 邮件发送配置文件
 3 #
 4 # kzw create 2012-07-17
 5 #
 6 #
 7 #
 8 
 9 #邮件内容字符集
10 character=UTF-8
11 #SMTP
12 smtp=smtp.exmail.qq.com
13 #默认发送者
14 defaultSend=XXXXX
15 #密码
16 password=XXXXXX
17 #是否需要发送验证
18 checkSend=true
19 #邮箱校验正则
20 emailRegex=^([a-z0-9A-Z]+[_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$

邮件接口

 1 package com.reagle.server;
 2 
 3 import java.util.List;
 4 
 5 /**
 6  * @Program Name : reaglews.com.reagle.server.IMailService.java
 7  * @Written by : kzw
 8  * @version : v1.00
 9  * @Creation Date : 2012-7-17 上午09:29:30
10  * @Description :
11  * 邮件接口
12  * @ModificationHistory 
13  * Who             When         What 
14  * ------- -------------     ----------------- 
15  * kzw    2012-7-17 上午09:29:30         create
16  * 
17  **/
18 public interface IMailService {
19     /**
20      * 字符集配置key,这里有点怪怪的, 以后优化//TODO....
21      */
22     public final String CHARACTERCONFIG = "character";
23     public final String SMTPCONFIG = "smtp";
24     public final String CHECKSEND = "checkSend";
25     public final String DEFAULT_SEND = "defaultSend";
26     public final String DEFAULT_SEND_PWD = "password";
27     /**
28      * 发送邮件
29      * @Eclosing_Method  : sendMail
30      * @author  by       : kzw
31      * @creation Date    : 2012-7-17上午10:08:50
32      * @param sendMailAddr 发送人邮箱
33      * @param sendMailPwd 发送人密码
34      * @param cc 抄送人
35      * @param to 收件人
36      * @param subject 邮件主题
37      * @param content 邮件内容
38      * @param accessories 附件
39      * @param mailType 邮件类型
40      * @param operMan 操作员
41      * @param memo 备注
42      *
43      */
44     void sendMail(String sendMailAddr, String sendMailPwd, List<String> cc, 
45             List<String> to, String subject, String content, List<String> accessories,
46             String mailType, String operMan, String memo);
47     
48 }

邮件接口实现类

  1 /**
  2  * 
  3  */
  4 package com.reagle.server.impl;
  5 
  6 import java.math.BigDecimal;
  7 import java.text.SimpleDateFormat;
  8 import java.util.ArrayList;
  9 import java.util.Arrays;
 10 import java.util.Date;
 11 import java.util.List;
 12 import java.util.concurrent.BlockingQueue;
 13 import java.util.concurrent.LinkedBlockingQueue;
 14 import java.util.concurrent.ThreadPoolExecutor;
 15 import java.util.concurrent.TimeUnit;
 16 
 17 import org.apache.commons.lang.StringUtils;
 18 import org.apache.log4j.LogManager;
 19 import org.apache.log4j.Logger;
 20 
 21 import com.reagle.bean.MailBean;
 22 import com.reagle.common.db.DbUtilsTemplate;
 23 import com.reagle.server.IMailService;
 24 import com.reagle.util.others.MailUtil;
 25 
 26 /**
 27  * @Program Name : reaglews.com.reagle.server.impl.MailServiceImpl.java
 28  * @Written by : kzw
 29  * @version : v1.00
 30  * @Creation Date : 2012-7-17 上午10:10:32
 31  * @Description : 邮件接口实现
 32  * @ModificationHistory Who When What ------- ------------- -----------------
 33  *                      kzw 2012-7-17 上午10:10:32 create
 34  * 
 35  **/
 36 public class MailServiceImpl implements IMailService {
 37     private static Logger log = LogManager.getLogger(MailServiceImpl.class);
 38     
 39     /* pool config */
 40     private static final int COREPOOLSIZE = 10; 
 41     private static final int MAXIMUMPOOLSIZE = 20; //最大连接数
 42     
 43     private static ThreadPoolExecutor pool;
 44     private static BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
 45     
 46     static {
 47         /** 
 48          *  使用JDK中的线程池,线程执行采用无边界策略
 49          */
 50         pool = new ThreadPoolExecutor(COREPOOLSIZE, MAXIMUMPOOLSIZE, 2, TimeUnit.MINUTES, queue); 
 51     }
 52     @Override
 53     public void sendMail(String sendMailAddr, String sendMailPwd,
 54             List<String> ccs, List<String> tos, String subject,
 55             String content, List<String> accessories, String mailType, String operMan, String memo) {
 56        MailThread mail = new MailThread();
 57        mail.init(sendMailAddr, sendMailPwd, ccs, tos, subject, content, accessories, mailType, operMan, memo);
 58        pool.execute(mail); 
 59     }
 60     /**
 61      * 
 62      * @Program Name : reaglews.com.reagle.server.impl.MailServiceImpl.java
 63      * @Written by : kzw
 64      * @version : v1.00
 65      * @Creation Date : 2012-7-18 下午04:14:23
 66      * @Description :
 67      * 发送邮件线程
 68      * @ModificationHistory 
 69      * Who             When         What 
 70      * ------- -------------     ----------------- 
 71      * kzw    2012-7-18 下午04:14:23         create
 72      * 
 73      *
 74      */
 75     class MailThread implements Runnable {
 76         private Logger logger = LogManager.getLogger(MailThread.class);
 77         
 78         private List<String> ccs;
 79         private List<String> tos;
 80         private List<String> accessories;
 81         
 82         private String sendMailAddr;
 83         private String sendMailPwd;
 84         private String subject;
 85         private String content;
 86         private String mailType;
 87         private String operMan;
 88         private String memo;
 89         
 90         private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 91         /**
 92          *  初始化线程数据
 93          * @Eclosing_Method  : init
 94          * @author  by       : kzw
 95          * @creation Date    : 2012-7-17下午05:25:48
 96          * @param sendMailAddr 
 97          * @param sendMailPwd
 98          * @param ccs 抄送号码
 99          * @param tos 收件人
100          * @param subject 主题
101          * @param content 内容
102          * @param accessories 附件
103          *
104          */
105         public void init(String sendMailAddr, String sendMailPwd,
106                 List<String> ccs, List<String> tos, String subject,
107                 String content, List<String> accessories, String mailType, String operMan, String memo){
108             this.sendMailAddr = sendMailAddr;
109             this.sendMailPwd = sendMailPwd;
110             this.ccs = ccs;
111             this.tos = tos;
112             this.subject = subject;
113             this.content = content;
114             this.accessories = accessories;
115             this.mailType = mailType;
116             this.operMan = operMan;
117             this.memo = memo;
118         }
119         @Override
120         public void run() {
121             logger.info("发送邮件开始" + sdf.format(new Date()));
122             int id = 0;
123             String flag = "0";  //待发送
124             String msg = "";      //发送信息
125             boolean res = false;// 发送结果
126             try {
127                 id = getSeqNo();
128                 ccs.addAll(queryCCsByMailType(mailType)); // 添加需要抄送的邮箱地址
129                 // 使用默认的邮箱
130                 if(StringUtils.isBlank(sendMailAddr)) {
131                     sendMailAddr = MailUtil.getConfigValue(DEFAULT_SEND);
132                     sendMailPwd = MailUtil.getConfigValue(DEFAULT_SEND_PWD);
133                 }
134                 
135                 // 插入待发送邮件日志
136                 saveLog(sendMailAddr, ccs, tos, subject, content, accessories, mailType, operMan, memo, id);
137                 
138                 // 校验数据, 去掉错误邮箱地址
139                 if(!validate(sendMailAddr, sendMailPwd, ccs, tos, subject, content, accessories)) {
140                     logger.error("校验邮件数据失败");
141                     return;
142                 }
143                 // 获取邮件对象
144                 MailBean mail = getMailInstance(sendMailAddr, sendMailPwd, ccs, tos, subject, content, accessories);
145                 
146                 // 发送邮件
147                 res = mail.send();
148                 flag = res ? "1" : "2";
149                 if(!res) msg = "未知错误,发送失败";
150                 
151                 // 更新发送记录
152                 modifyLog(msg, flag, id);
153                 
154             } catch (Exception e) {
155                 e.printStackTrace();
156                 logger.error(e.getMessage(), e);
157                 modifyLog(e.getMessage(), "2", id);
158             }
159             logger.info("发送邮件结束" + sdf.format(new Date()));    
160         }
161         
162         /**
163          * 获取邮件对象实体
164          * @Eclosing_Method  : getInstance
165          * @author  by       : kzw
166          * @creation Date    : 2012-7-17下午03:16:02
167          * @param sendMailAddr 发件人
168          * @param sendMailPwd 发件人密码
169          * @param ccs 抄送
170          * @param tos 收件人
171          * @param subject 主题
172          * @param content 内容
173          * @param accessories 附件
174          * @return
175          *
176          */
177         private MailBean getMailInstance(String sendMailAddr, String sendMailPwd,
178                 List<String> ccs, List<String> tos, String subject,
179                 String content, List<String> accessories){
180             // 获取SMTP地址
181             String mailHost = MailUtil.getMail2SMTP(sendMailAddr);
182             
183             // 创建邮件
184             MailBean mail = new MailBean(subject, 
185                     sendMailAddr, 
186                     sendMailPwd,
187                     tos,  // 收件人
188                     content, 
189                     MailUtil.getConfigValue(CHARACTERCONFIG), 
190                     mailHost, 
191                     accessories,    // 附件
192                     MailUtil.getConfigValue(CHECKSEND),
193                     ccs  //抄送
194             );
195             
196             return mail;
197         }
198         
199         private boolean validate(String sendMailAddr, String sendMailPwd,
200                 List<String> transmitMails, List<String> takeMail, String subject,
201                 String content, List<String> multiparts){
202             boolean res = true;
203             if(!MailUtil.isEmail(sendMailAddr)) res = false;
204             // 清除错误号码
205             cancelErrorMailAddr(transmitMails); 
206             cancelErrorMailAddr(takeMail);
207             
208             return res;
209         }
210         
211         private void cancelErrorMailAddr(List<String> list) {
212             if(null == list || list.isEmpty()) return;
213             List<String> back = new ArrayList<String>(list);
214             for (String email : back) {
215                 if(!MailUtil.isEmail(email)) {
216                     list.remove(email);
217                     log.info("移除错误邮件:" + email);
218                 }
219             }
220         }
221 
222         private int getSeqNo() {
223             String seqSql = "select seq_mail.nextval from dual";
224             BigDecimal b =  (BigDecimal) new DbUtilsTemplate().findBy(seqSql, 1);
225             return b.intValue();
226         }
227         
228         private boolean saveLog(String sendMail, List<String> ccs, List<String> tos, String subject,
229                 String content, List<String> accessories, String mailType, String operman, String memo, int id) {
230             
231             StringBuffer sql = new StringBuffer(); 
232             sql.append(" INSERT INTO mail_send_detail ");
233             sql.append(" (ID, sendmail, senddate, tos, ccs, subject, CONTEXT, status, ");
234             sql.append(" mailtype, accessories, operman, operdate,opermemo) values(?, ?, sysdate, ?, ?, ?, ?, '0', ?, ?, ?, sysdate, ?)");
235             
236             String[] params = {
237                     String.valueOf(id),
238                     sendMail, 
239                     Arrays.toString(ccs.toArray()).replace("[", "").replace("]", ""),
240                     Arrays.toString(tos.toArray()).replace("[", "").replace("]", ""), 
241                     subject,
242                     content,
243                     mailType,
244                     Arrays.toString(accessories.toArray()).replace("[", "").replace("]", ""),
245                     operman,
246                     memo
247             };
248             
249             return (1 == new DbUtilsTemplate().update(sql.toString(), params)); 
250         }
251         
252         private boolean modifyLog(String memo, String flag, int id){
253             String sql ="update mail_send_detail set status=?, memo = ? where id = ?";
254             return (1 == new DbUtilsTemplate().update(sql, 
255                     new String[]{flag, memo, String.valueOf(id)}));
256         }
257         // 查询邮件类型下, 需要抄送的
258         private List<String> queryCCsByMailType(String mailType) {
259             List<String> list = new ArrayList<String>();
260             String sql = "select ccs from dm_mail_type where dm01=?";
261             String emails =  (String) new DbUtilsTemplate().findBy(sql, 1, mailType);
262             if(StringUtils.isNotBlank(emails)) {
263                  list = Arrays.asList(emails.split(";"));
264             }
265             return list;
266         }
267     }
268 }

 

单元测试

/**
 * 
 */
package com.reagle.IMailService;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.junit.Before;
import org.junit.Test;

import com.reagle.server.IMailService;
import com.reagle.server.impl.MailServiceImpl;

/**
 * @Program Name : reaglews.com.reagle.IMailService.TestMailService.java
 * @Written by : kzw
 * @version : v1.00
 * @Creation Date : 2012-7-18 上午09:07:25
 * @Description :
 * 
 * @ModificationHistory 
 * Who             When         What 
 * ------- -------------     ----------------- 
 * kzw    2012-7-18 上午09:07:25         create
 * 
 **/

public class TestMailService {
    IMailService service;
    List<String> transmitMails;
    List<String> takeMail;
    List<String> multiparts;
    @Before
    public void init(){
          service = new MailServiceImpl();
          transmitMails = new ArrayList<String>();
          takeMail = new ArrayList<String>();
          multiparts = new ArrayList<String>();
          takeMail.add("100086@qq.com");
    }
    
    @Test
    public void testThreadPool() throws InterruptedException{
        //  策略 1 同时提交1000份请求
        int size = 1000;
        long start = System.currentTimeMillis();
        for (int i = 0; i < size; i++) 
            service.sendMail(null, null, transmitMails, takeMail, "sub"+ System.currentTimeMillis(),
                    "content"+System.currentTimeMillis(), multiparts, "预订取消","1872", "测试");    
        long end = System.currentTimeMillis();
        Thread.sleep(5000000);
        System.out.println("邮件数量:" + size +", 总耗时:" + (end - start));
    }
    @Test
    public void testMailSend() throws InterruptedException{
        String sendMailAddr = "kuangzhongwei@1872.net";
        String sendMailPwd = "XXX";
        List<String> transmitMails = new ArrayList<String>();
        //transmitMails.add("kuangzhongwei@gmail.com");
        
        List<String> takeMail = new ArrayList<String>();
        takeMail.add("346554535@qq.com");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String subject = sdf.format(new Date()) + " subject";
        String content = sdf.format(new Date()) + "content 中文内容"; 
        
        // HTML代码 注意编码
        /*File f = new File("G:\\a.txt");
        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
        System.out.println(new InputStreamReader(new FileInputStream(f)).getEncoding());
        String fileContent = null;
        while(null != (fileContent = in.readLine())) {
            content += fileContent;
        }
        in.close();
        */
        List<String> multiparts = new ArrayList<String>();
        //multiparts.add("G:/a.txt");
        
        new MailServiceImpl().sendMail(sendMailAddr, sendMailPwd, transmitMails, takeMail, subject, content, multiparts, "02","1872", "测试");
        Thread.sleep(200000);
    }
}

webservices配置 

<!--  mail web service 配置-->
    <service>
        <name>mail</name>
        <namespace>http://com.reagle</namespace>
        <serviceClass>com.reagle.server.IMailService</serviceClass>
        <implementationClass>
            com.reagle.server.impl.MailServiceImpl
        </implementationClass>
    </service>

webservice client 调用

 1 /**
 2  * 
 3  */
 4 package com.reagle.test;
 5 
 6 import java.text.SimpleDateFormat;
 7 import java.util.ArrayList;
 8 import java.util.Date;
 9 import java.util.List;
10 
11 import org.junit.Before;
12 import org.junit.Test;
13 
14 import reagle.com.ArrayOfString;
15 
16 /**
17  * @Program Name : testMailClient.com.reagle.test.TestMailServiceClient.java
18  * @Written by : kzw
19  * @version : v1.00
20  * @Creation Date : 2012-7-18 下午05:00:47
21  * @Description :
22  * 
23  * @ModificationHistory Who When What ------- ------------- -----------------
24  *                      kzw 2012-7-18 下午05:00:47 create
25  * 
26  **/
27 public class TestMailServiceClient {
28     private mailClient serivce;
29     List<String> transmitMails;
30     List<String> takeMail;
31     List<String> multiparts;
32     @Before
33     public void testInit() {
34         serivce = new mailClient();
35         transmitMails = new ArrayList<String>();
36         takeMail = new ArrayList<String>();
37         multiparts = new ArrayList<String>();
38         takeMail.add("100086@qq.com");
39 
40     }
41 
42     @Test
43     public void testMailSend(){
44         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
45         String subject = sdf.format(new Date()) + " subject";
46         String content = sdf.format(new Date()) + "content 中文内容"; 
47         String sendMailAddr = "kuangzhongwei@1872.net";
48         String sendMailPwd = "XXXXX";
49         ArrayOfString ccs=new ArrayOfString();
50         ArrayOfString tos=new ArrayOfString();
51         ArrayOfString multipartss=new ArrayOfString();
52         tos.getString().addAll(takeMail);
53         
54         serivce.getmailHttpPort().sendMail(null, null, ccs, tos, 
55                     subject, content, multipartss, "02","1872", "测试");
56         
57     }
58 }

 

学习在于积累 ,so 记录了...

 

 

 

 

posted @ 2012-07-19 00:27  老邝  阅读(2205)  评论(5编辑  收藏  举报