希望这个问题有道理。我有一些C#代码,它们根据用户名,密码和域发送电子邮件。我如何知道它正在使用哪种类型的身份验证?
当我查看SmtpClient.Credentials属性的MSDN页面时,它表示如果使用基本身份验证,则凭据将以纯文本形式发送。以下代码是否使用基本身份验证? MSDN页面:https://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.credentials(v=vs.110).aspx
SmtpClient smtpClient = new SmtpClient();
NetworkCredential cred = new NetworkCredential("username", "password");
MailMessage message = new MailMessage();
MailAddress fromEmail = new MailAddress("from@yourdomain.com");
smtpClient.Host = "mail.mydomain.com";
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = cred;
message.From = fromEmail;
message.Subject = "my subject";
message.IsBodyHtml = true;
message.Body = "hello world!";
message.To.Add("toEmail@anything.com");
smtpClient.Send(message);
答案 0 :(得分:1)
通常SmtpClient
将始终选择“最佳”可用身份验证方法(SMTP服务器将在EHLO
命令的答案中告知)。因此,如果不知道服务器实际支持什么,我们就无法真正回答。
SmtpClient
可以选择以下方法:谈判,NTLM,摘要和登录
以下是关于如何强制SmtpClient
使用特定身份验证方法的一些有趣读物(稍微有点笨蛋)。http://blogs.msdn.com/b/knom/archive/2008/04/16/hacking-system-net-mail-smtpclient.aspx
答案 1 :(得分:1)
此方法将使用基本身份验证,并将通过不安全的通道发送代码。这是因为:
SmtpClient
类仅支持RFC 3207中定义的基于传输层安全性的SMTP服务扩展。在此模式下,SMTP会话从未加密的通道开始,然后客户端向服务器发出STARTTLS命令,以使用SSL切换到安全通信。有关详细信息,请参阅Internet工程任务组(IETF)发布的RFC 3207。
您可以在以下情况下使用SSL:
EnableSsl
属性指定是否使用SSL访问指定的SMTP邮件服务器。
另请注意
您可以使用ClientCertificates指定应使用哪些客户端证书来建立SSL连接。 ServerCertificateValidationCallback允许您拒绝SMTP服务器提供的证书。 SecurityProtocol属性允许您指定要使用的SSL协议的版本。