You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用SmtpClient发Gmail邮件提示服务器不支持安全连接求助

解决方案

  • 显式指定TLS协议版本
    Gmail目前仅支持TLS 1.2及以上版本的安全连接,不同目标框架的.NET项目默认启用的TLS版本存在差异:.NET Framework 4.5及以下版本默认未启用TLS 1.2,.NET Core/.NET 5+部分版本的默认协议配置也会受系统环境影响,这是同代码不同项目运行结果不一致的最常见原因。
    在sendEmail方法开头添加以下代码即可:
// 强制指定使用TLS 1.2发起连接,兼容所有支持Gmail的运行环境
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

完整修改后的代码示例:

private static void sendEmail()
{
    // 新增这一行即可解决绝大多数框架版本差异导致的连接异常
    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
    
    var client = new SmtpClient("smtp.gmail.com", 587)
    {
        Credentials = new NetworkCredential("sender@gmail.com", "myPassword"),
        EnableSsl = true
    };
    
    client.Send("sender@gmail.com", "receiver@gmail.com", "Email Subject", "Some body message");        
}
  • 检查项目配置文件的覆盖项
    打开当前报错项目的App.config(控制台应用)配置文件,查找是否存在<system.net>节点下的<mailSettings>配置,该配置的优先级高于代码硬编码的SMTP参数,如果存在错误的SSL、端口、服务器配置,直接删除整段<mailSettings>节点即可。

  • 对齐两个项目的编译配置
    对比正常运行的老项目和当前报错项目的编译配置:

    • 确认目标框架版本完全一致
    • 确认编译平台(x86/x64/Any CPU)完全一致
    • 确认项目的输出类型、权限配置完全一致
  • 替换为官方推荐的MailKit实现
    微软官方已标记SmtptClient为过时类,不再推荐用于新开发,若以上方案均无效,可以替换为MailKit库实现邮件发送,原生兼容最新的TLS协议和Gmail的安全规则,避免底层实现差异导致的异常。


内容的提问来源于stack exchange,提问作者Muhammad Sagnia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:45:02