Las sustituciones no funcionan cuando se usa esta biblioteca. Funciona cuando se usa curl.
`'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();`
También adjunto una captura de pantalla de la plantilla en el editor SendGrid y el correo electrónico que recibo.
@MaciejKrawczyk ¿Ha intentado usar setSubstitutionWrapper
y omitir los contenedores de substitutions
?
Ex:
sgMail.setSubstitutionWrappers('-', '-');
"substitutions": {
"firstName": "Maciejs"
}
No estoy seguro de cómo haría varios contenedores a la vez de esta manera, pero pude hacer que los subs trabajaran con esta versión al no especificar los contenedores en el atributo de sustitución. Mis sumisos parecen
emailOptions.substitutions = {}
emailOptions.substitutions.CLIENT_NAME = myClientName
Funciona. ¡Gracias!
¡Gracias por ayudar a @kmcurry!
¡Me alegro de que esté en funcionamiento @MaciejKrawczyk!
¡Definitivamente debería incluirse en el archivo README! ¡Me costó 2 horas resolver esto!
@LASkuma ,
Eso no es bueno :(
¿Ayuda esta documentación ? Si es así, ¿podría indicarme dónde buscó ayuda por primera vez para asegurarme de que tenemos un vínculo claro allí?
¡Gracias!
Con los mejores deseos,
Elmer
@thinkingserious Sí. Este documento ayudó mucho. Sin embargo, como vengo del sitio web oficial, donde las claves de sustitución deben incluir el contenedor, no presté demasiada atención a los casos de uso.
Hola @LASkuma ,
Cuando dice que viene del sitio web oficial, ¿podría decirme a qué URL se refiere? ¡Gracias!
Hola @thinkingserious ,
Me refería a esta página . Incluso la sección de prueba tiene claves de sustitución con los envoltorios incluidos. Después de leer la documentación, pensé que la biblioteca de Node era naturalmente consistente con la documentación.
¡Gracias @LASkuma!
Esa es una retroalimentación realmente útil.
Sin embargo, no estoy muy seguro de la solución. Esos documentos son para aquellos que desean interactuar con nuestra API directamente en lugar de usar una de nuestras bibliotecas auxiliares.
Anteriormente mencionó que deberíamos incluir esta documentación en el archivo README. ¿Quieres decir aquí ? ¿Deberíamos mencionar específicamente el caso de uso de sustitución allí?
¡De nuevo, gracias por tu ayuda!
Con los mejores deseos,
Elmer
Esto definitivamente debería estar en el archivo Léame. Intenté todo, leí todos los documentos en la referencia de la api de SendGrid, todo lo que está en GitHub (pensé), me comuniqué con el soporte y estaría haciendo mi propia envoltura de la api si no fuera por
Gracias @MaciejKrawczyk ,
Esta es una muy buena respuesta y la he agregado a la lista de trabajos pendientes de nuestro equipo para profundizar. Proporcionaremos actualizaciones sobre este hilo.
¡Gracias!
Con los mejores deseos,
Elmer
Esta hecho? Tengo el mismo problema;
Hola @sriharrsha ,
¿Has probado la sugerencia de @kmcurry ?
Aún no. Actualizaré si funciona o no pronto.
Lo siento por la respuesta tardía.
Para todos los que estaban tan desesperados como yo ayer: en la API v3, debes usar dynamic_template_data
lugar de substitutions
, ¡esto aún no está documentado en ninguna parte!
Luego use {{var_name}}
en la plantilla de correo electrónico y dynamic_template_data: { var_name: "var_value" }
en la llamada API.
@tkafka ¡ oh Dios mío! gracias por este hombre, me he estado tirando de los pelos durante los últimos 2 días.
@tkafka ¡ Muchas gracias! ¡Esto es tan frustrante! Me tomó 3 horas de mi día ...
Aquí está el código completo en caso de que alguien esté buscando lo mismo:
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);
La documentación de sendgrid es horrible por decir lo menos.
Hola a todos,
Consulte este problema para conocer el progreso. Actualmente estamos trabajando en la actualización para C #, luego Java, luego este SDK está justo después de eso. Gracias por su paciencia y mis disculpas por el retraso.
Con los mejores deseos,
Elmer
Ja, dynamic_template_data
. ¡Resolví tu pequeño rompecabezas! :sonreír:
Para otros usuarios de mecanografiado: cree el archivo 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};
}
}
¡Gracias @xduseko !
Comentario más útil
Para todos los que estaban tan desesperados como yo ayer: en la API v3, debes usar
dynamic_template_data
lugar desubstitutions
, ¡esto aún no está documentado en ninguna parte!Luego use
{{var_name}}
en la plantilla de correo electrónico ydynamic_template_data: { var_name: "var_value" }
en la llamada API.