System.Net.Mail.SmtpClient在发送电子邮件时使用什么类型的身份验证?

时间:2015-01-22 23:50:36

标签: c# .net email

希望这个问题有道理。我有一些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);

2 个答案:

答案 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协议的版本。