Essayer d'envoyer un e-mail en utilisant un modèle + des substitutions qui incluent un entier donne une erreur 400 Bad Request sans explication.
%test%
)_Expected_ - Un e-mail est envoyé ou une erreur avec des informations sur le problème.
_Actual_ - 400 Bad Request sans détails sur le problème.
SENDMAIL ERROR { statusCode: 400,
body: '{"errors":[{"message":"Bad Request","field":null,"help":null}]}',
headers:
{ server: 'nginx',
date: 'Wed, 31 Aug 2016 14:32:57 GMT',
'content-type': 'application/json',
'content-length': '63',
connection: 'close',
'x-frame-options': 'DENY' } }
Voici un exemple de code:
var mail = new helper.Mail()
mail.setFrom( new helper.Email( '[email protected]' ) )
mail.setTemplateId( "THE_TEMPLATE_ID" )
var personalization = new helper.Personalization()
personalization.addTo( new helper.Email( '[email protected]' ) )
var sub = new helper.Substitution( `%test%`, 42 )
personalization.addSubstitution( sub )
mail.addPersonalization( personalization )
sgClient.API( sgClient.emptyRequest( {
method: 'POST',
path: '/v3/mail/send',
body: mail.toJSON()
} ) ).catch( function( err ) {
console.error( 'SENDGRID ERROR', err.response )
} )
Le même code exact sauf avec '42'
au lieu de 42
pour la substitution fonctionne.
Bien que ce serait super si SendGrid lui-même ne se trompait pas comme ça (ou expliquait le problème dans le message d'erreur, comme quel champ et qu'il n'a pas été accepté car c'est un nombre), je pense que sendgrid-node pourrait / devrait facilement manipulez-le simplement en remplaçant toString ().
Heureux de soumettre un PR, mais quand je suis allé écrire un test qui échouait, il n'y avait pas de documentation sur la façon d'exécuter les tests, et dans les tests, j'ai vu beaucoup de choses sur les hôtes de test que je n'aurais pas exécutés.
Salut @rfunduk ,
Merci pour les commentaires détaillés!
Il s'agit d'un problème connu et l'équipe API a un correctif sur son backlog pour fournir une chaîne d'erreur appropriée.
Vous avez raison, nous avons besoin de cela corrigé dans la bibliothèque et nous aimerions votre pull request.
Je suis heureux de vous expliquer comment fonctionnent les tests. Mais d'abord, nous aurons besoin d'un CLA signé: https://github.com/sendgrid/sendgrid-nodejs/blob/master/CONTRIBUTING.md
Merci!
J'ai le même problème. Comment puis-je réparer ça
Merci
@wizysanjay appelle toString
sur vos substitutions avant de passer à la bibliothèque. Par exemple au lieu de:
personalization.addSubstitution( new helper.Substitution( `%number%`, number ) )
Faites ceci:
personalization.addSubstitution( new helper.Substitution( `%number%`, number.toString() ) )
+1
J? ai compris. Merci
Je ne peux pas croire que j'ai passé un après-midi à déboguer avant de tomber sur cela. Une mention substitution must be string
dans les docs au moins serait bien… que j'ajouterais moi-même, mais à ce stade, je ne peux même pas trouver où cela irait dans les docs.
Salut @dangerismycat ,
:( pas cool. Ceci est documenté ici , mais ce n'est pas utile pour votre cas d'utilisation.
Nous allons intégrer cela dans la bibliothèque pour que vous n'ayez même pas à vous en soucier. Votre vote a été ajouté pour aider à augmenter la priorité.
Génial, heureux que cela ait augmenté la priorité. Si c'est une solution simple et que vous pouvez m'indiquer la bonne direction (repo ou fichier), je peux m'en occuper.
@dangerismycat ,
Impressionnant! Le correctif irait probablement ici .
@thinkingserious Hm… on dirait que la compilation a échoué. Dois-je mettre à jour des tests associés ou autre chose?
Quelque chose ne va pas avec les builds Travis CI pour ceux qui ne font pas partie de l'organisation SendGrid. Je ne sais pas trop ce qui se passe, mais je vérifierai localement.
Hé, je reçois toujours ce problème sur "@ sendgrid / client": "^ 6.2.1" .
L'envoyer alors que sub est un entier ne fonctionne pas et donne
body: {
personalizations: [{
to: [{
email: userEmail
}],
subject: `blah blah blah`,
substitutions: {
'{{sub}}': sub
}
}],
from: {
email: '[email protected]',
name: 'blah blah'
},
template_id
}
err { Error: Bad Request
at Request.http [as _callback] (node_modules/@sendgrid/client/src/classes/client.js:124:25)
at Request.self.callback (node_modules/request/request.js:186:22)
at emitTwo (events.js:126:13)
at Request.emit (events.js:214:7)
at Request.<anonymous> (node_modules/request/request.js:1163:10)
at emitOne (events.js:116:13)
at Request.emit (events.js:211:7)
at IncomingMessage.<anonymous> (node_modules/request/request.js:1085:12)
at Object.onceWrapper (events.js:313:30)
at emitNone (events.js:111:20)
at IncomingMessage.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1055:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)
code: 400,
message: 'Bad Request',
response:
{ headers:
{ server: 'nginx',
date: 'Fri, 20 Apr 2018 16:17:42 GMT',
'content-type': 'application/json',
'content-length': '63',
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: [Array] } } }
where the errors: array is [ { message: 'Bad Request', field: null, help: null } ]
Cependant, lorsque je change de sous dans la requête en ${sub}
, cela fonctionnera
Cordialement
Bonjour @Mauyeung ,
Pourriez-vous ouvrir un nouveau numéro? Merci!
Il semble que cela puisse être un bug, car je vois que nous sommes censés convertir cela en une chaîne pour vous sous le capot.
Meilleures salutations,
Elmer
Commentaire le plus utile
@wizysanjay appelle
toString
sur vos substitutions avant de passer à la bibliothèque. Par exemple au lieu de:Faites ceci: