SendGrid批量个性化邮件发送丢失第2条数据问题排查
问题:SendGrid批量个性化邮件丢失第2条的排查与解决
我通过SendGrid的Personalizations属性发送批量个性化邮件,单次请求包含3条不同的收件人和模板数据,但仅收到第1条和第3条,第2条丢失。使用的代码示例如下:
SendgridMessage { From: { Name: AccountSenderName, Email: EmailSender@mail.com }, TemplateId: "d-u7eu36eg6328te3example", Personalizations: [ { "Tos": [ { Email: "johndoe@mail.com", Name: "John" } ], "TemplateData": { "UserName":"John Doe", "VehicleDescription":"Chevrolet Camaro 2010", "PolicyNumber": "XX-XXXX-0126", "EndPolicyDate":"15/05/2023" }, "Ccs": null }, { "Tos": [ { Email: "johndoe@mail.com", Name: "John" } ], "TemplateData": { "UserName":"John Doe", "VehicleDescription":"Dodge Ram 2010 SLT", "PolicyNumber": "XX-XXXX-2030", "EndDate":"30/05/2023" }, "Ccs": null }, { "Tos": [ { Email: "analee@mail.com", Name: "Ana" } ], "TemplateData": { "UserName":"Ana lee", "VehicleDescription":"BMW M3 2012", "PolicyNumber":"XX-XXXX-2159", "EndDate":"15/06/2023" }, "Ccs": "johndoe@mail.com" } ] } SendGridClient sendGridClient = new(_configuration["SendGrid:ApiKey"]); await sendGridClient.SendEmailAsync(sendGridMessage);
排查进展
经确认,SendGrid基础版存在每秒1封邮件的发送限制,此次单次批量发送3封可能因超出速率限制导致第2条邮件丢失。目前计划:
- 升级至商务版测试批量发送功能
- 通过循环单条发送+1秒延迟的方式,验证是否能正常投递全部3封邮件
补充解决建议
速率限制验证方案
拆分批量请求为单条发送,每发送一封后延迟1秒,确保符合基础版的速率限制,代码示例:SendGridClient sendGridClient = new(_configuration["SendGrid:ApiKey"]); foreach (var personalization in sendGridMessage.Personalizations) { var singleMessage = new SendGridMessage { From = sendGridMessage.From, TemplateId = sendGridMessage.TemplateId, Personalizations = new List<Personalization> { personalization } }; await sendGridClient.SendEmailAsync(singleMessage); await Task.Delay(1000); // 延迟1秒,适配基础版速率限制 }核对模板数据字段一致性
注意到第1条TemplateData中的字段是EndPolicyDate,而第2、3条是EndDate,如果邮件模板中使用的是统一的字段名,可能导致第2条邮件因渲染异常被系统过滤,建议核对模板变量名与TemplateData的字段完全匹配。查看SendGrid后台日志
登录SendGrid管理后台,查看邮件的投递状态(队列、拦截、丢弃等),直接确认第2条邮件的处理结果,进一步定位问题。
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

