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

Node.js调用SendGrid API发送重置密码邮件未收到问题排查

Node.js使用SendGrid发送密码重置邮件,后台记录正常但收不到邮件的排查方案

以下是几个可能遗漏的关键点,按优先级排查:

1. 发件邮箱未完成SendGrid验证

SendGrid强制要求发件地址(域名或单个邮箱)完成验证,否则即使后台显示发送成功,邮件也会被各大邮箱服务商拦截。登录SendGrid后台,进入Sender Authentication页面,确认process.env.EMAIL_FROM对应的邮箱已完成Single Sender Verification,或者其所属域名完成了Domain Authentication。

2. HTML邮件内容格式错误

你的代码中HTML部分存在标签未闭合的问题:

html: `<h1><a href=${link}>click here</h1>`

<a>标签没有闭合</a>,且链接未用双引号包裹,这种不规范的HTML会被邮件客户端判定为风险内容,直接过滤或扔进垃圾箱。修正后的代码:

html: `<h1><a href="${link}">Click here to reset your password</a></h1>`

同时建议在text字段里也带上完整链接,避免HTML渲染失效时用户无法获取重置地址:

text: `Click the link below to reset your password: ${link}`

3. 邮件被收件方邮箱归类到垃圾箱或拦截

  • 先检查目标邮箱的垃圾箱、广告邮件文件夹,密码重置类邮件很容易被误判为垃圾邮件;
  • 测试发送到不同服务商的邮箱(如Gmail、Outlook、QQ邮箱),确认是否是特定邮箱服务商的过滤规则导致;
  • 查看SendGrid的Email Activity详情,确认事件状态是delivered还是dropped:如果是dropped,查看具体原因(比如收件人邮箱不存在、域名在黑名单、内容触发安全规则)。

4. SendGrid Sandbox模式是否开启

如果SendGrid处于Sandbox模式,所有邮件只会在后台生成记录,不会实际发送到收件邮箱。进入SendGrid后台Settings > Mail Settings,检查Sandbox Mode是否处于关闭状态。

5. 补充错误捕获逻辑

你的代码没有对sgMail.send()添加异常捕获,即使SendGrid返回发送失败的错误,你也无法及时排查。建议添加try-catch:

try {
  const data = await sgMail.send(msg);
  return res.send(data);
} catch (error) {
  console.error(error.response?.body || error);
  return res.status(500).send("Failed to send password reset email");
}

内容的提问来源于stack exchange,提问作者sumanth.js

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:25:33