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

SendGrid C# v3 API动态模板如何获取to收件人名称实现个性化

问题根本原因

SendGrid动态模板的渲染上下文仅会读取personalizations节点下的dynamic_template_data字段内容,收件人to数组的信息不会自动注入到模板渲染上下文中,所以{{to.name}}写法无法读取到对应值是正常的设计。

1. 动态展示收件人姓名实现方式

  • 第一步修改动态模板,新增单独的收件人姓名字段占位符,将{{to.name}}替换为{{RecipientName}}即可,修改后模板代码:
<p> {{MailGreeting}} {{RecipientName}},</p>
<p>
{{{MailBody}}}
</p>
<p>
{{MailSalutation}}
</p>
  • 第二步修改数据模型,在EmailMergeSendDetails类中新增收件人姓名字段:
public class EmailMergeSendDetails
{
    public List<EmailAddress> MailToList { get; set; }
    public string MailFrom  { get; set; }
    public string MailFromName { get; set; }
    public string MailSubject { get; set; }
    public string MailBody { get; set; }
    // 新增收件人姓名属性
    public string RecipientName { get; set; }
    public string MailGreeting { get; set; }
    public string MailSalutation { get; set; }
}

2. 2.5万级收件人批量发送实现方案

你之前使用的CreateSingleTemplateEmailToMultipleRecipients方法仅适合所有收件人模板内容完全一致的群发场景,无法为每个收件人注入独立的姓名参数,需要自己构造带个性化配置的发送请求,同时遵守SendGrid的接口限流规则:

  • 单次API调用最多支持1000个个性化配置,即单批最多发1000个收件人
  • 按批次拆分收件人列表,循环调用发送接口即可

改造后发送代码示例

var from = new EmailAddress(d.MailFrom, d.MailFromName);
// 拆分收件人为每批1000个,适配SendGrid单调用上限
var recipientBatches = d.MailToList.Chunk(1000);
foreach (var batch in recipientBatches)
{
    var msg = new SendGridMessage();
    msg.SetFrom(from);
    msg.SetTemplateId("d-xxxx替换为你的模板ID");
    
    foreach (var recipient in batch)
    {
        // 每个收件人构造独立的模板数据,合并公共内容和独立姓名
        var dynamicTemplateData = new EmailMergeSendDetails
        {
            MailSubject = d.MailSubject,
            MailSalutation = d.MailSalutation,
            MailGreeting = d.MailGreeting,
            MailBody = d.MailBody,
            RecipientName = recipient.Name
        };
        // 为当前收件人添加独立个性化配置
        var personalization = new Personalization();
        personalization.AddTo(recipient);
        personalization.TemplateData = dynamicTemplateData;
        msg.AddPersonalization(personalization);
    }
    // 发送当前批次
    var response = await client.SendEmailAsync(msg);
    // 可根据账号配额添加适当延迟,避免触发速率限制
    await Task.Delay(100);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:15:04