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

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. 速率限制验证方案
    拆分批量请求为单条发送,每发送一封后延迟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秒,适配基础版速率限制
    }
    
  2. 核对模板数据字段一致性
    注意到第1条TemplateData中的字段是EndPolicyDate,而第2、3条是EndDate,如果邮件模板中使用的是统一的字段名,可能导致第2条邮件因渲染异常被系统过滤,建议核对模板变量名与TemplateData的字段完全匹配。

  3. 查看SendGrid后台日志
    登录SendGrid管理后台,查看邮件的投递状态(队列、拦截、丢弃等),直接确认第2条邮件的处理结果,进一步定位问题。

内容的提问来源于stack exchange,提问作者Jonas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:53:09