Sendgrid-nodejs: テンプレートでのSendgridv3Nodejsの置換が機能しない

作成日 2018年04月18日  ·  15コメント  ·  ソース: sendgrid/sendgrid-nodejs

こんにちは、

sendgrid nodejs npmパッケージで、問題が発生しました。 置換とテンプレートを使用して電子メールを送信できますが、問題はクライアント側の電子メールにあります。%name%、%company%など。置換は値に置き換えられません。

コードスニペット
const sgMail = require( '@ sendgrid / mail');
sgMail.setApiKey(sendgrid_key);
var msg =
{{
「パーソナライズ」:[{
"to":[{
"メール": " [email protected] "、
「名前」:「一部の会社」
}]、
「置換」:{
"%name%": "ジョン"、
"%company%": "Some Company"、
"%business%": "Faster Pheny"
}、
"件名": "一部の会社の請求書!"
}]、
"from":{
"メール": "CompanyA [email protected] "、
"名前": "CompanyA"
}、
"に返信": {
"メール": " [email protected] "、
"名前": "カスタマーサービス"
}、
"件名": "一部の会社の請求書!"、
"template_id": "93f052da-08d4-46f2-8f0c-f2a193bceea0"
};

sgMail
.send(msg)
.then(()=> {
console.log( 'SendGrid ::メールを正常に送信した後の応答!');
})
.catch(error => {
console.error( 'Error SendGrid :::' + error.toString());
});

コードが実行され、%name%、%business%、%company%の代わりに使用せずに電子メールを受信します


sengridのウェブサイトhttps://sendgrid.com/docs/API_Reference/api_v3.htmlを使用してみました
それは問題なく完璧な電子メールを送信し、すべての置換が正しく行われます。

sgMail.send(msg)の値を設定するために使用しているjavascript npmコードの何が問題になっていますか?

あなたの助けを要求してください。

question

最も参考になるコメント

Sendgrid v3では、置換を次のようなdynamic_template_dataに置き換える必要があります。

const msg = {
    to: email,
    from: '[email protected]',
    subject: 'Sample Email Subject',
    templateId: 'your_template_id_here,
    substitutionWrappers: ['{{', '}}'],
    dynamic_template_data: {
      "data_item": "value" 
    }
   };

全てのコメント15件

置換ラッパーが不足しているようです。 このユースケースで使用した例を単純なテンプレートで使用したところ、機能します。

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
sgMail.setSubstitutionWrappers('{{', '}}'); // Configure the substitution tag wrappers globally
const msg = {
  to: '[email protected]',
  from: '[email protected]',
  subject: 'Hello world',
  text: 'Notification',
  html: '<p></p>',
  templateId: 'your-id-goes-here',
  substitutions: {
    name: 'John'
  },

};
sgMail.send(msg);

私のテンプレートは、次のコードスニペットのみで構成されています。

<%body%> {{name}}

どうやら、 <%body%>部分は必須です。

ラッパーを{{}} 、または他の何か(または、この場合は%% )のようなものに設定してみることができます。この例では、置換オブジェクトにラッパーは含まれていません。置換の名前だけが含まれています。

次のようなもので試してください:

"substitutions": {
  name: "John",
  company: "Some Company",
  business: "Faster Pheny"
},

素晴らしい。 出来た。 トンありがとう。 代替ラッパーが欠けていたものです。

完全な答えをありがとう。 ハッピーコーディング!

@adamreisnz

おそらく、将来この種の問題を回避するために、デフォルトでsgMail.setSubstitutionWrappers('{{', '}}');を呼び出す必要があります。 どう思いますか?

@thinkingserious私たちは正確にそれを行います。 https://github.com/sendgrid/sendgrid-nodejs/blob/master/packages/mail/src/classes/mail-service.js#L21を参照して

@adamreisnz

たぶん、%や_などのいくつかの一般的なラッパーを検出しようとしますか?

それは素晴らしいでしょう。 Sendgridポータルを介してユーザーがテンプレートを作成/設計すると、ポータルはデフォルトで置換%body%と%name%を挿入します。 したがって、当然のことながら、ユーザーは%文字を変更しないと考え、機能を完全に認識していないため、テンプレートを続行します。 Sendgridが%を任意の文字に変更できることを提案できる場合、または機能が{{}}を優先する場合、ユーザーはそれを使用するか、デフォルト設定をロードするテンプレートが最初に%を{{に置き換えます。 それは私が直面した問題を回避します。

非常に堅牢なアルゴリズムでない限り、自動検出には熱心ではありません。 プロセスをあまりにもスマートにしようとすると、エラーのデバッグが困難になる可能性があるという問題があります。 誰かが強調のために_を使用した場合はどうなりますか? たとえば、_本当に_強調されています。 これは、 _シンボルが置換ラッパーであることを意味するものではありません。 %と同じように、パーセンテージに使用でき、アルゴリズムをだまして、使用していない代替ラッパーとして使用していると思わせる可能性があります。

Sendgridは{{}}を置換ラッパーとして使用するハンドルバーテンプレートに移行しているため、これは賢明なデフォルトだと思います。 これらの文字は通常の言語ではあまり一般的ではないため、ハンドルバーなどの言語で置換ラッパーとして使用されるのには理由があります。 アンダースコアとパーセンテージはより一般的であるため、誤解されやすい可能性があります。

明確にするために、これをうまく文書化するだけの問題だと思います。 独自のラッパーを指定するオプションを使用すると、ユーザーはそれを機能させるために必要なすべてのものを用意する必要があります。

誰かが堅牢な自動検出のアイデアを持っているなら、誤検知を避けながら、すべてのシナリオとすべての可能なラッパーをうまく処理できる疑似アルゴリズムを見たいと思います。

考え?

同意します。 ドキュメントの更新が最良のオプションになります。

@adamreisnz @vinvantestが同意しました。進捗状況については、 https://github.com/sendgrid/sendgrid-nodejs/issues/681をご覧ください。

Sendgrid v3では、置換を次のようなdynamic_template_dataに置き換える必要があります。

const msg = {
    to: email,
    from: '[email protected]',
    subject: 'Sample Email Subject',
    templateId: 'your_template_id_here,
    substitutionWrappers: ['{{', '}}'],
    dynamic_template_data: {
      "data_item": "value" 
    }
   };

@goelmk

これが完全な例です。 ありがとう!

敬具、

エルマー

dynamic_template_dataを使用する必要があることを非常に混乱させます
ドキュメントを更新すると便利ですhttps://sendgrid.com/docs/API_Reference/api_v3.html

@goelmkの最新の例に従って
私のテンプレートはWYSIWYGエディターを使用して作成され、テキストコンポーネントとボタンコンポーネントのURLリンクの両方に{{verifyUrl}}を配置してみました。 どちらも機能しません。

@shawnkoh解決しましたか? また、ビジュアルデザイナーでテンプレートを作成しましたが、置換が機能していません。

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