如何通过API C#和Template将自定义变量添加到SendGrid电子邮件中
我试图弄清楚如何将变量添加到已在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 = " "; myMessage.EnableTemplate(" Hello
"); myMessage.EnableTemplateEngine("9386b483-8ad4-48c2-9ee3-afc7618eb56a"); var identifiers = new Dictionary(); 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);
我的电子邮件
Hello -REP- <%body%> Fotter
我的C#代码
myMessage.AddSubstitution("-REP-", substitutionValues);
完美的作品!!!
我找到了解决方案:
replacementKey = "*|VERIFICATION_URL|*"; substitutionValues = new List { VERIFICATION_URL }; myMessage.AddSubstitution(replacementKey, substitutionValues);
我用过以下方法。 请注意,您必须提供mail.Text
和mail.Html
值 – 我使用空字符串和
标记,如示例中所示。 您的SendGrid模板仍然必须包含默认的<%body%>
和<%subject%>
标记,尽管它们将替换为mail.Text
和mail.Html
属性中指定的实际主题和正文值。
public void Send(string from, string to, string subject, IDictionary 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 = ""; mail.EnableTemplate("<%body%>"); mail.EnableTemplateEngine(templateId); // Add each replacement token foreach (var key in replacementTokens.Keys) { mail.AddSubstitution( key, new List { replacementTokens[key] }); } var transportWeb = new Web("THE_AUTH_KEY"); var result = transportWeb.DeliverAsync(mail); }
然后可以像这样调用它:
Send( "noreply@example.com", "TO_ADDRESS", "THE SUBJECT", new Dictionary { { "@Param1!", "Parameter 1" }, { "@Param2!", "Parameter 2" } }, "TEMPLATE_GUID");
在做了很多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头的Separate方法
private static string GetMessageHeaderForWelcome(string email, string callBackUrl) { var header = new Header(); //header.AddSubstitution("{{FirstName}}", new List { "Dilip" }); //header.AddSubstitution("{{LastName}}", new List { "Nikam" }); header.AddSubstitution("{{EmailID}}", new List { email }); header.AddSubstitution("https://stackoverflow.com/questions/25887534/how-to-add-custom-variables-to-sendgrid-email-via-api-c-sharp-and-template/-VERIFICATIONURL-", new List () { callBackUrl }); //header.AddSubstitution("*|VERIFICATIONURL|*", new List { callBackUrl }); //header.AddSubstitution("{{VERIFICATIONURL}}", new List { callBackUrl }); header.AddFilterSetting("templates", new List { "enabled" }, "1"); header.AddFilterSetting("templates", new List { "template_id" }, WelcomeSendGridTemplateID); return header.JsonString(); }
我在我的HTML Sendgrid模板中使用的代码下面。
Your {{EmailID}} register. Please Confirm email address
如有任何疑问,请告诉我。
对于内联HTML替换,您需要使用-YourKeyForReplace-&对于文本替换,您需要使用{{UserKeyForReplace}}