如何有效地使用javax.mail API发送批量邮件?&我们可以使用经过身份验证的重用会话来提高速度吗?
问题内容:
我可以使用javax.mail API发送邮件。但是,这里的问题是平均每一封邮件大约需要4.3秒才能发送到目的地。
如果我要依次发送20封邮件,则大约需要86.599秒。对于我的要求,这种方法将行不通。我正在寻找一种可以在更短的时间内发送大量邮件的方法。
当我查看调试日志时,API尝试针对发送的每条消息向SMTP服务器进行身份验证。但是我只创建一个会话,并且对我发送的所有邮件都使用相同的会话。现在我的问题是,每次向smtp服务器进行身份验证时,这是否是一个开销过程?有没有更好的方法?
以下是您可能会发现有用的日志跟踪。
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
250 ENHANCEDSTATUSCODES
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
请让我知道您对此的想法,并对此表示任何帮助。
-纳伦德拉
问题答案:
您如何发送消息?该JavaMail的常见问题表明,静态Transport.send
方法将打开每封邮件建立新的连接,因为它是创建一个合适的便捷方法Transport
的实例,将其连接,调用sendMessage
,然后再次关闭连接。如果您从那里获得了自己的Transport
实例,则Session
可以连接一次,然后sendMessage
反复调用以在一个连接上发送多个消息,最后再发送一次close
。遵循(未试用)的内容:
Transport t = session.getTransport();
t.connect();
try {
for(Message m : messages) {
m.saveChanges();
t.sendMessage(m, m.getAllRecipients());
}
} finally {
t.close();
}