了解 Exchange 消息速率限制 - 4.4.2 此客户端的消息提交速率已超出配置的限制

了解 Exchange 消息速率限制 - 4.4.2 此客户端的消息提交速率已超出配置的限制

我在通过 Exchange 2010 的端口 587 中继电子邮件的应用程序上遇到了这个问题:错误提示为 4.4.2 此客户端的消息提交率已超出配置的限制。

我知道这是由于我的接收器连接器的 MessageRateLimit 造成的。我检查了限制为 5 和用户限制(MessageRateSource),我认为通过将限制增加到 50 或 100 可能会解决问题。但是我想更多地了解此配置(如果我现在将其设置为 50,而明天又出现同样的错误怎么办?)

基于MS 站点,这是限制“单个源每分钟可以发送的最大消息数”的限制设置。所以我使用 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)。然后我检查了跟踪日志资源管理器,发现没有其他使用该应用程序 ID 提交的电子邮件。那么 Exchange 是否将用户计数存储在某个地方,我需要重置它?我如何跟踪电子邮件提交?它似乎没有出现在跟踪日志资源管理器中,所以正如我之前担心的那样,即使我将其更改为 50,它也可能会遇到相同的错误,我无法进一步排除故障,因为无法跟踪它们。

抱歉,这个问题有点长。

如果有人能给我提供一些线索我将不胜感激。

答案1

我要把这个问题反过来问。当客户向我提出这个问题时,我首先要问的是为什么消息要通过 Exchange 进行中继?Exchange 的批量电子邮件功能非常差,而且有更好的选择。为什么应用程序不自己发送电子邮件,或者通过自己的服务器而不是 Exchange 发送电子邮件?

如果您的应用程序向外部收件人发送了太多电子邮件,以至于超出了限制,那么我不希望它出现在 Exchange 附近。它被列入黑名单只是时间问题。拥有自己的 IP 地址、自己的 PTR 和 DNS,然后自己发送电子邮件。

我承认这不是您想要的答案,但通常以另一种方式思考问题可以让您更好地处理该问题。

答案2

交换内的节流功能非常强大,但据我所知很难追踪。

根据我的经验,设置连接器的限制是相当困难的,因为可能只有一小部分用户发送大量数据。对少数用户施加连接器的限制会增加被盗账户滥用的风险。

限制策略

当处理较大的消息量时,您应该确定您的最高消息速率,并将其设置为您的接收连接器。这是您的全球的限制。

接下来,你应该首先建立一个限制策略,将限制降低到一个适中的值(比如 5 条消息/分钟),如下所示组织政策。

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

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

您可以在以下位置获取有关政策的更多信息文档


检测极限

虽然这对于诊断来说是一个很好的点,但我不会开始尝试处理在服务器端达到极限的情况。

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

因此,我强烈建议您在应用程序中关注正确的错误处理和排队机制。查看获取 SMTP 对话消息并在发生故障时记录它们的方法。这将使生产中的诊断变得快速而简单 - 不仅适用于这种特定情况。


正如@seembee所说,发送大量邮件会增加被列入黑名单的风险。绕过 Exchange 并使用专用的群发邮件主机时,仍然会存在这种风险。我完全同意发送新闻通讯之类的东西。但是,当您发送诸如发票之类的重要邮件时,这些邮件甚至可能对邮件流有法律限制,我不建议绕过 Exchange 基础设施。

相关内容