Befolgen Sie das Beispiel für die Verwendung von Ersetzungen in Transaktions-E-Mails , ohne Änderungen vorzunehmen. Die Ersetzungs-Tags werden entfernt, aber der Text wird nicht eingefügt. Hier ist ein Screenshot der E-Mail, die ich erhalte:
test.js
, um Ihren API-Schlüssel, Ihre E-Mail-Adresse und templateId
einzufügen, die Sie oben erstellt haben.node test.js
.Hallo @panayi ,
Einige Dinge zu überprüfen:
Können Sie auch mitteilen, wie Ihr HTML aussieht?
Vielen Dank!
Mit besten Empfehlungen,
Elmer
Hallo, @thinkingserious , ich konnte das gleiche Problem wie bei @panayi reproduzieren.
Mein HTML-Code sieht ungefähr so aus
Hallo Vorname (Mitarbeiter: Mitarbeiter-ID)
Etwas HTML-Code
Code
sgMail.setApiKey('apikey');
sgMail.setSubstitutionWrappers('{{', '}}'); // Triied sgMail.setSubstitutionWrappers('-', '-'); as well`
const msg = {
to: '[email protected]',
from: '[email protected]',
subject: 'Hello world',
text: 'Hello plain world!',
html: 'Hello HTML world!',
templateId: 'template-id',
substitutions: {
first_name: 'Tejas',
employee_id: 'emp123',
},
};
sgMail.send(msg);
Hinweis: Ich habe sogar versucht, substitutionWrappers: ['{{', '}}']
innerhalb von msg aber ohne glück.
Technische Details:
Jede Hilfe / Korrektur wird geschätzt, da ich viel Zeit in dieses Problem investiert habe
Hallo @tjstlekr ,
Ändern Sie in Ihrem HTML-Code bitte first_name
in {{first_name}}
und employee_id
in {{employee_id}}
.
Vielen Dank!
Mit besten Empfehlungen,
Elmer
Ja @tjstlekr , ich meine den Vorlagencode wie in diesem Beispiel beschrieben .
Ich kann Ihre zweite Frage nicht ohne konkrete Beispiele beantworten. (zB Text und Vorlagencode anfordern).
Mit besten Empfehlungen,
Elmer
Traurig! Ich habe keinen Zugriff auf den Vorlagencode. Ich bleibe bei einer anderen Version.
Trotzdem danke @thinkingserious
Hast du es versucht:
substitutions: {
'first_name': 'Tejas',
'employee_id': 'emp123',
},
Ja, @thinkingserious hat das versucht. Ich habe auch die folgenden Möglichkeiten ausprobiert
substitutions: {
'-first_name-': 'Tejas',
'-employee_id-': 'emp123',
},
substitutions: {
'%first_name%': 'Tejas',
'%employee_id%': 'emp123',
},
substitutions: {
'=first_name=': 'Tejas',
'=employee_id'=: 'emp123',
},
@tjstlekr ,
Ich denke, Ihre Lösung besteht darin, jemanden zu finden, der den HTML-Vorlagencode ändern kann, um die Variablen mit einem oder mehreren Ersetzungszeichen zu versehen.
Mit besten Empfehlungen,
Elmer
@thinkingserious ist richtig. Die Vorlagenvariablen MÜSSEN in doppelte Klammern {{name}} gesetzt werden. Andernfalls weiß SendGrid nicht, wo die von Ihnen gesendeten Ersetzungen abgelegt werden sollen.
Die Variablen brauchen wirklich doppelte Klammern? Ich werde es versuchen, aber ein anderer Beitrag derselben Person zeigte die Substitutionen, die mit Bindestrichen und nicht mit doppelten Klammern arbeiten:
Hallo @tetreault ,
Standardmäßig verwenden wir doppelte Klammern. setSubstitutionWrappers
können Sie sie wie gezeigt ändern.
Vielen Dank!
Mit besten Empfehlungen,
Elmer
Ich habe das gleiche Problem wie @panayi festgestellt .
Ich folgte dem Beispiel für Transaktionsvorlagen . Ich habe Substitutions-Wrapper gesetzt und in der Vorlage Substitutionen in doppelte Klammern gesetzt. In der E-Mail, die ich erhalten habe, wurden jedoch alle Ersetzungen entfernt, ohne sie durch die von mir angegebenen zu ersetzen.
Ich habe es sowohl mit dem Code-Editor als auch mit dem Design-Editor für die Vorlage versucht.
Technische Details:
Vielen Dank!
Hallo @nrator ,
Wenn die Ersetzungen durch leere Zeichenfolgen ersetzt würden, würde ich überprüfen, ob die Variablen, auf denen Sie iterieren, nicht leer sind. Wenn Sie sicherstellen, dass sie nicht leer sind, können Sie bitte den Code-Snippit zusammen mit dem entsprechenden HTML-Code freigeben, damit ich versuchen kann, ihn zu reproduzieren.
Vielen Dank!
Mit besten Empfehlungen,
Elmer
Hi @thinkingserious
Ich verwende keine Variablen, sondern Zeichenfolgen, damit sie nicht leer sind. Unten sind das Code-Snippet, HTML und das Ergebnis, das ich erhalten habe:
Code
const sgMail = require("@sendgrid/mail");
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
sgMail.setSubstitutionWrappers("{{", "}}"); // Configure the substitution tag wrappers globally
const msg = {
from: "[email protected]", // my personal email
to: "[email protected]", // my another personal email
subject: "Hello world",
text: "Hello plain world!",
html: "<p>Hello HTML world!</p>",
templateId: "d-27e7d954368c46519eddc806e5cf8156",
substitutions: {
name: "Some One",
city: "Denver"
}
};
sgMail.send(msg).catch(err => console.error(err.message));
HTML-Vorlage
<html>
<head>
<title></title>
</head>
<body>
Hello {{name}},
<br /><br/>
I'm glad you are trying out the template feature!
<br /><br/>
<%body%>
<br /><br/>
I hope you are having a great day in {{city}} :)
<br /><br/>
</body>
</html>
E-Mail habe ich bekommen
Hello ,
I'm glad you are trying out the template feature!
<%body%>
I hope you are having a great day in :)
Technische Details
sendgrid-nodejs Version: @ sendgrid / [email protected]
Node.js Version: 8.11.2
Freundliche Grüße,
Jason
Hallo, ich habe das gleiche Problem mit Transaktionsvorlagen. Die Variablen werden nicht aufgenommen. Mit Hilfe von Testdaten zur Vorschau der Vorlage im SG-Dashboard sieht alles korrekt aus.
E-Mails werden an die richtige Person gesendet und mit der richtigen Vorlage, außer dass Variablenwerte fehlen.
Ich habe vor 2 Tagen eine Legacy-Vorlage erstellt, die gut funktioniert hat, und heute bin ich zu einer neueren gewechselt
Transaktionsvorlagen und es funktioniert nicht. Ich habe gerade die alte Legacy-Vorlage dupliziert
funktioniert gut.
"@ sendgrid / mail": "6.3.1" | Node.js 8.10
Hier ist mein Code:
async function sendEmail({ email, firstName, password }) {
const msg = {
to: [{ email, firstName }],
from: {
email: "[email protected]",
name: "name"
},
asm: {
group_id: 1234
},
templateId: "d-64b15a042b2d41d7a4b5b6a4eea649c5",
substitutions: {
userName: firstName,
email,
password
}
}
try {
await sgMail.send(msg);
} catch(e){
e.message
}
};
Und hier ist die HTML-Vorlage:
<h3>Hi {{userName}},</h3>
<div><span style="font-size:16px;">Your account has been setup. To login please use</span></div>
<div><span style="font-size:16px;">the credentials below.</span></div>
<div> </div>
<div><span style="font-size:16px;"><strong>Email:</strong> {{email}}</span></div>
<div><strong><span style="font-size:16px;">Password: </span></strong><span style="color: rgb(0, 0, 0); font-family: arial; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400;">{{password}}</span></div>
<div><span style="font-weight: 600; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-family: arial; font-size: 14px; color: rgb(0, 0, 0);"><span style="font-size: 16px;">SignIn Url: <a href="https://a.abc.com">https://a.abc.com/</a></span></span></div>
<div> </div>
<div> </div>
<div><span style="font-size:16px;">Please let us know if you need any help, email us at <a href="mailto:[email protected]">[email protected]</a></span></div>
Prost
Ich habe gerade auf die Legacy-Vorlage mit demselben HTML-Code umgestellt und es funktioniert. Kann es an neuen Änderungen in der V3-API liegen?
Hallo, nachdem ich den Kommentar von hatte , habe ich mit einer Legacy-Vorlage getestet und es hat funktioniert. Danke @himanshupnt .
Später fand ich die Sendgrid-Dokumentation Mail Send with Dynamic Transactional Templates . Ich habe die neue Vorlage (nicht die Legacy-Vorlage) zum Laufen gebracht. Ich habe dieselbe HTML-Vorlage verwendet und mein Code wurde aktualisiert auf:
const sgMail = require("@sendgrid/mail");
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
sgMail.setSubstitutionWrappers("{{", "}}"); // Configure the substitution tag wrappers globally
const msg = {
from: "[email protected]",
templateId: "d-27e7d954368c46519eddc806e5cf8156",
personalizations: [
{
to: [
{
email: "[email protected]"
}
],
dynamic_template_data: {
name: "Someone",
city: "Somewhere",
subject: "Hello new world"
}
}
]
};
sgMail.send(msg).catch(err => console.error(err.message));
Beachten Sie, dass ich "Ersetzungen" durch "dynamic_template_data" ersetzt und "innerhalb" von "Personalisierungen" platziert habe, wie in den Dokumenten gefordert. Und ich habe das Thema auch als eines der "dynamic_template_data" behandelt und es funktioniert. (Geben Sie {{subject}} in das Feld für den Betreff der Vorlage ein.)
Vielen Dank.
@nrator Das hat es auch für mich getan. Danke, dass du es gepostet hast!
Ich habe das gleiche Problem und habe auch ein Problem geöffnet (nachdem ich die eingangs erwähnten Lösungen ausprobiert habe). Ich konnte jedoch name
und city
zu der von @nrator erwähnten Vorlage <%subject%>
und <%body%>
nicht ersetzen, da sie in der E-Mail enthalten sind, die ich erhalte. Wie kann ich <%body%>
und <%subject%>
ersetzen? @himanshupnt wie hast du das gelöst?
Hi @ pankaja92 , ich konnte <% subject%> auch nicht zum
Ich habe diese sendgrid-Dokumente gefunden, die helfen können. Der Betreff param scheint jedoch nicht zu funktionieren.
@nrator Danke. Es funktionierte. Es ist also nicht nötig, <% body%> zu verwenden (da es auch nicht wie im angegebenen Beispiel funktioniert).
Übrigens nicht themenspezifisch - aber haben Sie Erfahrung oder ein Beispiel, um eine Liste mit Details über diese Bibliothek zu senden? Ich suche etwas, das mir beim Erstellen meiner App helfen könnte :)
@ pankaja92 Ich bin mir nicht sicher, was du mit dem Senden einer Liste von Details meinst. Sie können diesen sendgrid-Blogbeitrag über neue Funktionen der dynamischen Vorlagen lesen. Grundsätzlich können Sie jetzt über Listen von Elementen iterieren oder grundlegende Bedingungen verwenden, um dynamische Inhalte zu generieren.
Die tatsächlichen Codes finden Sie in diesem Repo .
Ich hoffe es hilft!
Hallo zusammen, habe auch ein paar Stunden mit diesem Thema verbracht.
Verwenden Sie statt substitutions
dynamicTemplateData
im Hauptobjekt msg
:
const sgMail = require('@sendgrid/mail')
sgMail.setApiKey(process.env.SENDGRID_API_KEY)
sgMail.setSubstitutionWrappers('{{', '}}')
const msg = {
to: '[email protected]',
from: '[email protected]',
templateId: 'd-27e7d954368c46519eddc806e5cf8156',
dynamicTemplateData: {
name: 'Some One',
city: 'Denver',
},
}
sgMail.send(msg)
Referenz: https://github.com/sendgrid/sendgrid-nodejs/pull/691
Laut dieser PR wird, wenn templateId
eine dynamische Vorlage ist (mit dem Präfix d-
), die substitutions
nicht gesendet, also die dynamicTemplateData
Objekt sollte verwendet werden.
Sie haben hier ein Problem erstellt, um die Verwendung dynamischer Vorlagen zu den Dokumenten zu verbessern, aber bis dahin hoffe ich, dass dies hilft. 🎉
Bitte folgen Sie diesem Problem: # 703
ändere 'Substitutionen' in 'dynamic_template_data'
@jseyfert sollte es nicht dynamic_template_data
?
@aroach du bist richtig. Ich habe meinen Kommentar aktualisiert.
Anfangs hat es auch auf meiner Seite nicht funktioniert.
Ich habe festgestellt, dass meine Version etwas veraltet ist (ich habe @ sendgrid / mail @ 6.2.1 verwendet).
Ich habe das Paket aktualisiert, meinen Code geändert und jetzt funktioniert es:
using @ sendgrid / [email protected]
const result = await this.sgMail.send({
personalizations: [{
to: this._to
}],
dynamicTemplateData: {
test: 'test' <== working (code in template: {{ test }})
},
templateId: this._templateId,
});
Ich sollte beachten, dass der folgende Code nicht funktioniert:
const result = await this.sgMail.send({
personalizations: [{
to: this._to,
dynamicTemplateData: {
test: 'test' <== NOT working (code in template: {{ test }})
}
}],
templateId: this._templateId,
});
Ja, Sie müssen v6.3.1 für die Unterstützung von dynamic_template_data verwenden.
Am Dienstag, den 11. Dezember 2018 um 04:15 Uhr schrieb Roy Milder [email protected] :
Anfangs hat es auch auf meiner Seite nicht funktioniert.
Ich habe festgestellt, dass meine Version etwas veraltet war (ich habe verwendet
@ sendgrid / mail @ 6.2.1)
Ich habe das Paket aktualisiert, meinen Code geändert und jetzt funktioniert es:using @ sendgrid / [email protected]
const result = warte auf this.sgMail.send ({
Personalisierungen: [{
zu: this._to
}],
dynamicTemplateData: {
test: 'test' <== funktioniert (Code in Vorlage: {{test}})
},
templateId: this._templateId,
});- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/sendgrid/sendgrid-nodejs/issues/676#issuecomment-446166152 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/ACL-sjFRFP8txUETNWFVLs0chW5yyL1Nks5u35OzgaJpZM4TOB5l
.
Hallo, vergiss nicht
Erstellen Sie keine Transaktionsvorlage, erstellen Sie eine Legacy-Vorlage und erstellen Sie eine Kopie davon.
dann werden alle Schritte, die du machst, funktionieren.
dynamicTemplateData
Funktioniert bei mir. Ich habe die neueste Version der SendGrid-Bibliothek und verwende sie über Firebase (Funktionen). Das Hauptproblem ist jetzt der Mangel an TypeScript-Unterstützung - und die Dokumentation.
@roymilder , vielen Dank. Ihre Antwort machte meinen Tag - die Ersetzungen für dynamische Vorlagen sind sehr unklar.
Ein großes Lob!
Hallo @OleksiiM ,
Hilft dieses Beispiel ?
@ darren-dev,
Vielen Dank für Ihre Hilfe! Beziehen Sie sich in Bezug auf die mangelnde Unterstützung und Dokumentation von TypeScript auf die Firebase-Seite?
@uups ,
Vielen Dank für Ihre Hilfe!
Mit besten Empfehlungen,
Elmer
@thinkingserious , ja, das tut es. Dankeschön.
@OleksiiM ,
Wo hast du zuerst gesucht? Ich versuche herauszufinden, wie ich sicherstellen kann, dass Leute, die dynamische Vorlagen verwenden müssen, zu dem Link gehen, den ich Ihnen zuerst gesendet habe.
@thinkingserious
Gestartet hier .
Es sagt:
"Senden von Transaktionsvorlagen
Sie können Transaktionsvorlagen auf drei Arten senden:
Verwenden des SMTP-Relais
Einfügen der Vorlagen-ID in den Vorlagenparameter des Web API v3 Mail Send-Endpunkts
Verwenden des Parameters x-smtpapi im Endpunkt "Web API v2 Mail Send"
Also ging ich zu "Einfügen der Vorlagen-ID in den Vorlagenparameter des Mail API-Endpunkts für
Warum es unklar war:
Die letzte Seite zeigt die Liste der möglichen "Request Body Parameters", die die template_id anzeigt, aber nichts über das Feld "dynamic_template_data" aussagt. Ich habe versucht, mit "Personalisierungen" + "Ersetzungen" + "template_id" zu gehen, und es hat nicht funktioniert.
Da ich ein neuer Sendgrid-Benutzer bin, waren mir auch "alte" Vorlagen und "neue" (dynamische) Vorlagen und der Unterschied zwischen ihnen nicht bekannt (sendgrid-Dokumentseiten von oben sagen nichts darüber aus).
Vielen Dank, dass Sie gefragt und die Dokumente verbessert haben. Ich hoffe, dass andere Leute diese Art von Problemen vermeiden.
@thinkingserious wenn ich hinzufügen darf:
Ich verwende derzeit die folgenden Dokumente: https://sendgrid.com/docs/API_Reference/api_v3.html
In den Anweisungen zum Senden von E-Mails (https://sendgrid.api-docs.io/v3.0/mail-send) wird dynamic_template_data
in Personalisierungen überhaupt nicht erwähnt.
Das ist also auch unklar.
Ich hoffe es hilft!
@ Whatthefoxsays ^^
Danke @OleksiiM & @roymilder! Wir freuen uns über Ihre Beiträge zur Twilio SendGrid-Community :)
Hallo zusammen, habe auch ein paar Stunden mit diesem Thema verbracht.
Verwenden Sie statt
substitutions
dynamicTemplateData
im Hauptobjektmsg
:const sgMail = require('@sendgrid/mail') sgMail.setApiKey(process.env.SENDGRID_API_KEY) sgMail.setSubstitutionWrappers('{{', '}}') const msg = { to: '[email protected]', from: '[email protected]', templateId: 'd-27e7d954368c46519eddc806e5cf8156', dynamicTemplateData: { name: 'Some One', city: 'Denver', }, } sgMail.send(msg)
Referenz: # 691
Laut dieser PR wird, wenn
templateId
eine dynamische Vorlage ist (mit dem Präfixd-
), diesubstitutions
nicht gesendet, also diedynamicTemplateData
Objekt sollte verwendet werden.Sie haben hier ein Problem erstellt, um die Verwendung dynamischer Vorlagen zu den Dokumenten zu verbessern, aber bis dahin hoffe ich, dass dies hilft. 🎉
Ich habe das seit 2 Tagen gesehen und es zum Laufen gebracht.
Hallo @Travotics ,
Mit welcher Dokumentation haben Sie begonnen, bevor Sie die oben genannten gefunden haben? Ich versuche diese Erfahrung zu verbessern. Vielen Dank!
Mit besten Empfehlungen,
Elmer
@thinkingserious https://github.com/sendgrid/sendgrid-nodejs/blob/master/use-cases/kitchen-sink.md
Hat nicht dynamicTemplateData
aber es hat substitutionWrappers
und substitutions
.
Neben der Aktualisierung der Dokumente ist es auch eine gute Idee, die Typschnittstelle MailData
(https://github.com/sendgrid/sendgrid-nodejs/blob/master/packages/helpers/classes/) zu aktualisieren. mail.d.ts # L117). Für @ sendgrid / mail-Releases, die die substitutions
nicht unterstützen, sollten sie einen V2MailData
-Parameter erwarten, substitutionWrappers
Felder substititons
und substitutionWrappers
weggelassen werden.
Hallo, nachdem ich den Kommentar von hatte , habe ich mit einer Legacy-Vorlage getestet und es hat funktioniert. Danke @himanshupnt .
Später fand ich die Sendgrid-Dokumentation Mail Send with Dynamic Transactional Templates . Ich habe die neue Vorlage (nicht die Legacy-Vorlage) zum Laufen gebracht. Ich habe dieselbe HTML-Vorlage verwendet und mein Code wurde aktualisiert auf:
const sgMail = require("@sendgrid/mail"); sgMail.setApiKey(process.env.SENDGRID_API_KEY); sgMail.setSubstitutionWrappers("{{", "}}"); // Configure the substitution tag wrappers globally const msg = { from: "[email protected]", templateId: "d-27e7d954368c46519eddc806e5cf8156", personalizations: [ { to: [ { email: "[email protected]" } ], dynamic_template_data: { name: "Someone", city: "Somewhere", subject: "Hello new world" } } ] }; sgMail.send(msg).catch(err => console.error(err.message));
Beachten Sie, dass ich "Ersetzungen" durch "dynamic_template_data" ersetzt und "innerhalb" von "Personalisierungen" platziert habe, wie in den Dokumenten gefordert. Und ich habe das Thema auch als eines der "dynamic_template_data" behandelt und es funktioniert. (Geben Sie {{subject}} in das Feld für den Betreff der Vorlage ein.)
Vielen Dank.
Vielen Dank dafür! Ich habe viel Zeit damit verbracht, dafür zu debuggen. : /
Hilfreichster Kommentar
Hallo, nachdem ich den Kommentar von hatte , habe ich mit einer Legacy-Vorlage getestet und es hat funktioniert. Danke @himanshupnt .
Später fand ich die Sendgrid-Dokumentation Mail Send with Dynamic Transactional Templates . Ich habe die neue Vorlage (nicht die Legacy-Vorlage) zum Laufen gebracht. Ich habe dieselbe HTML-Vorlage verwendet und mein Code wurde aktualisiert auf:
Beachten Sie, dass ich "Ersetzungen" durch "dynamic_template_data" ersetzt und "innerhalb" von "Personalisierungen" platziert habe, wie in den Dokumenten gefordert. Und ich habe das Thema auch als eines der "dynamic_template_data" behandelt und es funktioniert. (Geben Sie {{subject}} in das Feld für den Betreff der Vorlage ein.)
Vielen Dank.