8

何千もの異なる電子メールを異なる受信者に送信し、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();
4

3 に答える 3

18

これが私のパフォーマンステストクラスです。1 つの接続を使用してメールを送信すると、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();
于 2010-12-04T17:39:59.923 に答える
3

以前のコードを使用できますが、以下を追加して基になるセッションを取得します

email.getMailSession();

追加のJavaメールプロパティを追加できます

email.getMailSession().getProperties().put(<key>, <value>);
于 2012-10-15T16:27:25.650 に答える
1

http://java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.htmlをご覧ください。電子メールを送信する方法を示す例があります。Transport で close() を呼び出す前に、さらに送信できるはずです。

于 2010-12-02T12:23:51.437 に答える