es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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="&quot;width:200px;max-width:33.333%;&quot;"><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="&quot;width:200px;max-width:33.333%;&quot;"><div style="text-align: center;">{{Name}}</div>
        </td>
        <td style="&quot;width:200px;max-width:33.333%;&quot;"><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.

Tags:  , , , ,

Answer

  1. Avatar for 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:

    var home = new House
    {
        Name = "test",
        Price = price1
    };
    
    var homes = new List<house> { home };
    var json = Newtonsoft.Json.JsonConvert.SerializeObject(new { homes });
    
    var email = MailHelper.CreateSingleTemplateEmail(from, to, templateId, new { homes = json });
    var emailResponse = await Email_Client.SendEmailAsync(email);
    

    En este código, primero creamos una lista de objetos House (homes) y la serializamos a una cadena JSON usando Newtonsoft.Json.JsonConvert.SerializeObject(). Luego, pasamos un objeto anónimo a la plantilla de correo electrónico, con una propiedad homes 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.

Comments are closed.