Copyright Johan Kronberg 2009-2024 Latest posts RSS feed X: johankronberg LinkedIn Profile GitHub: krompaco
Site generated by: Record Collector

Using the Handlebars templates with SendGridForEpi

SendGrid has marked Substitutions as Legacy and switched to Handlebars for the transactional templates.

I'm pretty sure you've checked out the Handlebars.js syntax and know that it's a powerful way to insert data into a template. This is very welcome since for example looping stuff in a typical SendGrid template case such as an order confirmation was a bit of a hassle before, often having to construct a big chunk of HTML as the likely option.

So... When using it from C# it's best to forget about the old substitution variable way and instead think view model. In this very simple example I need two string properties where one will get an HTML value set.

private class CommentTemplateData
{
    [JsonProperty("whoIs")]
    public string WhoIs { get; set; }

    [JsonProperty("commentText")]
    public string CommentText { get; set; }
}

I put some JsonProperty-decorations in there to not offend anyone working with JS with improper name casing.

To avoid getting the markup in commentText escaped I need to "triple-stash" that property in the SendGrid template.

Then to wrap it up when sending through SendGridForEpi I use the TemplateData property found on the regular SendGrid Personalization object.

var mail = new SendGridMessage
{
    From = new EmailAddress("noreply@krompaco.nu"),
    TemplateId = "the-id-found-in-the-sendgrid-template-editor",
    Personalizations = new List<Personalization>()
};

mail.Personalizations.Add(
    new Personalization()
    {
        Tos = new List<EmailAddress>
        {
          new EmailAddress("notifications@krompaco.nu")
        },
            TemplateData = new CommentTemplateData
        {
            WhoIs = "Some Name",
            CommentText =
              "<p>First line of comment.</p><p>Second line of comment.</p>",
        }
});

this.mailService.AddToQueue(new MailQueueItem
{
    Date = DateTime.UtcNow,
    Mail = mail
});

This support was added in the official C# library with 9.10 released 2018-09-12. The SendGridForEpi package dependent on this version as a minimum is 1.2.2 which will be up on Epi's NuGet feed shortly.

Check the package source code on Github or the initial blog post if you missed the SendGridForEpi introduction.

Published and tagged with these categories: Episerver, Development, ASP.NET