我有一个程序,我正在努力找出如何做到这一点。目前我正在使用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用户名和密码并发送消息。
由于
答案 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;只要你没有设置凭证就应该工作。您可以同时使用它们,但它们的使用顺序可能会重置另一个。