【问题标题】:How to send multiple emails in one session?如何在一个会话中发送多封电子邮件?
【发布时间】:2011-05-19 02:20:48
【问题描述】:

我想向不同的收件人发送数千封不同的电子邮件,并想打开与我的 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();

【问题讨论】:

  • 保持会话打开并发送 1000 封电子邮件并最后关闭会话。
  • 您知道公共电子邮件是否可以做到这一点?
  • 好像不是这样...我使用 JavaMail 完整版。

标签: java email apache-commons-email


【解决方案1】:

您可以使用之前的代码,但添加以下代码以获取基础会话

email.getMailSession();

您可以通过

添加额外的 java 邮件属性
email.getMailSession().getProperties().put(<key>, <value>);

【讨论】:

    【解决方案2】:

    这是我的性能测试课。使用一个连接发送邮件比每次重新打开连接快 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】:

      看看http://java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html。有一个示例显示如何发送电子邮件。在 Transport 上调用 close() 之前,您应该能够发送更多信息。

      【讨论】:

        猜你喜欢
        • 2015-05-17
        • 1970-01-01
        • 2011-02-08
        • 2011-09-06
        • 2023-01-31
        • 2011-07-14
        • 2018-12-08
        • 2016-07-17
        • 1970-01-01
        相关资源
        最近更新 更多