2017-01-02 9 views
0

Я определил переменную <%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%.Как заменить переменные шаблона Sendgrid? (в C#)

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

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()); 

запрос принят и обработан, но по электронной почте я получаю до сих пор имеют сюжетную линию

«должен быть заменен. Могу ли я избавиться от этого как-нибудь потом?»

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

ответ

0

После прочтения How to Add Custom variables to SendGrid email via API C# and Template вопрос и ответы Я пришел к пониманию, что было неправильным решением использовать обозначение типа <%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%> обозначения для вашей собственной переменной, но выбрать один из десятка других стилей. Ни один из примеров или документов, которые я прочитал, не упоминал об этом.