简体   繁体   中英

Interpolate model values into dynamic template using SendGridMessage

I'm building my email for sending with the SendGrid library 's SendGridMessage object.

I'm defining my values as an anonymous type which I'm injecting with the SendGridMessage's SetTemplateData() method:

var mail = new SendGridMessage
{
    Attachments = new List<Attachment>(),
    From = new EmailAddress()
    {
        Email = emailConfig.FromAddress,
        Name = $"Redacted on behalf of {booking.Member.Client.Name}"
    },
    TemplateId = EmailConstants.ConfirmationEmailTemplateId,
    Subject = "Redacted"
};

mail.Personalizations = new List<Personalization>() {
    new Personalization() {
        Tos = new List<EmailAddress>() {
            new EmailAddress() {
                Email = memberEmail,
                Name = memberName
            },
        }
    }
};
var data = new
{
    memberName = memberName,
    dateOfAppointment = booking.Date.ToString("dd MMM yy"),
    timeOfAppointment = booking.Date.ToString("HH:mm"),
    questionnaireLink = questionnaireLink
};
mail.SetTemplateData(data);

The email gets sent out perfectly fine, but in the email template, my tags {memberName} , {dateofAppointment} , etc. are not being replaced by the values indicated here.

I've found handlebars but no C# guide to use them; I'd assume the data I'm submitting above would work so long as I get the tags right in the template... Am I right?

How do I replace the indicated tags ( {memberName} , {dateofAppointment} , etc.) in my dynamic template with my data values?

Make sure your template contains tags using double-brace syntax, like {{memberName}} . {memberName} (single braces) won't work.

From the SendGrid docs on Handlebars syntax ,

<!-- Template -->
<p>Hello {{ firstName }}</p>
// Test data
{ "firstName": "Ben" }
<!-- Resulting HTML -->
<p>Hello Ben</p>

If this syntax is used properly in the template, the code in your question will work just fine.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM