2011-07-14 11 views
6

Şu anda e-posta mesajları göndermek için Commons Email kullanıyorum, ancak gönderilen e-postalar arasındaki smtp bağlantılarını paylaşmanın bir yolunu bulamadım. çok okunabilir, ama ben her mesaj için yeniden bağlanma havai olduğuna inanıyoruz mesajları, büyük miktarda yaparken yavaşApache Commons E-posta ve Yeniden Bağlantı SMTP Bağlantıları

Email email = new SimpleEmail(); 
    email.setFrom("[email protected]"); 
    email.addTo("[email protected]"); 
    email.setSubject("Hello Example"); 
    email.setMsg("Hello Example"); 
    email.setSmtpPort(25); 
    email.setHostName("localhost"); 
    email.send(); 

: Aşağıdaki gibi bir kod vardır. Bu yüzden aşağıdaki kodu kullanarak profil oluşturdum ve Transport'u yeniden kullanmanın üç kat daha hızlı bir şekilde yapıldığını buldum. Commons-posta çoklu e-posta gönderimi için bir SMTP bağlantıyı yeniden yapmak için bir yol olup olmadığını

Properties props = new Properties(); 
    props.setProperty("mail.transport.protocol", "smtp"); 
    Session mailSession = Session.getDefaultInstance(props, null); 
    Transport transport = mailSession.getTransport("smtp"); 
    transport.connect("localhost", 25, null, null); 

    MimeMessage message = new MimeMessage(mailSession); 
    message.setFrom(new InternetAddress("[email protected]")); 
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]")); 
    message.setSubject("Hello Example"); 
    message.setContent("Hello Example", "text/html; charset=ISO-8859-1"); 

    transport.sendMessage(message, message.getAllRecipients()); 

Yani merak ediyorum? Commons E-posta API'sini daha çok seviyorum, ama performans acı verici bir şey.

sayesinde Ransom

cevap

3

Ben Commons kaynağına kendisine kazma sonra aşağıdaki çözüm geldi. Bu çalışması gerekir, ancak biz başarmak Could I

Properties props = new Properties(); 
    props.setProperty("mail.transport.protocol", "smtp"); 
    Session mailSession = Session.getDefaultInstance(props, null); 
    Transport transport = mailSession.getTransport("smtp"); 
    transport.connect("localhost", 25, null, null); 

    Email email = new SimpleEmail(); 
    email.setFrom("[email protected]"); 
    email.addTo("[email protected]"); 
    email.setSubject("Hello Example"); 
    email.setMsg("Hello Example"); 
    email.setHostName("localhost"); // buildMimeMessage call below freaks out without this 

    // dug into the internals of commons email 
    // basically send() is buildMimeMessage() + Transport.send(message) 
    // so rather than using Transport, reuse the one that I already have 
    email.buildMimeMessage(); 
    Message m = email.getMimeMessage(); 
    transport.sendMessage(m, m.getAllRecipients()); 
1

bilmiyorum daha iyi çözümler olabilir bu getMailSession() kullanarak ilk e-posta posta oturumunu alma ve setMailSession kullanarak sonraki tüm mesajlara koyarak daha kolay()?

(posta kimlik doğrulaması durumunda) kullanıcı adı ve şifre geçen bir DefaultAuthenticator ile yeni bir posta oturumu yaratacak unutmayınız neyi

Değil% 100 emin. Bu bir samimiyet ama beklenmedik bir şekilde gelebilir. Posta kimlik doğrulaması kullanılıyor, ancak kullanıcı adı ve parola sağlanmadıysa, uygulama bir kimlik doğrulayıcısı ayarladığınızı ve varolan posta oturumunu (beklendiği gibi) kullanacağınızı varsayar. javadoc gelen

olsa şu anlama gelir: -/ http://commons.apache.org/email/api-release/org/apache/commons/mail/Email.html#setMailSession%28javax.mail.Session%29

ayrıca bkz: https://issues.apache.org/jira/browse/EMAIL-96

emin değilim burada devam etmek nasıl ...

İlgili konular