如何在一个会话中发送多个电子邮件?

Tim*_*the 8 java email apache-commons-email

我想向不同的收件人发送数千封不同的电子邮件,并希望打开与我的SMTP的连接并保留它.我希望这更快,然后重新打开ervy邮件的连接.我想使用Apache Commons Email,但如果有必要,可以回退到Java Mail API.

现在我正在这样做,每次打开关闭连接:

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("test@example.com");
email.addTo(to);
email.setSubject(subject);
email.setHtmlMsg(htmlMsg);
email.send();
Run Code Online (Sandbox Code Playgroud)

Tim*_*the 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();
Run Code Online (Sandbox Code Playgroud)