【问题标题】:Use DefaultNetworkCredential under TLS encryption?在 TLS 加密下使用 DefaultNetworkCredentials?
【发布时间】:2016-03-05 20:11:52
【问题描述】:

我们公司正在将 SMTP 邮件服务器切换到 Office 365。关键问题是新的 SMTP 服务器“smtp.office365.com”仅支持 TLS 加密。因此我无法使用CredentialCache.DefaultNetworkCredentials 自动编码我的Windows 登录密码。

        var smtpClient = new SmtpClient("smtp.oldserver.com")
        {
            Credentials = CredentialCache.DefaultNetworkCredentials
        };

        const string from = "myemail@xyz.com";
        const string recipients = "myemail@xyz.com";
        smtpClient.Send(from, recipients, "Test Subject", "Test Body");

以前这可以正常工作。但是如果我现在把上面的 sn-p 改成:

        var smtpClient = new SmtpClient("smtp.office365.com");
        smtpClient.EnableSsl = true;
        smtpClient.Port = 587;
        smtpClient.Credentials = CredentialCache.DefaultNetworkCredentials;

我现在得到:

Unhandled Exception: System.Net.Mail.SmtpException: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM

但如果我在代码中指定我的 Windows 登录用户名和密码,它就可以正常工作:

smtpClient.Credentials = new NetworkCredential("myemail@xyz.com", "mypassword");

所以:

  1. 是否可以使用DefaultNetworkCredentials 对密码进行编码,但使其可以在 TLS 加密下使用?
  2. 如果 1. 不可能,有没有更好的方法在其他地方对我的 Windows 密码进行编码,而不直接在代码中以纯文本形式显示它?

【问题讨论】:

    标签: c# .net email smtp


    【解决方案1】:

    在我的情况下,我加密了存储这些凭据的 web.config 部分。我同样在我的数据库中存储了凭据的加密版本,并有一个例程在应用程序中解密它们。

    【讨论】:

      【解决方案2】:

      这两个主题 - 凭据和加密 - 是不相关的。 DefaultNetworkCredentials 仅在邮件服务器和您的计算机属于同一“网络”或更准确地说,相同或连接的 Active Directory 服务器时才有效。我猜旧的 SMTP 服务器在本地并且是您办公室网络的一部分。 O365 服务器在云端,不共享 AD。

      当您明确提供您的凭据时,它会起作用,因为 O365 能够对您进行身份验证。

      可以使用 Azure Active Directory 并以某种方式将其连接到您的本地 Active Directory。我不熟悉细节,但我知道可以做到。我相信如果你设置正确,DefaultNetworkCredentials 将再次开始工作。

      O365认证详情:https://blogs.office.com/2014/05/13/choosing-a-sign-in-model-for-office-365/

      如果您需要存储密码,则需要将其加密存储。看到这个答案:Best way to store encryption keys in .NET C#

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-24
        • 1970-01-01
        相关资源
        最近更新 更多