Как заменить переменные шаблона Sendgrid? (в C#)

Я определил переменную <%datetime%> в моем шаблоне SendGrid. В соответствии с этим соглашением об именах я решил следовать уже <%subject%> сюжетной линии. Я вижу различные соглашения об именах переменных в примерах: https://github.com/sendgrid/sendgrid-csharp/blob/master/SendGrid/Example/Example.cs#L41 использует -name- а также -city-в то время как https://github.com/sendgrid/sendgrid-csharp/blob/master/SendGrid/Example/Example.cs#L157 использует %name% а также %city%,

Я просто предполагаю, что подстановка переменных основана на простом сопоставлении с образцом, поэтому шаблоны в этих примерах содержат одинаковые точные строки. Это не работает для меня до сих пор, хотя по любой причине.

string sendGridApiKey = ConfigurationManager.AppSettings["SendGridApiKey"].ToString();
var sendGrid = new SendGridAPIClient(sendGridApiKey);

string emailFrom = ConfigurationManager.AppSettings["EmailFrom"].ToString();
Email from = new Email(emailFrom);
string subject = "Supposed to be replaced. Can I get rid of this somehow then?";
string emaiTo = ConfigurationManager.AppSettings["EmailTo"].ToString();
Email to = new Email(emaiTo);
Content content = new Content("text/html", "Supposed to be replaced by the template. Can I get rid of this somehow then?");
Mail mail = new Mail(from, subject, to, content);
mail.TemplateId = "AC6A01BB-CFDF-45A7-BA53-8ECC54FD89DD";
mail.Personalization[0].AddSubstitution("<%subject%>", $"Your Report on {shortDateTimeStr}");
mail.Personalization[0].AddSubstitution("<%datetime%>", longDateTimeStr);
// Some code adds several attachments here

var response = await sendGrid.client.mail.send.post(requestBody: mail.Get());

Запрос принят и обработан, но в электронном письме по-прежнему есть тема

"Предполагается заменить. Могу ли я как-то избавиться от этого?"

Тело заменяется необработанным содержимым шаблона, но переменная также не подставляется. Что я делаю неправильно?

1 ответ

Решение

Прочитав Как добавить пользовательские переменные в электронную почту SendGrid с помощью API C# и шаблона вопросов и ответов, я пришел к выводу, что это было неправильное решение использовать <%foobar%> обозначение типа

В основном это собственная запись SendGrid, и <%subject%> означает, что они заменят то, что вы назначаете на Mailsubjectв моем случае это было "Supposed to be replaced. Can I get rid of this somehow then?", Теперь я собираю правильную тему там.

В самом теле шаблона я переключился на {{foobar}} обозначение для переменных. Хотя последний ответ на вопрос, указанный выше, гласит, что вы должны вставить <%body%> в тело шаблона, но это не обязательно. Это работает без меня для меня. Я полагаю, я мог бы использовать свой собственный {{foobar}} переменные в строке темы также с правильной заменой вместо <%subject%>,

По умолчанию состояние шаблона по умолчанию: <%subject%> для предмета и <%body%> для тела, что привело бы к бесперебойной доставке электронной почты, если вы не хотите никакой замены, и предоставьте тему и тело через API.

Поправьте меня, если я ошибаюсь, пожалуйста.

string subject = $"Report on ${shortDateTimeStr}";
string emaiTo = ConfigurationManager.AppSettings["EmailTo"].ToString();
Email to = new Email(emaiTo);
Content content = new Content("text/html", "Placeholder");
Mail mail = new Mail(from, subject, to, content);
mail.TemplateId = "AC6A01BB-CFDF-45A7-BA53-8ECC54FD89DD";
mail.Personalization[0].AddSubstitution("{{datetime}}", longDateTimeStr);

TL; DR: не использовать <%foobar%> обозначение для вашей собственной переменной, но выберите один из десятка других стилей. Ни один из примеров или документов, которые я прочитал, не упоминал об этом.

Другие вопросы по тегам