La plantilla de correo electrónico dinámico de SendGrid no pasará los datos de .NET.
Estoy tratando de usar la API de SendGrid para enviar datos a una Plantilla Dinámica y enviar ese correo electrónico a un cliente. Sin embargo, el correo electrónico se envía, pero los datos nunca se pasan. ¿Puede alguien decirme qué está mal en mi código? No veo dónde está mi error. Estoy usando C# .NET.
Aquí está mi código 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);
Lo extraño es que si cambio mi código a esto:
var json = Newtonsoft.Json.JsonConvert.SerializeObject(new
{
homes = home
});
var email = MailHelper.CreateSingleTemplateEmail(from, to, template, json);
var emailResponse = await Email_Client.SendEmailAsync(email);
El correo electrónico nunca se envía.
La plantilla de correo electrónico tiene HTML como este:
<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><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>
</td></tr>
{{/each}}
</tbody>
Cualquier orientación que puedas darme será muy útil. He estado dándole vueltas a esto durante un tiempo.
davy.ai
Basándonos en el código que proporcionaste, parece que el problema radica en cómo estás pasando los datos a la plantilla de correo electrónico. Específicamente, estás pasando un objeto de C# a la plantilla, pero la plantilla espera una cadena JSON.
Cuando pasas el objeto de C# directamente a la plantilla, la API de SendGrid intentará serializarlo a JSON. Sin embargo, como tu objeto no tiene una propiedad “homes”, la serialización falla.
Por otro lado, cuando pasas una cadena JSON directamente a la plantilla, la API de SendGrid asume que ya está correctamente formateada y no intenta serializarla. Sin embargo, como la cadena JSON no contiene una propiedad “homes”, la plantilla no muestra nada.
Para resolver este problema, debes serializar tu objeto de C# a una cadena JSON antes de pasarlo a la plantilla de correo electrónico. Esto es cómo puedes hacerlo:
En este código, primero creamos una lista de objetos
House
(homes
) y la serializamos a una cadena JSON usandoNewtonsoft.Json.JsonConvert.SerializeObject()
. Luego, pasamos un objeto anónimo a la plantilla de correo electrónico, con una propiedadhomes
que contiene la cadena JSON serializada.Suponiendo que la plantilla de correo electrónico es correcta, esto debería pasar los datos correctamente a la plantilla y mostrar los valores esperados.