gpt4 book ai didi

java - 如何有效地使用 javax.mail API 发送群发邮件? &我们可以使用重用经过身份验证的 session 来提高速度吗?

转载 作者:太空狗 更新时间:2023-10-29 22:37:33 24 4
gpt4 key购买 nike

我可以使用 javax.mail API 发送邮件。但这里的问题是每封邮件平均需要大约 4.3 秒才能发送到目的地。

如果我按顺序发送 20 封邮件,大约需要 86.599 秒。对于我的要求,这种方法行不通。我正在寻找一种可以在更短时间内发送大量邮件的方法。

当我查看调试日志时,API 正在尝试针对它发送的每条消息向 SMTP 服务器进行身份验证。但是我只创建了一次 session ,并且对我发送的所有邮件都使用了同一个 session 。现在我的问题是,每次向 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 FAQ建议静态 Transport.send 方法将为每条消息打开一个新连接,因为它是创建合适的 Transport 实例、连接它、调用 的便捷方法>sendMessage 然后再次关闭连接。如果您从 Session 获得自己的 Transport 实例,您可以连接一次,然后重复调用 sendMessage 以在一个连接上发送多条消息,并且最后关闭它。类似(未经测试)的内容:

Transport t = session.getTransport();
t.connect();
try {
for(Message m : messages) {
m.saveChanges();
t.sendMessage(m, m.getAllRecipients());
}
} finally {
t.close();
}

更新为使用 try with resources block :

try (Transport t = session.getTransport()) {
t.connect();
for(Message m : messages) {
m.saveChanges();
t.sendMessage(m, m.getAllRecipients());
}
}

关于java - 如何有效地使用 javax.mail API 发送群发邮件? &我们可以使用重用经过身份验证的 session 来提高速度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13287515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com