我有旧的 asp.net webform 应用程序 (4.5),由于安全原因,TLS 已升级到 TLS 1.2,因此依赖于 TLS 1.0 的邮件功能无法正常工作。
如果服务器支持 TLS 1.0,则以下代码适用,但在新服务器上,TLS 1.0 和 TLS 1.1 被禁用,因此 web.config 中的以下代码不再工作,它不会给出任何错误,但电子邮件不适用于默认功能,例如作为 asp.net 会员模块的密码重置,这取决于 web.config 中定义的以下代码
<system.net>
<mailSettings>
<smtp from="[email protected]">
<network host="outlook.office365.com" port="587" enableSsl="true" userName="[email protected]" password="Passward" />
</smtp>
</mailSettings>
</system.net>
如果要在代码 .cs 文件中完成相同的操作,那么我们可以添加以下代码,它将添加 TLS 1.2 支持并且代码可以工作,但我不确定如何在上述代码中为 SMTP 在 web.config 中的邮件设置中添加相同的内容。任何指针,因为我无法在网上找到相同的语法
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
这个问题最终解决了吗?我有一个相关的问题,但我建议更好地描述该问题以反映主要问题。
最好分享您的错误,并提及您为解决问题所做的所有尝试。
您的回答并没有吸引太多贡献,因为它以问题的语气暗示,提供强制 TLS 的代码将解决问题,但这并不总是正确的。
以下是您问题的答案:
在 .NET 中,您可以通过设置 ServicePointManager.SecurityProtocol 属性来强制执行特定版本的 TLS。此属性指定用于验证和加密连接的安全协议。
例如,以下是强制执行 TLS 1.2 的方法:
c#
System.Net.ServicePointManager.SecurityProtocol =
System.Net.SecurityProtocolType.Tls12;
您应该在发送电子邮件之前设置此属性。在 ASP.NET 应用程序中,您可以在 Global.asax.cs 的 Application_Start 方法中或在邮件发送类的构造函数中设置此项。
对于 ASP.NET 配置,您可以使用 targetFramework 属性在
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="[email protected]">
<network host="email-smtp.eu-west-1.amazonaws.com" port="465"
userName="AKIA4MEB726JJVKIZW4V"
password="oBa8LYqaAXXsKwv3seruKLCuxuZ/jDCwvAoTZy7e"
useDefaultCredentials="true" enableSsl="true"
targetFramework="4.5"/>
</smtp>
</mailSettings>
</system.net>
上述配置中,targetFramework设置为4.5,表示将使用TLS 1.2。
请注意,强制执行特定版本的 TLS 可能会影响与某些服务器或客户端的兼容性,因此请确保参与电子邮件通信的所有各方都支持 TLS 1.2。此外,您应该及时了解最新的安全最佳实践,并考虑更新到可用的新版本 TLS。