Sendgrid - 如何访问 "to" 电子邮件地址对象以在 v3 api C# 中个性化动态模板

Sendgrid - How do I access the "to" email address object to personalize dynamic template in v3 api C#

我们使用 Sendgrid C# 库创建了一个存储动态模板。它工作正常,除了我们无法弄清楚如何访问“to”对象以在模板中动态显示用户名。这是正在发送的 JSON:

{
   "from":{
      "email":"fromemail@mydomain.com"
   },
   "personalizations":[
      {
         "to":[
            {
               "name":"test name",
               "email":"test@testingmail.com"
            }
         ],
         "dynamic_template_data":{
            "MailBody":"this is a \u003cstrong\u003eTEST!\u003c/strong\u003e",
            "MailSalutation":"Best Regards,",
            "MailGreeting":"Dear"
         }
     
      
      },{
         "to":[
            {
               "name":"another name",
               "email":"anothertest@testingmail.com"
            }
         ],
         "dynamic_template_data":{
            "MailBody":"this is a \u003cstrong\u003eTEST!\u003c/strong\u003e",
            "MailSalutation":"Best Regards,",
            "MailGreeting":"Dear"
         }
     
      
      }
   ],
   "template_id":"xxxxxxxxxx-ede3cd3f9b"
}

模板看起来像这样:

<p> {{MailGreeting}} {{to.name}} or {{to[0].name}}???,</p>
        
        <p>
        {{{MailBody}}}
        </p>
        <p>
        {{MailSalutation}}

</p>

“to”对象的名字属性就是我们这里要显示的{{to.name}}

我们正在使用示例代码中推荐的方法来输入我们的数据。

我们的class对象:

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; }
            
    }

使用Sendgrid C#发送

var from = new EmailAddress(d.MailFrom, d.MailFromName);
            var tos = d.MailToList;

                var dynamicTemplateData = new EmailMergeSendDetails
                {
                    Subject = d.MailSubject,
                    MailSalutation = d.MailSalutation,
                    MailGreeting = d.MailGreeting,
                    MailBody = d.MailBody,
                   
            };

                var msg = MailHelper.CreateSingleTemplateEmailToMultipleRecipients(from,
                                                                       tos,
                                                                       "d-xxxx-template-id-here",
                                                                       dynamicTemplateData
                                                                       );

var response = await client.SendEmailAsync(msg);

为什么这不适用于 {{to.name}}?我猜 {{}} 唯一可用的数据是 dynamic_template_data?如果是这样,我们如何显示to.name。感觉这是一件很基本的事情,但我们确实花了几个小时:)。

为了清楚起见,我们有一个新闻稿模板,它在我们的数据库中存储动态模板数据。我们想查询该数据以及多个 name/email 地址以将其发送到(其中 25k+ 个),用时事通讯数据填写模板并将其发送给每个收件人并添加“亲爱的 _____“ 在顶部。看起来超级基本。如果 CreateSingleTemplateEmailToMultipleRecipients 不是正确的方法,我们如何使用动态模板来做到这一点?

我认为你做不到。不过,您可以向 dynamic_template_data 添加其他值;例如“RecipientName”,然后将其设置为“测试名称”,然后在模板中将其引用为 {{RecipientName}}.

或者...按照您的做法,您可以将其添加到 MailGreeting 的末尾;例如给它一个值“亲爱的测试名称”,而不仅仅是“亲爱的”。

编辑(多封电子邮件):

通过查看包代码,我认为 CreateMultipleTemplateEmailsToMultipleRecipients() 是您想要的,并为每个 dynamicTemplateData 添加不同的 RecipientName(或类似的),并确保您拥有tos 中的项目数与 dynamicTemplateData.

中的项目数相同

SendGrid has a limit 每封电子邮件 1000 个个性化设置,因此您需要将 25k 分成几批。