优化JavaMail发送性能

本文优化JavaMail发送性能的原则: 一个连接发送多个邮件

 

Java代码 
  1. Session mailSession = Session.getDefaultInstance(props);  
  2.     Transport transport = mailSession.getTransport("smtp");  
  3.     transport.connect("192.168.15.85""webmaster""password");  
  4.   
  5.   
  6.     for(int i=0;i<1000;i++){  
  7.     message = getNewMessage(mailSession);  
  8.     message.setRecipients(Message.RecipientType.TO, addresses);  
  9.     transport.sendMessage(message, message.getAllRecipients());  
Java代码 
  1. private static Message getMessage(Session mailSession) throws Exception {  
  2.         SimpleEmail email = new SimpleEmail();  
  3.         email.setCharset("UTF-8");  
  4.   
  5.         email.setHostName("192.168.15.85");  
  6.         email.setSmtpPort(25);  
  7.         email.setCharset("UTF-8");  
  8.         email.setFrom("12334567@ifeng.com""凤凰网微博");  
  9.         email.setTo(Arrays.asList(new InternetAddress("1111111@qq.com")));  
  10.         email.setSubject("优先级测试");  
  11.         email.setMsg("优先级测试");  
  12.         email.setMailSession(mailSession);  
  13.         email.buildMimeMessage();  
  14.         return email.getMimeMessage();  
  15. }  

  以上代码是发送邮件常用代码。

上面的代码没有任务问题,但出现一个现象,用同一个transport发送貌似都需要重新建立到smtp服务器的链接。

 

而一般我们发送的邮件都是内容主题不同,接受者不同。因此

Java代码 
  1. Session mailSession = Session.getDefaultInstance(props);  
  2.     Transport transport = mailSession.getTransport("smtp");  
  3.     transport.connect("192.168.15.85""webmaster""password");  
  4.   
  5. Message message = null;  
  6.   
  7.     for(int i=0;i<100;i++){  
  8.     newMessage = getNewMessage(mailSession);  
  9.         if(message ==null){  
  10.                   message = newMessage;  
  11.           }else{  
  12.                    message .setContent((Multipart) newMessage .getContent());  
  13.                   ... // 用新message的subject, content, AllRecipients填充message  
  14.           }  
  15.     message.setRecipients(Message.RecipientType.TO, addresses);  
  16.     transport.sendMessage(message, message.getAllRecipients());  
 

这样你会发送的速度极其的快,就第一封邮件需要建立链接差不多需要100来ms,剩余的只需不到10ms。

记住:我所测试得出 一个Session只能发送100封左右邮件,因此到一百封时需要重新建立session和transport

posted on 2010-11-24 17:44  NanguoCoffee  阅读(2201)  评论(0编辑  收藏  举报

导航