如何在没有硬编码NetworkCredentials的情况下使用System.Net.Mail?

时间:2014-10-18 01:04:36

标签: c# email system.net.mail

我有一个程序,我正在努力找出如何做到这一点。目前我正在使用System.Net.Mail发送smtp消息。我们的smtp服务器(office 365)需要身份验证才能发送外发邮件。我们的Office 365通过单点登录和AD与我们的域配对,因此我们的凭据与Microsoft Office 365同步。如何使用Kerberos令牌发送邮件,而无需将NetworkCredential basicCredential = new NetworkCredential(用户名,密码)置于普通模式文本?这甚至可能吗?

目前通过

发送邮件
NetworkCredential basicCredential = new NetworkCredential("<<username>>", strPassword);

client.Credentials = basicCredential;
client.EnableSsl = true;
client.Send(message);

基本上我希望应用程序获取我的Windows用户名和密码并发送消息。

由于

1 个答案:

答案 0 :(得分:0)

我不知道您的技术背景,因此退回关于纯文本密码和Kerberos使用的评论...

在使用SMTP服务器进行身份验证时,根本不使用Kerberos。 Kerberos表示客户端和服务器都与Active Directory控制器进行通信以进行身份​​验证。 Kerberos不是SMTP规范的一部分,但SMTP服务器可以使用Active Directory进行验证,类似于NTLM的工作方式(服务器是唯一与AD通信的人)。

只要您使用SSL发送电子邮件,就应该没问题。只要传输是安全的,凭证是有效载荷中的纯文本也无关紧要。如果由于TLS而遇到连接到Office365的问题(收到5.7.1错误),可以在client.Send()...

之前尝试
client.TargetName = "STARTTLS/smtp.office365.com";

如果您尝试使用当前登录的用户凭据,则&#34; UseDefaultCredentials = true&#34;只要你没有设置凭证就应该工作。您可以同时使用它们,但它们的使用顺序可能会重置另一个。