Suivez l' exemple d'utilisation de substitutions dans les e -
test.js
pour insérer votre clé API, votre adresse e-mail et templateId
vous avez créés ci-dessus.node test.js
.Bonjour @panayi ,
Quelques points à vérifier:
Pouvez-vous également partager à quoi ressemble votre HTML?
Merci!
Meilleures salutations,
Elmer
Bonjour, @thinkingserious , j'ai pu reproduire le même problème que @panayi mentionné.
Mon code Html ressemble à ceci
Bonjour first_name (Employee: employee_id)
Du code HTML
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);
Remarque: j'ai même essayé d'utiliser substitutionWrappers: ['{{', '}}']
dans msg mais sans chance.
Détails techniques:
Toute aide / correction appréciée car j'ai investi beaucoup de temps dans ce problème
Bonjour @tjstlekr ,
Dans votre code HTML, veuillez changer first_name
en {{first_name}}
et employee_id
en {{employee_id}}
.
Merci!
Meilleures salutations,
Elmer
Oui @tjstlekr , je veux dire le code du modèle tel que décrit dans cet exemple .
Je ne peux pas répondre à votre deuxième question sans exemples concrets. (par exemple, le corps de la demande et le code du modèle).
Meilleures salutations,
Elmer
Tristement! Je n'ai pas accès au code du modèle. Je m'en tiendrai à une autre version.
Merci quand même @thinkingserious
As-tu essayé:
substitutions: {
'first_name': 'Tejas',
'employee_id': 'emp123',
},
Oui, @thinkingserious a essayé cela. J'ai également essayé les méthodes suivantes
substitutions: {
'-first_name-': 'Tejas',
'-employee_id-': 'emp123',
},
substitutions: {
'%first_name%': 'Tejas',
'%employee_id%': 'emp123',
},
substitutions: {
'=first_name=': 'Tejas',
'=employee_id'=: 'emp123',
},
@tjstlekr ,
Je pense que votre solution consiste à amener quiconque peut changer le code du modèle HTML à envelopper les variables avec un ou plusieurs caractères de substitution.
Meilleures salutations,
Elmer
@thinkingserious est correct. Les variables du modèle DOIVENT être entourées de doubles crochets {{name}}. Sinon, SendGrid ne saura pas où déposer les substitutions que vous avez envoyées.
les variables ont vraiment besoin de doubles crochets? Je vais essayer, mais un article différent de la même personne a montré que les substitutions fonctionnaient avec des tirets, pas des doubles crochets:
Bonjour @tetreault ,
Par défaut, nous utilisons des crochets doubles. setSubstitutionWrappers
vous permet de les modifier comme vous l'avez démontré.
Merci!
Meilleures salutations,
Elmer
J'ai rencontré le même problème que @panayi .
J'ai suivi l' exemple de modèles transactionnels . J'ai défini des wrappers de substitution et dans le modèle, des substitutions enveloppées entre crochets doubles. Cependant, l'e-mail que j'ai reçu avait supprimé toutes les substitutions sans les remplacer par celles que j'avais fournies.
J'ai essayé avec l'éditeur de code et l'éditeur de conception pour le modèle.
Détails techniques:
Merci!
Salut @nrator ,
Si les substitutions étaient remplacées par des chaînes vides, je vérifierais à nouveau que les variables sur lesquelles vous effectuez une itération ne sont pas vides. Si vous vérifiez qu'ils ne sont pas vides, pourriez-vous partager l'extrait de code avec le code HTML correspondant afin que je puisse essayer de le reproduire?
Merci!
Meilleures salutations,
Elmer
Salut @thinkingserious
Je n'utilise pas de variables mais de chaînes afin qu'elles ne soient pas vides. Vous trouverez ci-dessous l'extrait de code, le HTML et le résultat que j'ai obtenu:
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));
Modèle HTML
<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 que j'ai reçu
Hello ,
I'm glad you are trying out the template feature!
<%body%>
I hope you are having a great day in :)
Détails techniques
Version de sendgrid-nodejs: @ sendgrid / [email protected]
Version Node.js: 8.11.2
Meilleures salutations,
Jason
Salut, j'ai le même problème avec les modèles transactionnels. Les variables ne seront pas captées. En utilisant les données de test pour prévisualiser le modèle dans le tableau de bord SG, tout semble correct.
Les e-mails sont envoyés à la bonne personne et avec le bon modèle, sauf s'il manque des valeurs de variable.
J'ai créé un modèle hérité il y a 2 jours qui fonctionnait bien et aujourd'hui je suis passé à un modèle plus récent
modèles transactionnels et cela ne fonctionne pas. Je viens de dupliquer l'ancien modèle qui était
fonctionne bien.
"@ sendgrid / mail": "6.3.1" | Node.js 8.10
Voici mon 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
}
};
Et voici le modèle html:
<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>
À votre santé
Je viens de passer au modèle hérité avec le même code html et cela fonctionne. Cela peut-il être dû à de nouveaux changements dans l'API V3?
Bonjour, après avoir lu le commentaire de @himanshupnt , j'ai testé avec un ancien modèle et cela a fonctionné. Merci @himanshupnt .
Plus tard, j'ai trouvé la documentation Sendgrid Mail Send avec des modèles transactionnels dynamiques , j'ai en quelque sorte le nouveau modèle (pas hérité) qui fonctionne. J'ai utilisé le même modèle HTML et mon code a été mis à jour pour:
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));
Notez que j'ai remplacé "substitutions" par "dynamic_template_data", et placé "à" à l'intérieur de "personnalisations" comme requis par la documentation. Et j'ai également traité le sujet comme l'un des "dynamic_template_data" et cela fonctionne. (mettre {{subject}} dans le champ d'objet du modèle)
Merci.
@nrator Cela l'a fait pour moi aussi. Merci de l'avoir posté!
J'ai le même problème et j'ai également ouvert un problème (après avoir essayé les solutions mentionnées au début). Cependant, j'ai pu ajouter name
et city
au modèle ci-dessous mentionné par @nrator . Mais n'a pas pu remplacer <%subject%>
et <%body%>
car ils sont inclus dans l'e-mail que je reçois. Comment puis-je remplacer <%body%>
et <%subject%>
? @himanshupnt comment avez-vous résolu cela?
Salut @ pankaja92 , je n'ai pas pu faire fonctionner <% subject%> aussi. Maintenant, ma façon de traiter le sujet est de le traiter comme l'un des "dynamic_template_data", ce qui signifie que je l'enveloppe dans {{}} au lieu de <%%> et je le gère dans "dynamic_template_data".
J'ai trouvé cette documentation sendgrid qui peut vous aider. Le paramètre de sujet ne semble pas fonctionner cependant.
@nrator Merci. Ça a marché. Donc, il n'y a pas besoin de <% body%> aussi bien (car cela ne fonctionnera pas non plus comme l'exemple donné).
Btw, pas le problème spécifique - mais, avez-vous une expérience ou un exemple pour envoyer une liste de détails via cette bibliothèque? Je recherche quelque chose qui pourrait m'aider à créer mon application :)
@ pankaja92 Je ne suis pas sûr de ce que vous entendez par l'envoi d'une liste de détails. Vous pouvez lire ce billet de blog sendgrid sur les nouvelles fonctionnalités des modèles dynamiques, en gros, vous pouvez maintenant parcourir des listes d'éléments ou utiliser des conditions de base pour générer du contenu dynamique.
Pour les codes réels, vous pouvez vous référer à ce repo .
J'espère que ça aide!
Salut à tous, j'ai également passé quelques heures sur cette question.
Au lieu d'utiliser substitutions
, utilisez plutôt dynamicTemplateData
dans l'objet principal 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)
Référence: https://github.com/sendgrid/sendgrid-nodejs/pull/691
Selon ce PR, lorsque le templateId
est un modèle dynamique (préfixé par d-
), le substitutions
n'est pas du tout envoyé, donc le dynamicTemplateData
l'objet doit être utilisé.
Ils ont créé un problème ici pour améliorer l'utilisation des modèles d'ajout dynamiques dans les documents, mais d'ici là, j'espère que cela aide. 🎉
Veuillez suivre ce numéro: # 703
remplacez 'substitutions' par 'dynamic_template_data'
@jseyfert ne devrait-il pas être dynamic_template_data
?
@aroach vous avez raison. J'ai mis à jour mon commentaire.
Au début, cela ne fonctionnait pas non plus de mon côté.
J'ai remarqué que ma version était un peu obsolète (j'utilisais @ sendgrid / mail @ 6.2.1)
J'ai mis à jour le package, j'ai changé mon code et maintenant cela fonctionne:
en utilisant @ sendgrid / [email protected]
const result = await this.sgMail.send({
personalizations: [{
to: this._to
}],
dynamicTemplateData: {
test: 'test' <== working (code in template: {{ test }})
},
templateId: this._templateId,
});
Je dois noter que le code ci-dessous ne fonctionne pas:
const result = await this.sgMail.send({
personalizations: [{
to: this._to,
dynamicTemplateData: {
test: 'test' <== NOT working (code in template: {{ test }})
}
}],
templateId: this._templateId,
});
Oui, vous devez utiliser la v6.3.1 pour la prise en charge de dynamic_template_data.
Le mar 11 décembre 2018 à 4 h 15, Roy Milder [email protected] a écrit:
Au début, cela ne fonctionnait pas non plus de mon côté.
J'ai remarqué que ma version était un peu obsolète (j'utilisais
@ sendgrid / mail @ 6.2.1)
J'ai mis à jour le package, j'ai changé mon code et maintenant cela fonctionne:en utilisant @ sendgrid / [email protected]
const result = attendre this.sgMail.send ({
personnalisations: [{
à: this._to
}],
dynamicTemplateData: {
test: 'test' <== working (code dans le modèle: {{test}})
},
templateId: this._templateId,
});-
Vous recevez cela parce que vous avez été mentionné.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/sendgrid/sendgrid-nodejs/issues/676#issuecomment-446166152 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/ACL-sjFRFP8txUETNWFVLs0chW5yyL1Nks5u35OzgaJpZM4TOB5l
.
Salut, n'oublie pas
ne pas créer de modèle transactionnel, créer un modèle hérité et en faire une copie.
puis toutes les étapes que vous faites fonctionnera.
dynamicTemplateData
Travaille pour moi. J'ai la dernière version de la bibliothèque SendGrid et je l'utilise via Firebase (Fonctions). Le principal problème maintenant est le manque de support TypeScript - et la documentation.
@roymilder , merci beaucoup. Votre réponse a fait ma journée - les substitutions aux modèles dynamiques sont très floues.
Gloire!
Bonjour @OleksiiM ,
Cet exemple vous aide-t-
@ darren-dev,
Merci de votre aide! En ce qui concerne le manque de support et de documentation TypeScript, faites-vous référence au côté Firebase?
@uups ,
Merci de votre aide!
Meilleures salutations,
Elmer
@thinkingserious , oui. Merci.
@OleksiiM ,
Où avez-vous regardé en premier? J'essaie de comprendre comment m'assurer que les personnes qui ont besoin d'utiliser des modèles dynamiques accèdent au lien que je vous ai envoyé en premier.
@thinkingserious
Commencé ici .
Ça dit:
"Envoi de modèles transactionnels
Vous pouvez envoyer des modèles transactionnels de l'une des trois manières suivantes:
Utilisation du relais SMTP
Inclure l'ID de modèle dans le paramètre de modèles du point de terminaison d'envoi de courrier de l'API Web v3
Utilisation du paramètre x-smtpapi dans le point de terminaison d'envoi de courrier de l'API Web v2 "
Je suis donc passé à "Inclure l'ID de modèle dans le paramètre de modèles du point de terminaison d'envoi de courrier de l'
Pourquoi ce n'était pas clair:
la dernière page montre la liste des possibles "Request body parameters" qui montre le template_id mais ne dit rien sur le champ "dynamic_template_data". J'ai essayé d'aller avec "personnalisations" + "substitutions" + "template_id" et cela n'a pas fonctionné.
De plus, comme je suis un nouvel utilisateur de Sendgrid, je n'étais pas au courant des "anciens" modèles et des "nouveaux" modèles (dynamiques) et de la différence entre eux (les pages doc sendgrid ci-dessus ne disent rien à ce sujet).
Merci d'avoir demandé et d'améliorer les documents. J'espère que d'autres éviteront ce type de problèmes.
@thinkingserious si je peux ajouter:
J'utilise actuellement ces documents: https://sendgrid.com/docs/API_Reference/api_v3.html
Les instructions d'envoi d'e-mail (https://sendgrid.api-docs.io/v3.0/mail-send) ne mentionnent pas du tout dynamic_template_data
dans les personnalisations.
Ce n'est donc pas clair non plus.
J'espère que ça aide!
@Whatthefoxsays ^^
Merci @OleksiiM et @roymilder! Nous apprécions vos contributions à la communauté Twilio SendGrid :)
Salut à tous, j'ai également passé quelques heures sur cette question.
Au lieu d'utiliser
substitutions
, utilisez plutôtdynamicTemplateData
dans l'objet principalmsg
: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)
Référence: # 691
Selon ce PR, lorsque le
templateId
est un modèle dynamique (préfixé pard-
), lesubstitutions
n'est pas du tout envoyé, donc ledynamicTemplateData
l'objet doit être utilisé.Ils ont créé un problème ici pour améliorer l'utilisation des modèles d'ajout dynamiques dans les documents, mais d'ici là, j'espère que cela aide. 🎉
En bousculant depuis 2 jours, j'ai vu cela et je l'ai fait fonctionner.
Bonjour @Travotics ,
Avec quelle documentation avez-vous commencé avant de trouver ce qui précède? J'essaye d'améliorer cette expérience. Merci!
Meilleures salutations,
Elmer
@thinkingserious https://github.com/sendgrid/sendgrid-nodejs/blob/master/use-cases/kitchen-sink.md
N'a pas dynamicTemplateData
mais il a substitutionWrappers
et substitutions
.
En plus de mettre à jour la documentation, il serait également judicieux de mettre à jour l'interface de type MailData
(https://github.com/sendgrid/sendgrid-nodejs/blob/master/packages/helpers/classes/ mail.d.ts # L117). Pour @ SendGrid / courrier de presse qui ne prennent pas en charge le substitutions
, ils devraient s'attendre à un V2MailData
paramètre qui a le substititons
et substitutionWrappers
champs omis.
Bonjour, après avoir lu le commentaire de @himanshupnt , j'ai testé avec un ancien modèle et cela a fonctionné. Merci @himanshupnt .
Plus tard, j'ai trouvé la documentation Sendgrid Mail Send avec des modèles transactionnels dynamiques , j'ai en quelque sorte le nouveau modèle (pas hérité) qui fonctionne. J'ai utilisé le même modèle HTML et mon code a été mis à jour pour:
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));
Notez que j'ai remplacé "substitutions" par "dynamic_template_data", et placé "à" à l'intérieur de "personnalisations" comme requis par la documentation. Et j'ai également traité le sujet comme l'un des "dynamic_template_data" et cela fonctionne. (mettre {{subject}} dans le champ d'objet du modèle)
Merci.
Merci beaucoup pour ça! J'ai passé beaucoup de temps à déboguer pour cela. : /
Commentaire le plus utile
Bonjour, après avoir lu le commentaire de @himanshupnt , j'ai testé avec un ancien modèle et cela a fonctionné. Merci @himanshupnt .
Plus tard, j'ai trouvé la documentation Sendgrid Mail Send avec des modèles transactionnels dynamiques , j'ai en quelque sorte le nouveau modèle (pas hérité) qui fonctionne. J'ai utilisé le même modèle HTML et mon code a été mis à jour pour:
Notez que j'ai remplacé "substitutions" par "dynamic_template_data", et placé "à" à l'intérieur de "personnalisations" comme requis par la documentation. Et j'ai également traité le sujet comme l'un des "dynamic_template_data" et cela fonctionne. (mettre {{subject}} dans le champ d'objet du modèle)
Merci.