Sendgrid-nodejs: トランザクションテンプレートを送信すると、データオブジェクトを介して指定されたサブジェクトが破棄されます

作成日 2018年10月31日  ·  19コメント  ·  ソース: sendgrid/sendgrid-nodejs

問題の概要

sendgridMail.send関数を使用してトランザクションテンプレートを送信する場合、 sendgridMail.senddata.subjectまたはdata.personalizations[someIndex].subject経由)に渡されるdataオブジェクトに追加された件名data.personalizations[someIndex].subject )は破棄され、実際のトランザクションテンプレート自体で指定されている件名が使用されます。

私が期待する動作は、 dataオブジェクトで指定されたフィールドが既存のテンプレートフィールドを上書きすることですが、そうではないようです。 v3 Mail Send APIのドキュメントを見ると、 template_idフィールドの説明には次のように記載されています。

使用するテンプレートのID。 件名とコンテンツ(テキストまたはhtml)を含むテンプレートを使用する場合、パーソナライズレベルまたはメッセージレベルでそれらを指定する必要はありません。

私にとって、「パーソナライズやメッセージレベルでそれらを指定する必要はありません」とは、テンプレートの件名を上書きできることを意味します。 そうでない場合は、説明を「パーソナライズやメッセージレベルで指定することはできません」に変更する必要

  • 「マイメールの件名」という件名のトランザクションテンプレートを作成しました
  • sendgridMail.sendを使用してメールを送信しようとしましたが、 data.subjectを「[TEST] MyEmailSubject」に指定しました
  • 私が受け取った電子メールには、「私の電子メールの件名」という件名がありました

再現する手順

  1. 件名が指定されたトランザクションテンプレートをhttps://sendgrid.comで作成します
  2. sendgridMail.send関数を使用して、テンプレートを送信します。 また、必ずdata.subjectまたはdata.personalizations[someIndex].subjectいずれかを指定してください。
  3. APIに渡されたものではなく、元の件名でメールが受信されていることを確認します

技術的な詳細:

  • sendgrid-nodejsバージョン:6.3.1
  • Node.jsバージョン:v8.11.3
non-library issue

最も参考になるコメント

ドー! {{subject}}を設定する必要がある場所を見つけました。 他の誰かがこの問題を抱えている場合は、テンプレートを編集して、左側の[設定]をクリックしてください。 あなたの主題を入力するためのスペースがあります。 ここに{{subject}}と入力します。

全てのコメント19件

こんにちは@ 10kc-zack、

トランザクションテンプレートでは、件名を{{subject}}に設定し、コードでdata.subject"[TEST] My Email Subject"設定すると思います。

それはあなたのために働きますか?

敬具、

エルマー

@thinkingseriousの返信とあなたの提案に

これで作業は完了しますが(現在使用している回避策です)、API呼び出し本体の一部として件名を設定できる方がはるかに望ましいです。 APIに提供されたサブジェクトが実際に破棄され、その情報がAPIドキュメントから欠落していることを確認できますか?

こんにちは@ 10kc-zack、

トランザクションテンプレートでは、件名を{{subject}}に設定し、コードでdata.subject"[TEST] My Email Subject"設定すると思います。

それはあなたのために働きますか?

敬具、

エルマー

@ 10kc-zackが述べたように、この回避策は機能しますが、テンプレートが' apostrophyなどの一部の文字を変換していることにも気づきました。 私のメールは件名Someone's届きます

SendMailNugetパッケージメソッドを使用して件名を設定するのに問題があります。 上記の情報を使用して更新しようとしたコードは次のとおりです。

    public async Task SendAsyncTemplate(string FromAddress, string FromName, string ToAddress, string ToName, string Subject, string LinkText, string LinkUrl)
    {
        _logger.LogInformation($"Sending mail to: {ToAddress}, with subject: {Subject}");

        var apiKey = _sendGridOptions.SendGridAPI;
        var client = new SendGridClient(apiKey);

        var from = new EmailAddress(FromAddress, FromName);
        var to = new EmailAddress(ToAddress, ToName);
        var msg = new SendGridMessage();
        var templateData = new ExampleTemplateData
        {
            Subject = Subject,
            Name = ToName,
            LinkText = LinkText,
            LinkUrl = LinkUrl
        };
        msg.Subject = "{{subject}}";
        msg.SetFrom(from);
        msg.AddTo(to);
        msg.AddCc(from);
        msg.SetTemplateId("supersecret");
        msg.SetTemplateData(templateData);

        var response = await client.SendEmailAsync(msg);

        _logger.LogInformation($"SendGrid Response Status Code: {response.StatusCode}");
    }
    private class ExampleTemplateData
    {
        [JsonProperty("subject")]
        public string Subject { get; set; }

        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("linkText")]
        public string LinkText { get; set; }
        [JsonProperty("linkUrl")]
        public string LinkUrl { get; set; }
    }

デバッグモードで実行しましたが、値が正しく設定されています。 件名として取得しているのはハイフンです。 何か案は?

ドー! {{subject}}を設定する必要がある場所を見つけました。 他の誰かがこの問題を抱えている場合は、テンプレートを編集して、左側の[設定]をクリックしてください。 あなたの主題を入力するためのスペースがあります。 ここに{{subject}}と入力します。

@smschick

あなたの場合、あなたは{{{ subject }}}をするでしょう。

@ 10kc-zack、

ドキュメントを変更するようにリクエストを受け付けています。 このドキュメントを参照していると思いますよね?

敬具、

エルマー

@thinkingseriousそれは確かに私が参照していたドキュメントです:+1:

dynamic_template_dataを使用せずにAPIを介して件名を設定できるようにする計画はありますか?

@ mou01件名を設定する方法の簡単な例: https

はい、動的テンプレートデータを使用する場合、パーソナライズを介してサブジェクトを渡すことができないのはかなり混乱しています。見た目のデータでサブジェクトを渡す必要があります。

@ mou01件名を設定する方法の簡単な例: https

これは動的テンプレートで機能しますか?

そうではないと思いますが、動的テンプレートの背後にある考え方は、テンプレート設定でサブジェクトを設定し、サブジェクトで動的データを使用できるようにすることだと思います。 トレードオフは、完全に柔軟にしたい場合は、動的データで渡す必要があることです。

この問題を抱えている人がいる場合:
テンプレートに移動し、歯車のアイコンが付いた[設定]をクリックして、件名フィールドに入力します{{subject}}
そして最後に、ペイロードを送信するとき、「 dynamic_template_data 」はサブジェクト値を持つ必要があります。
"dynamic_template_data":{ "subject": "My Subject Value here" }

ドキュメントの変更時にこの問題を解決することは、このリポジトリで修正できるものではありません。 ドキュメントチームにリクエストを送信しました(参照タイトル:_メールの更新-template_idの説明を送信_)。更新があればここに戻ります。

ドキュメントが更新されました。

ありがとう@ childish-sambino

トリプルブラケットはまだ機能していますが、それはまだ公式の解決策ですか?
ありがとう!

image

@tcukanootはい。

このページは役に立ちましたか?
0 / 5 - 0 評価