了解Exchange邮件速率限制 – 4.4.2此客户端的邮件提交速率已超出configuration的限制

我在我的应用程序中通过Exchange 2010的端口587转发电子邮件时出现此问题:错误提示是4.4.2此客户端的邮件提交速率已超出configuration的限制。

我明白这是由于我的接收器连接器的MessageRateLimit。 我检查了限制是5和用户(MessageRateSource)的限制,我认为这个问题可能会通过增加限制到50或100固定。但是我想更多地了解这个configuration(如果我现在设置为50而且明天又出现同样的错误?)

基于MS站点 ,这是限制设置,以限制“单个源可以发送的最大每分钟消息数”。 所以我testing使用PowerShell脚本(不知道它是否重要,所以我包括下面的部分代码):

$SMTPClient = New-Object System.Net.Mail.SmtpClient( $emailSmtpServer , $emailSmtpServerPort ) $SMTPClient.EnableSsl = $true $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($emailSmtpUser , $emailSmtpPass ); #[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { return $true } $SMTPClient.Send( $emailMessage ) 

在这个脚本中,我首先用另一个用户ID提交电子邮件,结果是:我可以在几分钟内将电子邮件提交给同一个接收者5次以上。 那么为什么限制不适用于这种情况呢?

之后,我尝试了我的应用程序ID的脚本,同样的错误(4.4.2)提示。 然后,我检查了跟踪日志资源pipe理器,发现没有其他电子邮件提交与该应用程序ID。 那么Exchange存储用户是否需要重新设置一些位置? 我怎样才能跟踪电子邮件提交? 它似乎没有出现在跟踪日志资源pipe理器中,所以如前所述,即使我将其更改为50,也可能会遇到同样的错误,但无法追踪它们,我无法进一步排除故障。

对不起,问题有点长。

感谢任何人都可以提供一些线索。

我要翻开这个问题。 当客户问我这个问题时,我首先要问的是为什么通过Exchange传递的信息? Exchange使得一个非常糟糕的邮件发送者,并有更好的select。 为什么不是应用程序自己发送电子邮件,还是通过自己的服务器而不是Exchange?

如果你有一个应用程序向外部收件人发送这么多的电子邮件,它正在绊倒节stream限制,那么我不希望在Exchange附近的任何地方。 被列入黑名单只是时间问题。 自己的IP地址,自己的PTR和DNS,并发送电子邮件本身。

我不承认你正在寻找的答案,但我经常以另一种方式来思考这个问题,这样可以让你更好地处理这个问题。

在交换内部进行节stream是相当有效的,但是很难跟踪。

根据我的经验,对连接器设置限制是相当有问题的,因为您可能只有很小的发送大量用户的子集。 为less数用户推出连接器的限制会增加被入侵的帐户滥用的风险。

限制政策

处理更高的卷时,应确定最高的消息速率,并将其设置为接收连接器。 这是你的全球限制。

接下来,您应该首先制定一个节stream政策,将组织政策的限制降低到中等水平(如5 msg / min)。

最后,您可以添加其他策略,以提高特定用户的发送限制。

这不会向所有可以访问给定连接器的用户公开“群发邮件”限制,并允许更精细的控制。

您可以在文档中获得有关策略的更多信息。


检测限制

虽然这是一个很好的诊断,我不会开始尝试处理达到服务器端的限制。

发送邮件的成功可能会有更多的结果。 达到费率限制只是其中之一。 而您的应用程序需要处理这些情况,以及整个邮件服务器由于停机而可能无法访问的情况。

因此,我强烈build议把重点放在适当的error handling和应用程序中的排队机制上。 查看获取SMTP对话消息的方法,并在发生故障时logging它们。 这将使生产过程中能够快速简单地进行诊断 – 不仅适用于这种特定情况。


正如@seembee所说,大量发送会增加被列入黑名单的风险。 绕过交换和使用专门的群发邮件主机时仍然存在这种风险。 像通讯发送我会完全同意。 但是,当你发送重要的邮件,如发票,甚至可能有邮件stream的法律限制,我不会build议绕过交换infrasructure。