Obtention d'une erreur 'Bad Request' avec la charge utile suivante.
cosnt msg = {
"to": "[email protected]",
"from": "[email protected]",
"subject": "Support Pay Transparency at PayCheck",
"templateId": "24ae3147-4faa-4380-8613-c5be144f4542",
"customArgs": {
"ally_id": "cj6zlh7yd000001qir4r5suuk"
}
};
sgMail.send(msg)
{
"message": "Bad Request",
"code": 400,
"response": {
"headers": {
"server": "nginx",
"date": "Wed, 30 Aug 2017 22:30:41 GMT",
"content-type": "application/json",
"content-length": "365",
"connection": "close",
"access-control-allow-origin": "https://sendgrid.api-docs.io",
"access-control-allow-methods": "POST",
"access-control-allow-headers": "Authorization, Content-Type, On-behalf-of, x-sg-elas-acl",
"access-control-max-age": "600",
"x-no-cors-reason": "https://sendgrid.com/docs/Classroom/Basics/API/cors.html"
},
"body": {
"errors": [
{
"message": "Unless a valid template_id is provided, the content parameter is required. There must be at least one defined content block. We typically suggest both text/plain and text/html blocks are included, but only one block is required.",
"field": "content",
"help": "http://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/errors.html#message.content"
}
]
}
}
}
Dans la documentation, il dit templateId
mais dans le message d'erreur, il dit template_id
. J'ai essayé les deux et j'ai reçu le même message d'erreur. J'ai joint une capture d'écran de mon écran de modèle en guise de vérification de cohérence pour m'assurer de l'avoir configuré correctement dans sendgrid.
@onesien, le nouveau nœud JS mailer API est templateId
ou template_id
. Le cas de chameau est plus courant dans JS land, c'est pourquoi nous avons ajouté un support pour cela, tandis que l'API elle-même consomme un cas de serpent.
Je vais jeter un œil pour voir ce qui se passe avec l'ID de modèle
Salut @onesien ,
Vous voudrez peut-être également vérifier auprès de l' assistance . Je pense que le problème peut être lié à l'ancien éditeur de modèles.
Pouvez-vous également essayer de créer un nouveau modèle et d'utiliser cet identifiant?
Meilleures salutations,
Elmer
@thinkingserious pouvez-vous vérifier cela de votre côté? Il semble que nous envoyions correctement le paramètre template_id
avec la requête. Je viens de créer un nouveau modèle et je reçois également ce problème.
@adamreisnz ,
Mes tests locaux fonctionnent, mais je n'ai que de nouveaux modèles sur notre compte.
Je vais vérifier
Non, j'ai utilisé un nouveau modèle, fraîchement créé, ayant le même problème
Ce qui suit fonctionne pour moi (en utilisant la version v6.1.1) en suivant l'exemple ici :
// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');
//build object
var mailOptions = {
personalizations:[{
to: '[email protected]',
substitutions: {'name':'John', 'city':'Denver'}
}],
from: '[email protected]',
reply_to: '[email protected]',
subject: 'Hello',
html: 'email text goes here',
templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932'
};
//send
sendGridMail.send(mailOptions);
Ah, je pense que nous avons un vieux bug resurfaçant, où l'API nécessite un bloc de contenu dans tous les cas. Donc cela fonctionne:
// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');
//build object
var mailOptions = {
to: '[email protected]',
from: '[email protected]',
reply_to: '[email protected]',
subject: 'Hello',
templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932',
html: ' ',
substitutions: {
name: 'Some One',
city: 'Denver',
}
};
//send
sendGridMail.send(mailOptions);
mais pas ça:
// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');
//build object
var mailOptions = {
to: '[email protected]',
from: '[email protected]',
reply_to: '[email protected]',
subject: 'Hello',
templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932',
substitutions: {
name: 'Some One',
city: 'Denver',
}
};
//send
sendGridMail.send(mailOptions);
Vérification en interne ...
J'ai dû ajouter le bloc de contenu pour que le modèle soit envoyé. Je recevais une _Bad Request (400) "Sauf si un template_id valide est fourni, le paramètre de contenu est requis. Il doit y avoir au moins un bloc de contenu défini ..." _ lors de l'utilisation du modèle créé dans le nouvel éditeur html.
sgMail.setApiKey(sgKey);
sgMail.setSubstitutionWrappers('-', '-');
var msg: any = {
to: email,
from: '[email protected]',
templateId: 'xxxxxxx',
substitutions: {
verifyUrl: createAccountLink
}
};
sgMail.send(msg)
Si j'ajoute le bloc de contenu, le modèle de courrier électronique est envoyé tel que formaté dans l'éditeur html.
sgMail.setApiKey(sgKey);
sgMail.setSubstitutionWrappers('-', '-');
var msg: any = {
to: email,
from: '[email protected]',
content: [{"type":"text/html","value":"0"}],
templateId: 'xxxxxx',
substitutions: {
verifyUrl: createAccountLink
}
};
sgMail.send(msg)
OK, je laisse cela ouvert comme un bug.
Je suppose que ce SDK ajoute un objet de contenu vide lorsqu'il n'est pas défini. Je pense que nous devons ignorer ces fonctions lorsque html et txt ne sont pas définis.
Pour l'instant, la solution de contournement ci-dessus fera ce dont vous avez besoin.
@thinkingserious je pense que vous avez raison. J'ai lu la documentation de l'API et j'ai pensé que le champ était obligatoire. Il n'a qu'un commentaire bien caché (qui est incroyablement stylé!) Que j'ai manqué:
Je vais créer un PR pour résoudre ce problème!
Héhé, merci Adam!
PR est en place, cela devrait résoudre le problème et ne pas envoyer le champ de contenu avec la demande s'il n'y a pas de contenu fourni.
Merci pour l'aide peeps. J'étais littéralement en train de perdre la tête. J'ai finalement trouvé une solution de contournement tard la nuit dernière et je venais ici pour rapporter plus d'informations, mais il semble que vous soyez tous déjà dessus :-)
Désolé pour ça @onesien ,
Le correctif vient d'être poussé vers npm (v6.1.2).
J'ai utilisé le code textuellement de la réponse de @thinkingserious et je rencontre toujours des problèmes.
J'essaie juste d'obtenir les substitutions les plus élémentaires dans un modèle que j'ai créé dans sengrid pour être envoyé. La réponse dans CloudWatch (car elle s'exécute dans Lambda) s'affiche comme 202 mais l'e-mail que je reçois est: A message was received from this address by our systems that had errors in the smtpapi header, and cannot be processed. The error detected was: The template id must be a valid template id for your account.
Qu'est-ce que je fais de mal ici les gars? J'essaie de passer au crible les documents sendgrid mais tout semble vraiment fragmentaire.
Comment envoyez-vous l'ID du modèle? Est-ce via une variable d'environnement lorsque le lambda est appelé?
merci pour la réponse rapide @cbilliau - non dans mon cas, la chaîne de modèle est codée en dur car j'essaie juste de mettre l'échafaudage fonctionnel entre l'avant et l'arrière. Mon exemple textuel est:
const sgMail = require("@sendgrid/mail");
sgMail.setApiKey(
"XXXXX"
);
sgMail.setSubstitutionWrappers("%", "%"); // Configure the substitution tag wrappers globally
const msg = {
to: formFields.toEmail,
from: formFields.fromEmail,
subject: "Hello world",
text: "test",
html: "<p>test</p>",
templateId: "be2cc0da-5b2c-428f-8e45-c140f6cfb6eb",
substitutions: {
name1: formFields.fromName,
name2: formFields.fromName,
date: formFields.date
}
};
sgMail.send(msg);
@tetreault Checkout ma réponse ci-dessus, j'ajoute content: [{"type":"text/html","value":"0"}],
à ma fonction et cela a fonctionné. Je ne sais pas pourquoi.
juste essayé, malheureusement n'a pas changé le résultat final @cbilliau :(. J'ai reçu le même e-mail:
A message was received from this address by our systems that had errors in the smtpapi header, and cannot be processed.
The error detected was: The template id must be a valid template id for your account. You provided be2cc0da-5b2c-428f-8e45-c140f6cfb6eb
wow laissez-moi m'incliner pendant une seconde @cbilliau 🤣 je me précipitais juste à travers des trucs et je n'ai pas fait plus attention. J'ai réalisé que je saisissais l'identifiant unique d'un modèle que j'avais créé sous "marketing" mais pas sous "modèles transactionnels". Je n'utilise pas beaucoup l'interface utilisateur de sendgrid et j'ai complètement bâclé celui-ci lol
Paume totale du visage, fixant de mon côté et espérant que cela fonctionne.
kk - confirmant son fonctionnement maintenant, en particulier en utilisant la ligne content: [{ type: "text/html", value: "0" }]
que @cbilliau a mentionnée 👍
Commentaire le plus utile
Merci pour l'aide peeps. J'étais littéralement en train de perdre la tête. J'ai finalement trouvé une solution de contournement tard la nuit dernière et je venais ici pour rapporter plus d'informations, mais il semble que vous soyez tous déjà dessus :-)