我想向不同的收件人发送数千封不同的电子邮件,并希望打开与我的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();
答案 0 :(得分: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();
答案 1 :(得分:3)
您可以使用之前的代码,但添加以下内容以获取基础会话
email.getMailSession();
您可以通过
添加额外的java邮件属性email.getMailSession().getProperties().put(<key>, <value>);
答案 2 :(得分:1)
看看http://java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html。有一个示例显示如何发送电子邮件。您应该能够在传输上调用close()之前发送更多信息。
答案 3 :(得分:0)
完全不需要Xtra代码,只需将所有电子邮件收件人放入并用逗号分隔即可。
MimeMessage pesan = new MimeMessage(session);
pesan.setFrom(new InternetAddress("email_from@host.com"));
pesan.setRecipients(Message.RecipientType.TO, InternetAddress.parseHeader("first_email@host.com,second_email@host.com,dst_email@host.com",false));
并为
Message.RecipientType.CC
和Message.RecipientType.BCC
如果有多个电子邮件收件人
希望能有所帮助:)..