SendGrid 动态电子邮件模板不会从 .NET 传递数据



我正在尝试使用SendGrid的API将数据发送到动态模板,并将该电子邮件发送给客户。然而,电子邮件发送了,但数据从未传递。有人能告诉我我的代码出了什么问题吗?我不知道我的错误在哪里。我正在使用C#。NET。

这是我的C#代码

var Email_Client = new SendGridClient(apikey);
EmailAddress from = new EmailAddress(Me);
EmailAddress to = new EmailAddress(Customer);
var template = "x-xxxxxxxxxxxxxx";
var home = new house
{
Name = "test",
Price = price1
};
var email = MailHelper.CreateSingleTemplateEmail(from, to, template, home);
var emailResponse = await Email_Client.SendEmailAsync(email);

奇怪的是,如果我把代码改成这样:

var json = Newtonsoft.Json.JsonConvert.SerializeObject(new
{
homes = home
});
var email = MailHelper.CreateSingleTemplateEmail(from, to, template, json);
var emailResponse = await Email_Client.SendEmailAsync(email);

电子邮件永远不会被发送。

电子邮件模板有类似的HTML

<tbody>
{{#each homes}}
<tr>
<td style="width:200px;max-width:33.333%;"><img class="max-width" border="0" style="display:block;color:#000000;text-decoration:none;font-family:Helvetica, arial, sans-serif;font-size:16px;max-width:100% !important;width:100%;height:auto !important;" src="{{Img}}" alt="" width="200"></td>
<td style="width:200px;max-width:33.333%;"><div style="text-align: center;">{{Name}}</div>
</td>
<td style="width:200px;max-width:33.333%;"><div style="text-align: center;">{{Price}}</div></td>
</tr>
{{/each}}
</tbody>

你能提供的任何指导都会非常有帮助。我已经想了一段时间了。

您不需要自己将动态模板数据序列化为JSON。但是,您必须确保传入的数据。NET匹配您在模板中使用它的方式。

在模板中,通过对homes进行迭代,将其用作数组。因此,您必须传入一个属性为homes的对象,该对象包含一个数组。数组必须具有属性为NamePrice的对象。

像这样更新你的代码,使模板数据与你的模板匹配:

var dynamicTemplateData = new
{
homes = new object[]
{
new
{
Name = "test",
Price = price1
}
}
};
var email = MailHelper.CreateSingleTemplateEmail(from, to, template, dynamicTemplateData);

其他提示:

  • 您使用了全部小写的homes变量,而使用了第一个字母大写的NamePrice。保持你的外壳一致以避免混淆。如果更改此项,请确保模板变量和中的模板数据的大小写匹配。NET
  • 由于您没有共享house类,所以我可以自由创建匿名对象,而不是使用该类。如果您使用的类遵循C#命名约定(PascalCasing(,但希望对电子邮件模板中的变量使用其他大小写,则可以使用Newtonsoft.Json中的JsonProperty属性标记属性。请参阅以下示例中的ExampleTemplateData
  • 确保您的<tbody>标记嵌套在<table>标记中

最新更新