使用SendGrid单发件人验证与Node.js发邮件,返回成功却未收到
排查SendGrid邮件卡在“处理中”且Gmail未收到的问题
1. 核对单发送人验证信息
- 确保代码中
from字段的邮箱完全匹配你在SendGrid后台验证通过的单发送人邮箱,包括大小写、域名后缀,不能有拼写错误。 - 检查该单发送人状态是否为“已验证”,如果是待验证状态,重新完成验证流程(点击邮箱收到的验证链接)。
2. 检查邮件内容与格式合规性
- 确认邮件包含必填字段:
subject(主题)、text/html(邮件内容),缺少这些可能导致SendGrid延迟处理或被收件方拦截。 - 避免使用垃圾邮件触发词(比如“免费”“中奖”“立即点击”等过度营销词汇),同时不要添加可疑附件或链接。
- 确保
to字段的邮箱格式正确,没有多余空格或特殊字符。
3. 排查SendGrid账户与队列状态
- 检查SendGrid账户是否处于正常状态:免费版账户有每日发送限额(100/天),如果超出限额,邮件会被队列延迟处理,直到额度重置。
- 查看SendGrid后台的“活动记录”详情,有没有隐藏的错误提示(比如“待审核”“策略限制”),部分“处理中”状态可能是因为账户需要额外验证(比如首次发送触发人工审核)。
4. 检查Gmail端的拦截与过滤
- 直接查看Gmail的「垃圾邮件」「促销」标签,很多触发过滤规则的邮件会被分到这些文件夹,而不是收件箱。
- 尝试将验证过的单发送人邮箱添加到Gmail的联系人列表,或设置邮件过滤规则允许该邮箱的邮件进入收件箱。
5. 验证Node.js代码的正确性
确保你的SendGrid调用代码参数正确,示例正确写法:
const sgMail = require('@sendgrid/mail'); sgMail.setApiKey('你的SendGrid API密钥'); const msg = { to: 'recipient@gmail.com', from: 'verified-sender@yourdomain.com', // 必须是已验证的单发送人邮箱 subject: '测试邮件', text: '这是SendGrid发送的测试邮件', html: '<strong>这是SendGrid发送的测试邮件</strong>', }; sgMail.send(msg) .then(() => console.log('邮件发送请求已提交')) .catch(error => console.error(error.response.body));
- 注意:接口返回成功仅代表SendGrid接收了请求,不代表邮件已投递,务必捕获并打印
catch中的错误信息,排查是否有隐性的API错误。
内容的提问来源于stack exchange,提问作者Punit Bhesota
相关产品推荐
相关产品推荐

