邮箱不可用,客户端无权作为此发件人发送 - 仅第一次

Pet*_*ter 8 email exchange smtp asp.net

我们的用户可以通过单击按钮从我们的 ASP.NET Web 应用程序发送电子邮件。在我们的测试环境中,发生了一件奇怪的事情。

应用程序第一次尝试发送电子邮件时,我们收到异常:

信箱不可用。服务器响应为:5.7.1 客户端无权作为此发件人发送

有趣的是,当用户再次单击按钮时(因此应用程序尝试再次发送电子邮件),它起作用了,并且发送了电子邮件。

如果您稍等片刻,您将再次收到错误消息,但第二次单击将毫无问题地发送电子邮件。如果你能足够快地发送一封新电子邮件,它就会起作用。

这是我们使用的(简化的)代码:

Dim smtpClient As New SmtpClient(<smtp mail server goes here>)
smtpClient.UseDefaultCredentials = True
mailMessage.From = New MailAddress(<from address>)
smtpClient.Send(mailMessage)
Run Code Online (Sandbox Code Playgroud)

不过,这在生产环境中确实有效。我们正在使用 Microsoft Exchange,我们的客户(生产环境)也是如此。

有没有人有过类似的事情(第一次出错,第二次像魅力一样)?

pab*_*blo 2

我以前见过这种情况发生过几次,以下是我看到的原因。请记住,这些仅在大环境中可见。如果您处于单个 DC、单个 Exchange 服务器环境中,这些将不适用。

首先是关于此问题的 MS 文章: http: //support.microsoft.com/kb/895853。在可能的原因下,您可以看到有很多因素在起作用。

您的其中一台 Exchange 服务器中继权限设置不正确。

这很可能是原因。邮件在第一次和第二次尝试时可能会采取不同的路线,虽然这听起来可能很愚蠢,但对两条消息运行消息跟踪,看看它们是否通过同一服务器。如果您看到不同的路径,请检查错误路径上的设置,可能是未检查经过身份验证的用户的简单允许中继。

AD权限错误

您必须对具有电子邮件发件人地址的帐户具有“代理发送”权限。如果它有时工作,但其他时候不工作,那么邮件路由的路径可能不同,它们之间的权限也不同。

身份验证无法正常工作。

在脚本的第一个实例中,身份验证可能会失败,在这种情况下,邮件会因为您没有权限而被拒绝。第二次运行脚本时身份验证成功。不幸的是,我对 ASP 的了解不够深,无法理解上面的代码或建议如何修复它。smtpClient.UseDefaultCredentials 可能不是适合您的环境的正确代码。仅当服务器请求时才会进行身份验证,并将使用本地登录用户的凭据。如果服务器第一次没有要求身份验证,那么您将不会获得身份验证,并且可能没有发送权限。尝试将其更改为始终进行身份验证的代码。

您的 DC 或全局目录之一已过时或包含错误信息。

这种情况很少见,但您的域控制器的信息可能不同步。通过 ldap 或 adsi edit 仔细检查发件人和收件人帐户的服务器信息,并确保它们在所有 DC 中都相同。

在所有情况下,检查 Exchange 服务器上的日志并确保所有字段都启用 SMTP 日志记录。使用消息跟踪来准确查看该消息正在访问哪些服务器。