Sendgrid-nodejs: Substitutionen funktionieren in Transaktionsvorlagen nicht

Erstellt am 8. Dez. 2017  ·  20Kommentare  ·  Quelle: sendgrid/sendgrid-nodejs

screenshot from 2017-12-08 10-36-46

Problemzusammenfassung

Ersetzungen funktionieren bei Verwendung dieser Bibliothek nicht. Es funktioniert bei Verwendung von Curl.

Schritte zum Reproduzieren

  1. Erstellen Sie eine Transaktions-E-Mail-Vorlage in Ihrem SendGrid-Konto
  2. Habe entweder <% body%> in der Vorlage,% firstName% oder beides (ich habe beide ausprobiert)
  3. Führen Sie diesen Knotencode aus (füllen Sie die Konfiguration aus)
`'use strict';

var config = {

    apiKey: '',
    from: '',
    to: '',
    templateId: ''

}

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(config.apiKey);

async function sendTest() {

 var newMsg = {

   "from": {
    "name": "Test Script",
    "email": config.from
   },
   "personalizations": [{
    "to": config.to,
    "substitutions": {
     "-firstName-": "Maciejs", 
     "%firstName%": "Maciej",
     "-first_name": "Maciej",
     "%first_name%": "Maciej"
    }
   }],
   "subject": "test subject",
   "content": [{
     "type": "text/plain",
     "value": "Hello, %firstName%!"
    },
    {
     "type": "text/html",
     "value": "<html><p>Hello, %firstName%!</html> "
    }],
    "template_id": config.templateId
 }

   await sgMail.send(newMsg);

}

sendTest();`
  1. Beachten Sie, dass in der zugestellten E-Mail nichts ersetzt wird. Auch hier funktioniert es perfekt mit Locken.

Ich füge auch einen Screenshot der Vorlage im SendGrid-Editor und die E-Mail hinzu, die ich erhalte
screenshot from 2017-12-08 10-36-26

Technische Details:

  • sendgrid-nodejs Version: 6.1.4
  • Node.js Version: 8.9.2
medium help wanted help wanted community enhancement up for grabs up-for-grabs

Hilfreichster Kommentar

Für alle so verzweifelt wie ich gestern: In der v3-API müssen Sie dynamic_template_data anstelle von substitutions , dies ist noch nirgendwo dokumentiert!

Verwenden Sie dann {{var_name}} in der E-Mail-Vorlage und dynamic_template_data: { var_name: "var_value" } im API-Aufruf.

Alle 20 Kommentare

@MaciejKrawczyk Haben Sie versucht, setSubstitutionWrapper und die Wrapper aus substitutions wegzulassen?

Ex:
sgMail.setSubstitutionWrappers('-', '-');
"substitutions": { "firstName": "Maciejs" }

Ich bin mir nicht sicher, wie Sie auf diese Weise mehrere Wrapper gleichzeitig ausführen würden, aber ich konnte Subs dazu bringen, mit dieser Version zu arbeiten, indem ich die Wrapper nicht im Substitutionsattribut angegeben habe. Meine Subs sehen aus wie
emailOptions.substitutions = {}
emailOptions.substitutions.CLIENT_NAME = myClientName

Es klappt. Dankeschön!

Vielen Dank für Ihren Besuch bei @kmcurry!

Ich bin froh, dass Sie @MaciejKrawczyk betreiben!

Dies sollte unbedingt in die README-Datei aufgenommen werden! Kostete mich 2 Stunden, um das herauszufinden!

@ Laskuma ,

