我正在开发一个程序,试图找出如何做到这一点。目前,我正在使用System.Net.Mail发送smtp消息。我们的smtp服务器(office 365)需要身份验证才能发送外发邮件。我们的office 365通过单点登录和AD与我们的域配对,因此我们的凭据与Microsoft Office 365同步。如何使用Kerberos令牌发送邮件,而不必以纯文本形式输入新的basicCredential = NetworkCredential (用户名、密码)?这有可能吗?
当前通过以下方式发送邮件
NetworkCredential basicCredential = new NetworkCredential("<<username>>", strPassword);
client.Credentials = basicCredential;
client.EnableSsl = true;
client.Send(message);基本上,我希望应用程序接受我的windows用户名和密码,并发送消息。
谢谢
发布于 2014-10-18 10:38:21
我不知道你的技术背景,所以先回过头来看看关于纯文本密码和Kerberos用法的评论...
在使用SMTP服务器进行身份验证时,根本不使用Kerberos。Kerberos意味着客户端和服务器都与Active Directory控制器通信以进行身份验证。Kerberos不是SMTP规范的一部分,但是SMTP服务器可以使用类似于NTLM工作方式的Active Directory进行验证(服务器是唯一与AD通信的服务器)。
只要您使用SSL发送电子邮件,就应该没问题。只要传输是安全的,那么有效负载中的凭据是否为纯文本并不重要。如果你因为TLS而遇到连接到Office365的问题(你会得到一个5.7.1错误),你可以在client.Send()之前尝试一下...
client.TargetName = "STARTTLS/smtp.office365.com";如果您正在尝试使用当前登录用户的凭据,那么只要您没有设置凭据,"UseDefaultCredentials = true“就应该有效。您可以同时使用这两种方法,但它们的使用顺序可能会重置另一种。
https://stackoverflow.com/questions/26435345
复制相似问题