2010-12-02 4 views
7

Ich möchte Tausende von verschiedenen E-Mails an verschiedene Empfänger senden und möchte die Verbindung zu meinem SMTP öffnen und halten. Ich hoffe, das ist schneller als die Verbindung für ervy Mail wieder zu öffnen. Ich würde gerne Apache Commons Email dafür verwenden, könnte aber bei Bedarf auf die Java Mail API zurückgreifen.Wie werden mehrere E-Mails in einer Sitzung gesendet?

Im Moment Ich bin dies zu tun, was öffnet eine schließt die Verbindung jedes Mal: ​​

HtmlEmail email = new HtmlEmail(); 
email.setHostName(server.getHostName()); 
email.setSmtpPort(server.getPort()); 
email.setAuthenticator(new DefaultAuthenticator(server.getUsername(), server.getPassword())); 
email.setTLS(true); 
email.setFrom("[email protected]"); 
email.addTo(to); 
email.setSubject(subject); 
email.setHtmlMsg(htmlMsg); 
email.send(); 
+1

Halten Sie die Sitzung geöffnet und senden 1000 hinzufügen hinzufügen E-Mails und ** schließlich ** schließen Sie die Sitzung. –

+0

Wissen Sie, ob dies mit einer Commons-E-Mail möglich ist? –

+0

es scheint nicht so ... Ich benutze JavaMail Full-Out. –

Antwort

18

Hier ist meine Leistungstestklasse. Das Versenden der E-Mails über eine Verbindung ist 4-mal schneller als das erneute Öffnen der Verbindung jedes Mal (was passiert, wenn Sie Commons Mail verwenden). Die Performance kann durch Verwendung mehrerer Threads weiter vorangetrieben werden.

Properties properties = System.getProperties(); 
    properties.put("mail.smtp.host", server); 
    properties.put("mail.smtp.port", "" + port); 

    Session session = Session.getInstance(properties); 
    Transport transport = session.getTransport("smtp"); 

    transport.connect(server, username, password); 

    for (int i = 0; i < count; i++) { 

     Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(from)); 
     InternetAddress[] address = {new InternetAddress(to)}; 
     message.setRecipients(Message.RecipientType.TO, address); 

     message.setSubject(subject + "JavaMail API"); 
     message.setSentDate(new Date()); 

     setHTMLContent(message); 
     message.saveChanges(); 
     transport.sendMessage(message, address); 

    } 

    transport.close(); 
3

Sie können Ihre früheren Code verwenden, aber die folgenden bekommen die zugrunde liegenden Session

email.getMailSession(); 

Sie können zusätzliche Eigenschaften java Mail von

email.getMailSession().getProperties().put(<key>, <value>); 
Verwandte Themen