javax 邮件超出发送限制:SMTPSendFailedException

A H*_*ard 5 java smtp jakarta-mail

我正在尝试使用 javaxmail 通过 for 循环发送 500 多封电子邮件 - 没有垃圾邮件,电子邮件地址已知并经过认证。

目的是在发送 (Thread.sleep(...)) 之间有一点时间延迟(1 - 5 秒),这样邮件就不会自动进入垃圾邮件文件夹。但在通过将其发送到我自己的电子邮件地址进行测试一段时间后,我不断收到此错误:

com.sun.mail.smtp.SMTPSendFailedException: 554 5.7.0 无法发送您的邮件。超出了允许的传出消息数量的限制。稍后再试。

我正在使用我们自己的 smtp 服务器。

    properties.setProperty("mail.smtp.auth", "true");
    properties.setProperty("mail.smtp.host", host);
    properties.setProperty("mail.smtp.port", "25");
Run Code Online (Sandbox Code Playgroud)

我想知道“稍后再试”的时间间隔是多长?

有谁知道极限吗?

此外,任何如何避免这种情况的建议都会有所帮助。

Has*_*ash 3

在大多数情况下,您应该尽量避免群发邮件(无论如何,垃圾邮件过滤器对大量邮件都具有很大的歧视性),但在您的情况下,有一个更简单的答案。首选分布式邮件处理,具有基于时间的限制率等。

您可能遇到的问题是(如错误消息所述)您试图超出外发邮件数量的限制。(您可以通过检查getCommand 和 getReturnCode来获取更多信息。)如果您使用带有策略的 POSTFIX,这里是外发邮件限制配置的示例:

http://wiki.policyd.org/accounting?s[]=limit

您可以通过重新配置 SMTP 服务器来“修复”此问题。尽管我的建议是(为了避免进入阻止列表)拆分整个电子邮件发送过程

  • 创建一个(每小时?)调用邮件发送进程的 cron 作业
  • 在此过程中,您应该有一个限制(例如:100)并尝试发送邮件
  • 如果邮件已发送,那就没问题,否则下次 cron 运行时,您可以尝试重新发送它(使用最大重试次数和一些日志信息)

在大多数情况下,这些限制是为了您自身的安全。如果出现软件错误等,这些可以防止您进入黑名单。