【发布时间】: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");
所以:
- 是否可以使用
DefaultNetworkCredentials对密码进行编码,但使其可以在 TLS 加密下使用? - 如果 1. 不可能,有没有更好的方法在其他地方对我的 Windows 密码进行编码,而不直接在代码中以纯文本形式显示它?
【问题讨论】: