Как добавить пользовательские переменные в электронную почту SendGrid через API C# и шаблон
Я пытаюсь выяснить, как добавить переменные в существующий шаблон (например, динамически веб-ссылка или имя), который был создан в шаблонизаторе sendgrid, я не уверен, как это сделать с помощью библиотек SendGrid C# .NET. Мне интересно, может ли кто-нибудь помочь мне.
// Create the email object first, then add the properties.
SendGridMessage myMessage = new SendGridMessage();
myMessage.AddTo("test@test.com");
myMessage.From = new MailAddress("test@test.com", "Mr test");
myMessage.Subject = " ";
var timestamp = DateTime.Now.ToString("HH:mm:ss tt");
myMessage.Html = "<p></p> ";
myMessage.EnableTemplate("<p> <% body %> Hello</p>");
myMessage.EnableTemplateEngine("9386b483-8ad4-48c2-9ee3-afc7618eb56a");
var identifiers = new Dictionary<String, String>();
identifiers["USER_FULLNAME"] = "Jimbo Jones";
identifiers["VERIFICATION_URL"] = "www.google.com";
myMessage.AddUniqueArgs(identifiers);
// Create credentials, specifying your user name and password.
var credentials = new NetworkCredential("username", "password");
// Create an Web transport for sending email.
var transportWeb = new Web(credentials);
// Send the email.
transportWeb.Deliver(myMessage);
4 ответа
Я нашел решение:
replacementKey = "*|VERIFICATION_URL|*";
substitutionValues = new List<string> { VERIFICATION_URL };
myMessage.AddSubstitution(replacementKey, substitutionValues);
Моя электронная почта
Hello -REP-
<%body%>
Fotter
Мой код C#
myMessage.AddSubstitution("-REP-", substitutionValues);
Работает ОТЛИЧНО!!!
После того, как сделал много RND. Мой код ниже работает нормально и проверено.
SendGridMessage myMessage = new SendGridMessage();
myMessage.AddTo(email);
myMessage.AddBcc("MyEmail@gmail.com");
myMessage.AddBcc("EmailSender_CC@outlook.com");
myMessage.From = new MailAddress("SenderEmail@outlook.com", "DriverPickup");
//myMessage.Subject = "Email Template Test 15.";
myMessage.Headers.Add("X-SMTPAPI", GetMessageHeaderForWelcome("MyEmail@Gmail.com", callBackUrl));
myMessage.Html = string.Format(" ");
// Create an Web transport for sending email.
var transportWeb = new Web(SendGridApiKey);
// Send the email, which returns an awaitable task.
transportWeb.DeliverAsync(myMessage);
Я создал отдельный метод для получения заголовка JSON
private static string GetMessageHeaderForWelcome(string email, string callBackUrl)
{
var header = new Header();
//header.AddSubstitution("{{FirstName}}", new List<string> { "Dilip" });
//header.AddSubstitution("{{LastName}}", new List<string> { "Nikam" });
header.AddSubstitution("{{EmailID}}", new List<string> { email });
header.AddSubstitution("-VERIFICATIONURL-", new List<string>() { callBackUrl });
//header.AddSubstitution("*|VERIFICATIONURL|*", new List<string> { callBackUrl });
//header.AddSubstitution("{{VERIFICATIONURL}}", new List<string> { callBackUrl });
header.AddFilterSetting("templates", new List<string> { "enabled" }, "1");
header.AddFilterSetting("templates", new List<string> { "template_id" }, WelcomeSendGridTemplateID);
return header.JsonString();
}
Ниже приведен код, который я использовал в своем шаблоне HTML Sendgrid.
<div>Your {{EmailID}} register. Please <a class="btn-primary" href="-VERIFICATIONURL-">Confirm email address</a></div>
В случае, если какой-либо запрос, пожалуйста, дайте мне знать.
Для замены встроенного HTML вам нужно использовать -YourKeyForReplace- & для замены текста вам необходимо использовать {{UserKeyForReplace}}
Я использовал следующий подход. Обратите внимание, что вы должны предоставить mail.Text
а также mail.Html
значения - я использую пустую строку и <p></p>
тег, как показано в примере. Ваш шаблон SendGrid также должен по умолчанию содержать <%body%>
а также <%subject%>
токены, хотя они будут заменены фактическим значением субъекта и тела, указанным в mail.Text
а также mail.Html
свойства.
public void Send(string from, string to, string subject, IDictionary<string, string> replacementTokens, string templateId)
{
var mail = new SendGridMessage
{
From = new MailAddress(from)
};
mail.AddTo(to);
mail.Subject = subject;
// NOTE: Text/Html and EnableTemplate HTML are not really used if a TemplateId is specified
mail.Text = string.Empty;
mail.Html = "<p></p>";
mail.EnableTemplate("<%body%>");
mail.EnableTemplateEngine(templateId);
// Add each replacement token
foreach (var key in replacementTokens.Keys)
{
mail.AddSubstitution(
key,
new List<string>
{
replacementTokens[key]
});
}
var transportWeb = new Web("THE_AUTH_KEY");
var result = transportWeb.DeliverAsync(mail);
}
Затем его можно назвать так:
Send(
"noreply@example.com",
"TO_ADDRESS",
"THE SUBJECT",
new Dictionary<string, string> {
{ "@Param1!", "Parameter 1" },
{ "@Param2!", "Parameter 2" } },
"TEMPLATE_GUID");