2010-12-02 2 views
7

Я хочу отправить тысячи разных писем различным получателям и хотел бы открыть соединение с моим SMTP и провести его. Надеюсь, что это быстрее, чем возобновить соединение для почты ervy. Я хотел бы использовать Apache Commons Email для этого, но при необходимости может вернуться к API Java Mail.Как отправить несколько писем за один сеанс?

Сейчас I'am делает это, то, что открывает и закрывает соединение каждый раз:

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

продержать сессию открытой и отправить 1000 электронные письма и ** наконец ** закрыть сеанс. – 2010-12-02 12:09:15

+0

Знаете ли вы, если это возможно с электронной почтой сообщества? – 2010-12-02 12:23:29

ответ

18

Вот мой класс тестирования производительности. Отправка почты с использованием одного соединения в 4 раза быстрее, а затем повторное открытие соединения каждый раз (что происходит, когда вы используете обычную почту). Производительность может быть увеличена путем использования нескольких потоков.

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

Вы можете использовать ранее код, но добавить следующее, чтобы получить Базовую сессию

email.getMailSession(); 

Вы можете добавить дополнительные свойства Java мейлов

email.getMailSession().getProperties().put(<key>, <value>); 
Смежные вопросы