.net - 使用带有 TLS 1.2 的 SmtpClient 将未经身份验证的邮件发送到 Microsoft 365
问题描述
我的理解是,从 2021 年 1 月开始,微软将要求 TLS 1.2 使用 365 连接器发送邮件。我有一个运行良好的连接器,它允许中继来自我的网络公共 IP 的消息。多年来,我将它用于大型 Web 应用程序、文档扫描仪机器和其他本地应用程序。我使用 365 服务共享邮箱 (services@mydomain.com) 作为发件人,不使用身份验证。
我从未成功将其设置为与 TLS 一起使用,因此大多数流量都未加密。我发现了很多类似的问题,但没有一个具有相同的配置,而且绝对没有一个具有可接受的答案(大多数答案只是说“不要使用 SSL”)。
我想开始在我的 Web 应用程序上修复 TLS,然后修复其余部分。这是 C# 中的 .Net 4.8 Web 表单项目。
web.config 文件包含以下设置:
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network host="mydomain-com.mail.protection.outlook.com" port="25" enableSsl="true" defaultCredentials="true" />
</smtp>
</mailSettings>
</system.net>
在网页中,我以这种方式发送消息:
using System.Net.Mail;
using SmtpClient client = new SmtpClient();
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
MailMessage msg = new MailMessage
{
From = new MailAddress("services@mydomain.com", "Tester"),
IsBodyHtml = true,
Subject = "Test message",
Body = "Test message."
};
msg.To.Add("xxx@mydomain.com");
client.Send(msg);
现在有趣的部分。这在我的客户端计算机(一台 Windows 11 机器)上完美运行。邮件已正确传递,并且经过检查,在所有退回邮件中都使用了 TLS 1.2。
当我使用相同的 web.config 设置在 Windows 2016 生产服务器上移动相同的代码时,这不起作用。我收到错误消息:服务器不支持安全连接(在事件查看器中登录为事件 1309、SmtpException、堆栈跟踪:
in System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint)
in System.Net.Mail.SmtpClient.GetConnection()
in System.Net.Mail.SmtpClient.Send(MailMessage message)
将端口更改为 587 不起作用。让服务器发送消息的唯一方法是将 web.config 部分设置为enableSsl="true"
. 这当然是不可接受的,因为一旦微软停止转发不安全的邮件,它就会停止工作。
防火墙允许流量。这一定是 Windows Server 设置中的问题,但 TLS 1.2 在同一服务器的其他地方使用,所以我不明白可能是什么原因。
解决方案
推荐阅读
- javascript - React FullCalendar 不显示时间,尽管指定了时间并且 allDay 为 false
- matlab - 使用与索引相关的 abs() 时出错
- swift - 如何在 macOS 中知道其他应用程序当前最前端的窗口信息
- google-oauth - 如何在没有用户登录的情况下提前找到 Google 用户的 ID?
- r - 如何阅读单词并根据单词将其添加到表格中
- bash - shebang可以指远程程序吗?
- numpy - 错误:numpy.ndarray 对象不可调用
- javascript - How can i prevent my site from reloading on POST?
- php - 如何同时使用 MD5 和 Bcrypt 哈希登录 laravel
- python - 应用程序没有属性“计数器”,两个功能试图协同工作