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

本文关键字:情况下 System Mail Net NetworkCredentials 编码 | 更新日期: 2023-09-27 18:26:53

我正在编写一个程序,试图找出如何做到这一点。目前我正在使用System.Net.Mail发送smtp消息。我们的smtp服务器(office 365)需要身份验证才能发送传出邮件。我们的office 365通过Single Sign-on和AD与我们的域配对,因此我们的凭据与Microsoft office 365同步。如何使用Kerberos令牌发送邮件而不必将NetworkCredential basicCredential=new NetworkCredentity(用户名、密码)以纯文本形式显示?这可能吗?

当前通过发送邮件

NetworkCredential basicCredential = new NetworkCredential("<<username>>", strPassword);
client.Credentials = basicCredential;
client.EnableSsl = true;
client.Send(message);

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

感谢

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

我不知道你的技术背景,所以请回到关于纯文本密码和Kerberos使用的评论。。。

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

只要你使用SSL发送电子邮件,你就应该没事。只要传输是安全的,有效负载中的凭据是否为纯文本并不重要。如果由于TLS而导致连接到Office365时遇到问题(出现5.7.1错误),您可以在客户端之前尝试此操作。发送()。。。

client.TargetName = "STARTTLS/smtp.office365.com";

如果您试图使用当前登录用户的凭据,只要您没有设置凭据,"UseDefaultCredentials=true"就应该有效。你可以同时使用两者,但它们的使用顺序可以重置另一个。

相关文章: