web-dev-qa-db-ja.com

API C#とテンプレートを介してSendGridメールにカスタム変数を追加する方法

Sendgridテンプレートエンジンで作成された既存のテンプレート(例:Webリンクまたは名前を動的に)に変数を追加する方法を理解しようとしていますが、SendGrid C#.NETライブラリを使用してこれを行う方法がわかりません。誰か助けてくれないかしら。

// Create the email object first, then add the properties.
SendGridMessage myMessage = new SendGridMessage();

myMessage.AddTo("[email protected]");
myMessage.From = new MailAddress("[email protected]", "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);
13
Jimbo Jones

私は解決策を見つけました:

replacementKey = "*|VERIFICATION_URL|*";
substitutionValues = new List<string> { VERIFICATION_URL };

myMessage.AddSubstitution(replacementKey, substitutionValues);
6
Jimbo Jones

私のメール

Hello -REP-

<%body%>

Fotter

私のC#コード

myMessage.AddSubstitution("-REP-", substitutionValues);

完璧に動作します!!!

10
Oswaldo Alvarez

私は次のアプローチを使用しました。 mail.Textmail.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(
"[email protected]", 
"TO_ADDRESS", 
"THE SUBJECT", 
new Dictionary<string, string> { 
{ "@Param1!", "Parameter 1" }, 
{ "@Param2!", "Parameter 2" } }, 
"TEMPLATE_GUID");
3
jholden17

たくさんのRNDをした後。以下のコードは正常に機能しており、テスト済みです。

            SendGridMessage myMessage = new SendGridMessage();
            myMessage.AddTo(email);
            myMessage.AddBcc("[email protected]");
            myMessage.AddBcc("[email protected]");
            myMessage.From = new MailAddress("[email protected]", "DriverPickup");
            //myMessage.Subject = "Email Template Test 15.";
            myMessage.Headers.Add("X-SMTPAPI", GetMessageHeaderForWelcome("[email protected]", 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();

    }

以下のコードは、HTMLSendgridテンプレートで使用しました。

<div>Your {{EmailID}} register. Please <a class="btn-primary" href="-VERIFICATIONURL-">Confirm email address</a></div>

ご不明な点がございましたら、お気軽にお問い合わせください。

インラインHTML置換の場合は、-YourKeyForReplace-を使用する必要があり、テキスト置換の場合は、{{UserKeyForReplace}}を使用する必要があります。

3
Optimus