Ars*_*nko 7 c# smtp credentials smtpclient
我正在尝试通过使用集成 Windows 身份验证的域 SMTP 服务器发送电子邮件。明确指定凭据时,一切正常:
using (var client = new SmtpClient("<Server>"))
{
client.Credentials = new NetworkCredential("<User name>", "<Password>");
client.EnableSsl = true;
client.Send(...);
}
Run Code Online (Sandbox Code Playgroud)
SMTP 服务器日志显示 EHLO、STARTTLS、STARTTLS 和 EHLO,然后是 AUTH、MAIL 等。
另一方面,当使用默认凭据时:
using (var client = new SmtpClient("<Server>"))
{
client.UseDefaultCredentials = true;
client.EnableSsl = true;
client.Send(...);
}
Run Code Online (Sandbox Code Playgroud)
在SmtpException
被抛出,与消息“发送邮件失败。”
内部IOException
消息是:“无法从传输连接读取数据:远程主机强行关闭了现有连接。”和
内部内部SocketException
是:“远程主机强行关闭了现有连接”。
SMTP 服务器日志显示 EHLO、STARTTLS、STARTTLS 和 EHLO,然后什么都没有。
如果选项从源代码移动到 App.config configuration/system.net/mailSettings/smtp/network
,无论是否指定端口号,结果都是完全相同的(第一个示例成功,第二个示例失败)。
鉴于:
根据文档,SmtpClient.UseDefaultCredentials
“[g]ets 或设置一个布尔值来控制是否随请求发送 DefaultCredentials”,即
“对于客户端应用程序,[ CredentialCache.DefaultCredentials
] 通常是运行该应用程序的用户的 Windows 凭据(用户名、密码和域)”,并且
被测试的代码是一个 Windows 窗体客户端应用程序,它运行在同一个帐户中,其凭据在上面的第一个示例中指定,
为什么第二个样本失败,而第一个样本有效?
在论坛上有人建议该问题可能是由 SMTP 服务器不支持 NTLM 引起的。由EHLOing服务器,似乎NTLM被支撑时,响应线是以下之一250-AUTH GSSAPI NTLM
。
如果UseDefaultCredentials设置为 true,则并不意味着使用Credentials属性中的值。这意味着使用“当前登录用户”的凭据,在IIS Web 应用程序的情况下通常是应用程序池标识,在 Windows 服务的情况下是服务的标识,在情况下桌面应用程序,它是登录到 Windows 的用户的身份。
如果UseDefaultCredentials为 false(默认值),则Credentials属性将在该属性设置了值时使用,否则将匿名发送邮件。
请参阅 Microsoft 文档https://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.usedefaultcredentials ( v= vs.110) .aspx(在备注部分)。
我认为您实际上还必须指定凭据。UseDefaultCredentials 只是一个标志,告诉 SMTPClient 使用提供给 Credentials 属性的凭据。
client.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
Run Code Online (Sandbox Code Playgroud)
这里有一些其他的事情可以尝试:
归档时间: |
|
查看次数: |
23045 次 |
最近记录: |