javax 邮件超出发送限制:SMTPSendFailedException

javax mail exceeding sending limit : SMTPSendFailedException

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

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

com.sun.mail.smtp.SMTPSendFailedException: 554 5.7.0 Your message could not be sent. The limit on the number of allowed outgoing messages was exceeded. Try again later.

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

    properties.setProperty("mail.smtp.auth", "true");
    properties.setProperty("mail.smtp.host", host);
    properties.setProperty("mail.smtp.port", "25");

我想知道"try again later"的时间跨度是多少?

有人知道极限吗?

还有任何关于如何避免这种情况的建议都会有所帮助。

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

您可能遇到的问题是(如错误消息所述)您试图超出外发邮件数量的限制。 (您可以通过检查 getCommand and getReturnCode 获得更多信息。)如果您将 POSTFIX 与 policyd 一起使用,这里是外发邮件限制配置的示例:

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

您可以通过重新配置您的 SMTP 服务器来 "fix" 这个问题。尽管我的建议是(为了避免进入黑名单)拆分您的整个电子邮件发送过程:

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

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

如果您超出了用户的电子邮件发送限制,您可能会看到一条错误消息,例如:

  • 5.7.0 无法发送您的消息。超出了允许传出消息的数量限制。稍后再试。
  • 抱歉,您的消息接收人数过多。

为了保持系统健康和您的帐户安全,对用户可以发送的邮件数量进行了限制。限制限制每小时发送的消息数量和每条消息的收件人数量。达到这些限制之一后,用户将无法发送新邮件,但他们仍然可以访问自己的帐户并接收传入的电子邮件。

当前电子邮件限制

  • 每小时最多 150 条消息。
  • 每封邮件最多 99 个收件人。

各种ISP供应商给出了限制。你可以从这里看看:SMTP Sending Limit and Email Rate Limits for ISPs - Verizon, Comcast, EarthLink, etc.

Plesk Documentation中,你会得到Custom Limits for Service PlansLimits for SubscriptionsLimits for DomainsLimits for Mailboxes

100 messages will be sent successfully, but starting from 101 message for the same hour Webmail will show the following error.

资源Link:

How outgoing messages limit works?

这里有很多人遇到同样的问题,并且尝试了很多解决方案的很多信息。 https://productforums.google.com/forum/#!topic/gmail/yrEDNJ3fChs

这里还有一个 link 批量发件人指南: https://support.google.com/mail/answer/81126?hl=en