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


我们的用户只需点击一下按钮就可以从我们的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)

但这确实适用于生产环境。我们使用的是Microsoft Exchange,我们的客户(生产环境)也是如此。

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


7
2018-02-21 09:08




什么smtp /电子邮件服务器? - pablo
@pablo:Microsoft Exchange - Peter


答案:


我之前已经看过几次,这是我见过的原因。请记住,这些只能在大型环境中看到。如果您在单个直流,单一交换服务器环境中,则这些将不适用。

首先,这是关于此的MS文章: http://support.microsoft.com/kb/895853。在可能的情况下,你可以看到有很多东西在起作用。

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

这是最可能的原因。邮件可能在第一次和第二次尝试时采用不同的路由,而这可能听起来对两条消息进行愚蠢的邮件跟踪,看看它们是否通过同一台服务器。如果你看到不同的路径检查坏的路径上的设置,可能是一个简单的允许中继用于经过身份验证的用户未检查。

AD权限是错误的

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

身份验证无法正常运行。

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

您的某个DC或全局目录已过期或信息不完整。 

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

在所有实例中,检查Exchange服务器上的日志,并确保启用所有字段的SMTP日志记录。使用邮件跟踪可以准确查看此邮件所针对的服务器。


2
2018-02-22 10:21





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


1
2018-02-22 10:48





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


1
2018-04-21 22:19





试试这个 :

    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

-1
2018-05-29 12:26



这没有任何帮助。请阅读问题。 - Peter