- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我可以使用 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/
我熟悉netbeans中的ftp,我将我的项目发送到多个服务器,所以我有多个远程连接。进行更改后,需要一段时间才能将项目重新配置到下一个远程连接并将项目发送到服务器上的位置。此外,每个远程连接设置都完
1、最近公司实现部分数据统计、分析的报表进行每天定时发送到相关人员的邮箱之中的配置代码被人为删除了,需要重新恢复该功能,由于原先是在linux上使用shell配置发送,实在是太繁琐,所以准备使用py
我是一名优秀的程序员,十分优秀!