Das ist nicht gut :(

Hilft diese Dokumentation ? Wenn ja, können Sie mir zeigen, wo Sie zuerst nach Hilfe gesucht haben, damit ich sicherstellen kann, dass wir dort einen klaren Link haben?

Vielen Dank!

Mit besten Empfehlungen,

Elmer

@thinkingserious Ja. Dieses Dokument hat sehr geholfen. Da ich jedoch von der offiziellen Website kam, auf der die Ersetzungsschlüssel den Wrapper enthalten sollten, habe ich den Anwendungsfällen nicht allzu viel Aufmerksamkeit geschenkt.

Hallo @LASkuma ,

Wenn Sie sagen, dass Sie von der offiziellen Website gekommen sind, können Sie mir bitte mitteilen, auf welche URL Sie sich beziehen? Vielen Dank!

Hallo @thinkingserious ,
Ich habe mich auf diese Seite bezogen . Sogar der Abschnitt zum Ausprobieren enthält Substitutionsschlüssel mit den enthaltenen Wrappern. Nachdem ich die Dokumentation gelesen hatte, dachte ich, dass die Knotenbibliothek natürlich mit der Dokumentation übereinstimmt.

Danke @LASkuma!

Das ist wirklich hilfreiches Feedback.

Bei der Lösung bin ich mir allerdings nicht ganz sicher. Diese Dokumente sind für diejenigen gedacht, die direkt mit unserer API interagieren möchten oder eine unserer Hilfsbibliotheken verwenden möchten.

Sie haben bereits erwähnt, dass wir diese Dokumentation in die README-Datei aufnehmen sollten. Meinst du hier Sollten wir dort speziell den Substitutions-Anwendungsfall nennen?

Danke nochmal für deine Hilfe!

Mit besten Empfehlungen,

Elmer

Dies sollte auf jeden Fall in der Readme sein. Ich habe alles versucht, ich habe alle Dokumente in der SendGrid-API-Referenz gelesen, alles, was auf GitHub ist (dachte ich), habe den Support kontaktiert und ich würde meinen eigenen API-Wrapper erstellen, wenn @kmcurry nicht

Danke @MaciejKrawczyk ,

Dies ist ein sehr gutes Feedback und ich habe es dem Rückstand unseres Teams für einen tieferen Tauchgang hinzugefügt. Wir werden Updates zu diesem Thread bereitstellen.

Vielen Dank!

Mit besten Empfehlungen,

Elmer

Ist das erledigt? Ich habe das gleiche Problem.

Hallo @sriharrsha ,

Haben Sie den Vorschlag von @kmcurry ausprobiert?

Noch nicht. Ich werde aktualisieren, ob es funktioniert oder nicht bald.
Entschuldigung für die späte Antwort.

Für alle so verzweifelt wie ich gestern: In der v3-API müssen Sie dynamic_template_data anstelle von substitutions , dies ist noch nirgendwo dokumentiert!

Verwenden Sie dann {{var_name}} in der E-Mail-Vorlage und dynamic_template_data: { var_name: "var_value" } im API-Aufruf.

@tkafka oh mein Gott! Vielen Dank für diesen Mann, der mir in den letzten 2 Tagen die Haare ausgezogen hat.

@tkafka Vielen Dank! Das ist so frustrierend! Ich habe 3 Stunden meines Tages gebraucht ...

Hier ist der gesamte Code für den Fall, dass jemand dasselbe sucht:

var sendgrid = require('@sendgrid/mail');
sendgrid.setApiKey(env.sendgridApiKey);
sendgrid.setSubstitutionWrappers('{{', '}}');

var newMsg = {
      "from": {
       "name": "Your Company",
       "email": env.businessEmail
      },
      "personalizations": [{
       "to": order.email,
       "dynamic_template_data": {"order_id": "1234", "first_name": "Max", "last_name": "Mustermann"}
      }],
      "subject": "test subject",
      "content": [{
        "type": "text/plain",
        "value": "Hello, {{firstName}}!"
       },
       {
        "type": "text/html",
        "value": "<html><p>Hello, {{'firstName}}!</html> "
       }],
       "template_id": env.sendgridOrderConfirmationTemplateId
    };
    console.log("Sending confirmation email...")
    return sendgrid.send(newMsg);

Die Dokumentation von sendgrid ist gelinde gesagt schrecklich.

Hallo, alle miteinander,

Weitere Informationen zum Fortschritt finden Sie in

Mit besten Empfehlungen,

Elmer

Hah, dynamic_template_data . Ich habe dein kleines Rätsel gelöst! :Lächeln:

Für andere Typoskriptbenutzer - Datei erstellen mail.d.ts :

import {MailData} from "@sendgrid/helpers/classes/mail";

// see https://github.com/sendgrid/sendgrid-nodejs/issues/638

declare module "@sendgrid/helpers/classes/mail" {
    export interface MailData {
        dynamic_template_data: {[key: string]: string};
    }
}

Vielen Dank, dass Sie @xduseko !

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

thidasapankaja picture thidasapankaja  ·  4Kommentare

prasoonjalan picture prasoonjalan  ·  3Kommentare

Loriot-n picture Loriot-n  ·  4Kommentare

mikemaccana picture mikemaccana  ·  4Kommentare

agostonbonomi picture agostonbonomi  ·  3Kommentare