Asp.net Core项目集成SendGrid动态模板后邮件无法发送问题
SendGrid动态模板发送失败排查方案
验证基础配置合法性
- 核对你复制的Template ID是否与SendGrid后台「动态模板」页面对应的ID完全一致,注意不要误用旧版遗留模板的ID
- 确认动态模板已在后台点击「发布」,草稿状态的模板无法被调用
- 检查你使用的SendGrid API Key是否已开启「邮件发送」和「模板访问」权限,可在SendGrid后台API Key管理页核对权限范围
检查请求参数格式正确性
- 调用动态模板时,不要同时传入
HtmlContent、Subject参数,两类参数会和模板配置产生冲突,直接导致请求失败 - 确认传入的动态模板变量键名和模板里定义的变量完全一致,大小写敏感。例如模板中写的是
{{FirstName}},代码里传firstName会导致变量匹配失败 - 确认所有变量没有空值,空值变量会触发SendGrid的参数校验失败
正确的发送代码参考如下:
var sendGridClient = new SendGridClient("你的SendGrid API密钥"); var mailMessage = new SendGridMessage(); // 发件人邮箱必须是SendGrid后台已验证的地址 mailMessage.SetFrom("no-reply@publishfinders.com", "PublishFinders团队"); mailMessage.AddTo(Input.Email, user.FirstName); // 仅设置模板ID,不要额外设置主题和邮件内容 mailMessage.SetTemplateId("你后台创建的动态模板ID"); // 传入模板需要的所有变量 mailMessage.SetTemplateData(new { FirstName = user.FirstName, ConfirmUrl = HtmlEncoder.Default.Encode(callbackUrl) }); // 新增日志输出,用于排查具体错误 var response = await sendGridClient.SendEmailAsync(mailMessage); var responseCode = response.StatusCode; var errorMessage = await response.Body.ReadAsStringAsync(); // 此处可将responseCode、errorMessage写入本地日志,直接查看具体报错原因- 调用动态模板时,不要同时传入
后台发送记录排查
直接登录SendGrid后台,进入「Activity Feed」页面,所有发送请求的记录都会展示在这里,失败的请求会标注具体失败原因:比如发件人未验证、模板不存在、变量格式错误、发送配额耗尽等,可直接对应解决。发件人配置校验
确认你代码里用的发件人邮箱/域名,已经在SendGrid后台完成了单Sender验证或者域名验证,未验证的发件人发送任何邮件都会被拦截,不管是否使用模板。
内容的提问来源于stack exchange,提问作者Sourabh Dhiman
相关产品推荐
相关产品推荐

