如何通过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.Textmail.Html值 – 我使用空字符串和

标记,如示例中所示。 您的SendGrid模板仍然必须包含默认的<%body%><%subject%>标记,尽管它们将替换为mail.Textmail.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}}