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 记录了...