Sendgrid-nodejs: Sendgrid v3 Nodejs-Ersetzungen in Vorlagen funktionieren nicht

Erstellt am 18. Apr. 2018  ·  15Kommentare  ·  Quelle: sendgrid/sendgrid-nodejs

Hallo,

Im Paket sendgrid nodejs npm ist ein Problem aufgetreten. Ich kann E-Mails mit Ersetzungen und Vorlagen senden, aber das Problem liegt in der E-Mail am Client-Ende. Die Ersetzungen% name%,% company% usw. werden nicht durch den Wert ersetzt.

Code-Auszug
const sgMail = require ('@ sendgrid / mail');
sgMail.setApiKey (sendgrid_key);
var msg =
{
"Personalisierungen": [{
"bis": [{
"email": " [email protected] ",
"name": "Some Company"
}],
"Substitutionen": {
"% name%": "John",
"% company%": "Some Company",
"% business%": "Schneller Pheny"
},
"Betreff": "Rechnung für ein Unternehmen!"
}],
"von": {
"email": "CompanyA [email protected] ",
"name": "CompanyA"
},
"Antwort an": {
"email": " [email protected] ",
"name": "Kundenservice"
},
"Betreff": "Rechnung für ein Unternehmen!",
"template_id": "93f052da-08d4-46f2-8f0c-f2a193bceea0"
};

sgMail
.send (msg)
.then (() => {
console.log ('SendGrid :: Antwort nach erfolgreichem Senden der E-Mail!');
})
.catch (Fehler => {
console.error ('Fehler SendGrid :::' + error.toString ());
});

Code wird ausgeführt und erhält E-Mails ohne Ersatz für% name%,% business%,% company%


Jetzt habe ich versucht, die sengrid-Website https://sendgrid.com/docs/API_Reference/api_v3.html zu verwenden
Es sendet E-Mails perfekt ohne Probleme und alle Ersetzungen werden korrekt vorgenommen.

Was ist falsch an dem Javascript-PMM-Code, mit dem ich die Werte in sgMail.send (msg) festlege?

Fordern Sie Ihre Hilfe an.

question

Hilfreichster Kommentar

Sendgrid v3 muss Ersetzungen durch dynamic_template_data wie

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

Alle 15 Kommentare

Anscheinend fehlen Ihnen die Substitutions-Wrapper. Ich habe gerade das Beispiel, das sie in diesem Anwendungsfall verwendet haben, mit einer einfachen Vorlage verwendet, und es funktioniert.

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);

Meine Vorlage besteht nur aus diesem Codeausschnitt:

<%body%> {{name}}

Anscheinend ist der Teil <%body%> obligatorisch.

Vielleicht können Sie auch versuchen, Ihre Wrapper auf etwas wie {{ , }} oder etwas anderes (oder % , % in Ihrem Fall) einzustellen dass das Beispiel nicht die Wrapper im Substitutionsobjekt enthält, sondern nur den Namen der Substitution.

Versuchen Sie es mit so etwas:

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

Fantastisch. Es funktionierte. Danke vielmals. Substitution Wrapper fehlte.

Danke für die vollständige Antwort. Viel Spaß beim Codieren!

@adamreisnz ,

Vielleicht sollten wir standardmäßig sgMail.setSubstitutionWrappers('{{', '}}'); aufrufen, um solche Probleme in Zukunft zu vermeiden. Was denkst du?

@adamreisnz ,

Vielleicht versuchen wir, ein paar gängige Wrapper wie% oder _ zu erkennen?

Das wird großartig. Wenn der Benutzer über das Sendgrid-Portal die Vorlage erstellt / entwirft, fügt das Portal standardmäßig die Substitutionen% body% und% name% ein. Daher wird der Benutzer natürlich daran denken, das% -Zeichen nicht zu ändern, und mit der Vorlage fortfahren, da er sich der Funktionalität nicht vollständig bewusst ist. Wenn Sendgrid vorschlagen kann, dass% in ein beliebiges Zeichen geändert werden kann oder die Funktion {{}} bevorzugt, verwendet der Benutzer es oder die Vorlage, die Standardeinstellungen lädt, ersetzt% an erster Stelle durch {{. Es wird das Problem vermeiden, mit dem ich konfrontiert war.

Ich bin nicht begeistert von der automatischen Erkennung, es sei denn, es ist ein sehr robuster Algorithmus. Das Problem beim Versuch, den Prozess zu intelligent zu gestalten, besteht darin, dass es zu möglicherweise schwer zu debuggenden Fehlern kommen kann. Was ist, wenn jemand _ zur Hervorhebung verwendet? ZB wirklich betont. Das bedeutet nicht, dass das Symbol _ der Substitutions-Wrapper ist. Wie bei % können Sie es für Prozentsätze verwenden und den Algorithmus dazu verleiten, zu glauben, dass Sie es als Substitutions-Wrapper verwenden, wo Sie es nicht sind.

Da Sendgrid auf Lenkervorlagen umstellt, die {{ und }} als Substitutions-Wrapper verwenden, halte ich dies für eine sinnvolle Standardeinstellung. Es gibt einen Grund, warum diese Zeichen in Sprachen wie dem Lenker als Substitutions-Wrapper verwendet werden, da sie in der normalen Sprache nicht sehr häufig vorkommen. Der Unterstrich und der Prozentsatz sind häufiger und daher möglicherweise anfällig für Fehlinterpretationen.

Ich denke, es geht nur darum, dies gut zu dokumentieren, um es klar zu machen. Mit der Option, einen eigenen Wrapper anzugeben, sollte der Benutzer über alles verfügen, was er benötigt, damit er funktioniert.

Wenn jemand eine Idee für eine robuste automatische Erkennung hat, würde ich gerne einen Pseudo-Algorithmus sehen, der alle Szenarien und alle möglichen Wrapper gut handhaben kann und gleichzeitig Fehlalarme vermeidet.

Gedanken?

Zustimmen. Dokumentationsaktualisierungen sind die beste Option.

@adamreisnz @vinvantest stimmte zu, Fortschritte finden Sie unter https://github.com/sendgrid/sendgrid-nodejs/issues/681 .

Sendgrid v3 muss Ersetzungen durch dynamic_template_data wie

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

@goelmk ,

Hier ist ein vollständiges Beispiel. Vielen Dank!

Mit besten Empfehlungen,

Elmer

Sehr verwirrend, dass Sie dynamic_template_data
Es wäre schön, die Dokumentation https://sendgrid.com/docs/API_Reference/api_v3.html zu aktualisieren

Ich habe versucht, dem neuesten Beispiel von @goelmk zu folgen . Funktioniert bei mir nicht :(
Meine Vorlage wurde mit Ihrem WYSIWYG-Editor erstellt und ich habe versucht, {{verifyUrl}} sowohl in eine Textkomponente als auch in den URL-Link einer Schaltflächenkomponente einzufügen. beides funktioniert nicht.

@shawnkoh Hast du es gelöst? Ich habe die Vorlage auch mit dem visuellen Designer erstellt und die Ersetzung funktioniert nicht.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

TobiahRex picture TobiahRex  ·  3Kommentare

thinkingserious picture thinkingserious  ·  4Kommentare

zvone187 picture zvone187  ·  4Kommentare

wooyah picture wooyah  ·  4Kommentare

agostonbonomi picture agostonbonomi  ·  3Kommentare