Как заменить переменные шаблона 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%>
означает, что они заменят то, что вы назначаете на Mail
subject
в моем случае это было "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%>
обозначение для вашей собственной переменной, но выберите один из десятка других стилей. Ни один из примеров или документов, которые я прочитал, не упоминал об этом.