Der Versuch, eine E-Mail mit einer Vorlage + Ersetzungen zu senden, die eine Ganzzahl enthalten, führt zu einem 400 Bad Request-Fehler ohne Erklärung.
%test%
)._Expected_ - E-Mail wird gesendet oder Fehler mit Informationen zum Problem.
_Actual_ - 400 Bad Request ohne Details zum Problem.
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' } }
Hier ist ein Codebeispiel:
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 )
} )
Der exakt gleiche Code, außer mit '42'
anstelle von 42
für die Substitution, funktioniert.
Es wäre zwar super toll, wenn SendGrid selbst nicht so einen Fehler machen würde (oder das Problem in der Fehlermeldung erklären würde, wie welches Feld und dass es nicht akzeptiert wurde, weil es eine Zahl ist), aber ich denke, sendgrid-node könnte / sollte leicht Behandeln Sie es, indem Sie einfach toString () - Ersetzungen ausführen.
Ich bin froh, eine PR einreichen zu können, aber als ich einen fehlgeschlagenen Test schrieb, gab es keine Dokumente zum Ausführen der Tests, und in den Tests sah ich eine Menge Dinge über Testhosts, die ich nicht ausgeführt hätte.
Hallo @rfunduk ,
Danke für das ausführliche Feedback!
Dies ist ein bekanntes Problem, und das API-Team hat eine Korrektur in seinem Backlog vorgenommen, um eine entsprechende Fehlerzeichenfolge bereitzustellen.
Sie haben Recht, wir müssen dies in der Bibliothek beheben und würden uns über Ihre Pull-Anfrage freuen.
Gerne führe ich Sie durch die Funktionsweise der Tests. Aber zuerst benötigen wir eine signierte CLA: https://github.com/sendgrid/sendgrid-nodejs/blob/master/CONTRIBUTING.md
Vielen Dank!
Ich habe das gleiche Problem. Wie behebe ich das?
Vielen Dank
@wizysanjay Rufen Sie toString
für Ihre Ersetzungen an, bevor Sie an die Bibliothek übergeben. Zum Beispiel anstelle von:
personalization.addSubstitution( new helper.Substitution( `%number%`, number ) )
Mach das:
personalization.addSubstitution( new helper.Substitution( `%number%`, number.toString() ) )
+1
Ich habe es. Vielen Dank
Ich kann nicht glauben, dass ich einen Nachmittag mit Debuggen verbracht habe, bevor ich darauf gestoßen bin. Eine substitution must be string
Erwähnung in den Dokumenten wäre zumindest nett ... was ich selbst hinzufügen würde, aber an diesem Punkt kann ich nicht einmal finden, wohin das in den Dokumenten führen würde.
Hallo @dangerismycat ,
:( nicht cool. Dies ist hier dokumentiert, aber das ist für Ihren Anwendungsfall nicht hilfreich.
Wir werden dies in die Bibliothek einbauen, damit Sie sich nicht einmal darum kümmern müssen. Ihre Stimme wurde hinzugefügt, um die Priorität zu erhöhen.
Genial, froh, dass es die Priorität erhöht hat. Wenn es eine einfache Lösung ist und Sie mich in die richtige Richtung weisen können (Repo oder Datei), kann ich mich darum kümmern.
@dangerismycat ,
Genial! Das Update würde wahrscheinlich hier gehen.
@thinkingserious Hm… sieht aus wie der Build fehlgeschlagen ist. Gibt es zugehörige Tests, die ich aktualisieren muss, oder etwas anderes?
Mit Travis CI-Builds für diejenigen, die nicht zur SendGrid-Organisation gehören, ist etwas nicht in Ordnung. Ich bin nicht ganz sicher, was los ist, aber ich werde vor Ort überprüfen.
Hey, ich bekomme dieses Problem immer noch auf
Das Senden, während sub eine Ganzzahl ist, funktioniert nicht und gibt
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 } ]
Wenn ich jedoch das Sub in der Anfrage in ${sub}
ändere, funktioniert es
Grüße
Hallo @Mauyeung ,
Würde es Ihnen etwas ausmachen, eine neue Ausgabe zu eröffnen? Vielen Dank!
Es sieht so aus, als ob dies ein Fehler sein könnte, da ich sehe, dass wir das unter der Haube in einen String für Sie umwandeln sollen.
Mit besten Empfehlungen,
Elmer
Hilfreichster Kommentar
@wizysanjay Rufen Sie
toString
für Ihre Ersetzungen an, bevor Sie an die Bibliothek übergeben. Zum Beispiel anstelle von:Mach das: