ASP.NET WebForms部署IIS后用SendGrid发邮件遇证书异常
解决SendGrid邮件发送SSL证书验证失败问题
方法1:补全服务器证书链
生产环境IIS服务器可能缺少SendGrid SSL证书对应的根证书或中间证书,本地机器因系统/浏览器自动更新了证书链所以能正常验证。
- 操作步骤:
- 用浏览器访问
https://api.sendgrid.com,查看证书详情并导出完整证书链(包含根证书和中间证书)。 - 在IIS服务器的本地计算机证书存储中,将证书分别导入「受信任的根证书颁发机构」和「中级证书颁发机构」目录。
- 重启IIS服务后重新测试。
- 用浏览器访问
方法2:临时跳过证书验证(仅应急使用)
此方法会降低安全性,仅作为临时恢复方案:
- 在初始化SendGrid客户端前添加证书验证回调:
// 临时禁用证书验证,生产环境排查完成后务必移除 ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; var client = new SendGridClient(apiKey); var msg = MailHelper.CreateSingleEmailToMultipleRecipients(from, toList, subject, plainTextContent, htmlContent, true); var response = await client.SendEmailAsync(msg).ConfigureAwait(false);
方法3:启用兼容的TLS版本
SendGrid要求使用TLS 1.2及以上版本,部分老旧IIS服务器可能默认禁用高版本TLS:
- 操作步骤:
- 在IIS管理器中,进入网站的「SSL设置」,确认TLS版本设置为1.2或1.3。
- 也可通过注册表强制启用TLS 1.2:
- 打开注册表编辑器,定位到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols - 新建「TLS 1.2」项,再在其下新建「Client」项,添加两个
DWORD值:DisabledByDefault设为0,Enabled设为1。 - 重启服务器生效。
- 打开注册表编辑器,定位到
方法4:升级SendGrid SDK版本
旧版本的SendGrid .NET SDK可能存在SSL握手兼容性问题,在NuGet包管理器中更新SendGrid包到最新稳定版后重新部署测试。
内容的提问来源于stack exchange,提问作者Midlaj
相关产品推荐
相关产品推荐

