我试图通过使用集成Windows身份验证的域SMTP服务器发送电子邮件。当明确指定凭据,一切工作正常:为什么忽略SmtpClient.UseDefaultCredentials?
using (var client = new SmtpClient("<Server>"))
{
client.Credentials = new NetworkCredential("<User name>", "<Password>");
client.EnableSsl = true;
client.Send(...);
}
SMTP服务器日志显示EHLO,STARTTLS,STARTTLS和EHLO,然后AUTH,MAIL等
时,在另一方面,默认凭据使用:
using (var client = new SmtpClient("<Server>"))
{
client.UseDefaultCredentials = true;
client.EnableSsl = true;
client.Send(...);
}
的
SmtpException
被抛出,与消息;“发送邮件失败”。内
IOException
信息是:“无法读取从传输连接数据:一个现有的连接被强行关闭远程主机”,和内-内
SocketException
是:“现有连接被远程主机强制关闭“。
SMTP服务器日志显示EHLO,STARTTLS,STARTTLS和EHLO,然后什么也没有。
如果选项从源代码移到App.config configuration/system.net/mailSettings/smtp/network
,并且每当指定端口号时,结果都完全相同(第一个示例成功,第二个失败)。
鉴于:
according to the documentation,
SmtpClient.UseDefaultCredentials
“[G] ETS或设置,其控制是否在的DefaultCredentials与请求发送的布尔值”,即“对于一个客户端应用程序[
CredentialCache.DefaultCredentials
]通常是运行该应用程序的用户的Windows凭据(用户名,密码和域)“,并且该测试的c颂歌是一个Windows窗体从同一个账户其凭据上面的第一个样品中指定运行客户端应用程序,
为什么第二次样品失败,而第一个作品?
在论坛上it was suggested,该问题可能是通过SMTP服务器不支持NTLM原因。通过EHLO服务器,似乎支持NTLM ,其中一条响应行是250-AUTH GSSAPI NTLM
。
这很有意义,因为如果您不这样做,凭据可能设置为空 – BumbleB2na
它有帮助。部分。现在引发了一个新的异常:“SMTP服务器需要安全连接或客户端未通过身份验证。服务器响应是:5.7.3客户端未通过身份验证。“ –
您是否指定了EnableSsl? –