邮箱不可用,客户端没有权限作为此发件人发送 – 仅在第一次

我们的用户可以通过点击一个button发送来自ASP.NET Web应用程序的电子邮件。 在我们的testing环境中,出现了一件奇怪的事情。

应用程序第一次尝试发送电子邮件,我们得到的例外:

信箱不可用。 服务器响应是:5.7.1客户端没有权限发送此发件人

有趣的是,当用户再次点击button(所以应用程序试图再次发送电子邮件),它的工作原理,并发送电子邮件。

如果您稍等片刻,您将再次收到错误消息,但是第二次点击则可以毫无问题地发送电子邮件。 如果你的速度足够快,可以发送一封新邮件。

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

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

尽pipe如此,这在生产环境中仍然有效。 我们正在使用Microsoft Exchange,我们的客户也是如此(生产环境)。

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

我以前见过这种情况,这是我见过的原因。 请记住,这些只在大的环境中才能看到。 如果您在单个直stream,单交换服务器环境中,这些将不适用。

首先在这里是MS文章: http : //support.microsoft.com/kb/895853 。 在可能的策展下,你可以看到有很多事情在发挥。

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

这是最可能的原因。 邮件可能会在第一次和第二次尝试时采取不同的路由,而这可能听起来愚蠢的邮件跟踪两个邮件,看看他们是否通过同一台服务器。 如果你看到不同的path检查坏的设置,可能是一个简单的允许继电器authentication用户不被检查。

AD权限是错误的

您的电子邮件地址必须具有“代理发送”权限。 如果它有时是有效的,而不是其他的,那么在邮件路由上它们可能是不同的path,它们之间有不同的权限。

身份validation无法正常工作。

在脚本的第一个例子中,可能是身份validation失败,在这种情况下邮件被拒绝,因为您没有权限。 在脚本的第二次运行中,validation是成功的。 不幸的是,我不太了解ASP以上的代码,或者build议如何解决这个问题。 smtpClient.UseDefaultCredentials可能不是您的环境正确的代码。 这将仅在服务器请求时进行authentication,并将使用本地login用户的凭证。 如果服务器第一次没有要求身份validation,那么你不会被authentication,可能没有权限发送。 尝试将其更改为总是进行身份validation的代码。

您的DC或全球目录之一已过期或信息不佳。

这种情况很less发生,但您的域控制器可能有不同步的信息。 通过ldap或adsi编辑,仔细检查来自和去往帐户的服务器信息,并确保它们在所有dcs中都是相同的。

在所有情况下检查交换服务器上的日志,并确保所有字段都启用了SMTP日志logging。 使用消息跟踪来查看该消息正在击打哪个服务器。

在我看来,您可能在邮件服务器上启用了SMTP身份validation,但未将其包含在代码中。 在这种情况下,您第一次尝试发送消息时,它会有效地执行身份validation,但无法发送消息。 下次用户通过身份validation并且消息通过。

对我来说,问题是我的configuration文件已经有指定的“发件人”帐户。 当我尝试在我的代码中执行mailMessage.From = New MailAddress(<from address>)时,它抛出,因为我的代码中的“from”电子邮件与我的configuration文件中的“from”电子邮件不匹配。

尝试这个 :

  Dim client = New SmtpClient(<smtp mail server goes here>) MailerManager.ServerSMTP = client.Host.ToString() Try client.Send(Mail) Catch ex As Exception 'Error Message End Try