应用程序第一次尝试发送电子邮件时,我们会收到异常:
信箱不可用.服务器响应为: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,我们的客户(生产环境)也是如此.
有没有人有类似的东西(第一次出错,第二次像魅力一样)?
解决方法
首先,这里是MS文章:http://support.microsoft.com/kb/895853.在可能的情况下,你可以看到有很多东西在起作用.
您的一个Exchange服务器中继权限未正确设置.
这是最可能的原因.邮件可能在第一次和第二次尝试时采用不同的路由,而这可能听起来对两条消息进行愚蠢的邮件跟踪,看看它们是否通过同一台服务器.如果你看到不同的路径检查坏的路径上的设置,可能是一个简单的允许中继用于经过身份验证的用户未检查.
AD权限是错误的
您必须具有来自电子邮件中发件人地址的帐户的“代理发送”权限.如果它有时工作,而不是其他工作,那么它可能是邮件路由的不同路径,它们之间具有不同的权限.
身份验证无法正常运行.
在脚本的第一个实例中,可能是身份验证失败,在这种情况下,由于您没有权限,邮件被拒绝.在脚本的第二次运行中,身份验证成功.不幸的是,我不太了解ASP,无法理解上面的代码或建议如何解决它. smtpClient.UseDefaultCredentials可能不是您环境的正确代码.这仅在服务器请求时进行身份验证,并将使用本地登录用户的凭据.如果服务器第一次没有要求身份验证,那么您将不会被授权,也可能没有发送权限.尝试将其更改为始终进行身份验证的代码.
您的某个DC或全局目录已过期或信息不完整.
这种情况很少见,但您的域控制器可能存在不同步信息.通过ldap或adsi编辑仔细检查来自和来自帐户的服务器信息,并确保它们在所有dcs中是相同的.
在所有实例中,检查Exchange服务器上的日志,并确保启用所有字段的SMTP日志记录.使用邮件跟踪可以准确查看此邮件所针对的服务器.