0

我们正在使用 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”对象的 name 属性就是我们要在此处显示的内容 {{to.name}}

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

我们的类对象:

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。这感觉像是一件很基本的事情,但我们确实花了好几个小时来做​​这件事:)。

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

4

1 回答 1

2

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

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

编辑(多封电子邮件):

通过查看包代码,我认为CreateMultipleTemplateEmailsToMultipleRecipients()这是您想要的,并RecipientName为每个添加不同(或相似) ,并确保您在asdynamicTemplateData中具有相同数量的项目。tosdynamicTemplateData

SendGrid对每封电子邮件的个性化设置限制为 1000 个,因此您需要将 25k 分成多个批次。

于 2021-11-02T11:06:38.523 回答