首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在没有硬编码NetworkCredentials的情况下使用System.Net.Mail?

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

Stack Overflow用户
提问于 2014-10-18 09:04:36
回答 1查看 419关注 0票数 1

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

当前通过以下方式发送邮件

代码语言:javascript
复制
NetworkCredential basicCredential = new NetworkCredential("<<username>>", strPassword);

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

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

谢谢

EN

回答 1

Stack Overflow用户

发布于 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()之前尝试一下...

代码语言:javascript
复制
client.TargetName = "STARTTLS/smtp.office365.com";

如果您正在尝试使用当前登录用户的凭据,那么只要您没有设置凭据,"UseDefaultCredentials = true“就应该有效。您可以同时使用这两种方法,但它们的使用顺序可能会重置另一种。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26435345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档