рдЯреЗрдореНрдкреНрд▓реЗрдЯ + рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдИрдореЗрд▓ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИ, 400 рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд┐рдирд╛ рдЦрд░рд╛рдм рдЕрдиреБрд░реЛрдз рджреЗрддрд╛ рд╣реИред
%test%
)_Expected_ - рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдИрдореЗрд▓ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рддреНрд░реБрдЯрд┐ред
_Actual_ - 400 рдЦрд░рд╛рдм рдЕрдиреБрд░реЛрдз рдЬрд┐рд╕рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реИред
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' } }
рдпрд╣рд╛рдБ рдПрдХ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рд╣реИ:
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 )
} )
рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП 42
'42'
рдмрдЬрд╛рдп
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ SendGrid рдЦреБрдж рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ (рдпрд╛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реЗрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ рдХреМрди рд╕рд╛ рдлрд╝реАрд▓реНрдб рдФрд░ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдирдВрдмрд░ рд╣реИ), рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ sendgrid-node рдЖрд╕рд╛рдиреА рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ / рдЪрд╛рд╣рд┐рдП рдЗрд╕реЗ рд╕рд┐рд░реНрдл рд╕реНрдЯреНрд░реАрдВрдЧ () - рдЖрдИрдПрдирдЬреА рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рджреНрд╡рд╛рд░рд╛ рд╕рдВрднрд╛рд▓реЗрдВред
рдкреАрдЖрд░ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдПрдХ рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдпрд╛ рдерд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдХреЛрдИ рдбреЙрдХреНрд╕ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рдЯреЗрд╕реНрдЯ рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рджреЗрдЦреАрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдирд╣реАрдВ рдЪрд▓рд╛рдКрдВрдЧрд╛ред
рд╣рд╛рдп @rfunduk ,
рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдпрд╣ рдПрдХ рдЬреНрдЮрд╛рдд рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдПрдкреАрдЖрдИ рдЯреАрдо рдХреЗ рдкрд╛рд╕ рдПрдХ рдЙрдЪрд┐рдд рддреНрд░реБрдЯрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдмреИрдХрд▓реЙрдЧ рдкрд░ рдПрдХ рдлрд┐рдХреНрд╕ рд╣реИред
рдЖрдк рд╕рд╣реА рд╣реИрдВ, рд╣рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╣рдореЗрдВ рдЖрдкрдХреЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЛ рдкрд╕рдВрдж рдЖрдПрдЧрд╛ред
рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд CLA рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: https://github.com/sendgrid/sendgrid-nodejs/blob/master/CONTRIBUTING.md
рдзрдиреНрдпрд╡рд╛рдж!
рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реБрдИред рдореИрдВ рдпрд╣ рдХреИрд╕реЗ рддрдп рдХрд░реБрдВ
рдзрдиреНрдпрд╡рд╛рдж
@wizysanjay рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ toString
рдХреЙрд▓ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
personalization.addSubstitution( new helper.Substitution( `%number%`, number ) )
рдпрд╣ рдХрд░реЛ:
personalization.addSubstitution( new helper.Substitution( `%number%`, number.toString() ) )
+1
рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ред рдзрдиреНрдпрд╡рд╛рдж
рдореИрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджреЛрдкрд╣рд░ рдХреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдмрд┐рддрд╛рдИ рдереАред рдбреЙрдХреНрд╕ рдореЗрдВ substitution must be string
рдЙрд▓реНрд▓реЗрдЦ рдХрдо рд╕реЗ рдХрдо рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ ... рдЬреЛ рдореИрдВ рдЦреБрдж рдЬреЛрдбрд╝реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореИрдВ рдпрд╣ рднреА рдирд╣реАрдВ рдкрд╛ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рдбреЙрдХреНрд╕ рдореЗрдВ рдХрд╣рд╛рдВ рдЬрд╛рдПрдЧрд╛ред
рд╣рд╛рдп @ рдбрдВрдЧрд░рд╛рдЗрд╕реНрдореИрдЯ ,
:( рд╢рд╛рдВрдд рдирд╣реАрдВред рдпрд╣ рдпрд╣рд╛рдБ рдкреНрд░рд▓реЗрдЦрд┐рдд
рд╣рдо рдЗрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╡реЛрдЯ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛, рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЗрд╕рдиреЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдЫреАрди рд▓рд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд┐рдХреНрд╕ рд╣реИ рдФрд░ рдЖрдк рдореБрдЭреЗ рд╕рд╣реА рджрд┐рд╢рд╛ (рд░реЗрдкреЛ рдпрд╛ рдлрд╛рдЗрд▓) рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕рдХрд╛ рдзреНрдпрд╛рди рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВред
@dangerismycat ,
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдареАрдХ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдпрд╣рд╛рдБ ред
@thinkings рд░рд╣рд╕реНрдпрдордп рдПрдЪрдПрдо ... рдмрд┐рд▓реНрдб рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рд╡рд┐рдлрд▓ред рдХреНрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореБрдЭреЗ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдХреБрдЫ рдФрд░?
рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдЬреЛ SendGrid рд╕рдВрдЧрдарди рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реВрдВрдЧрд╛ред
рдЕрд░реЗ, рдЕрднреА рднреА "@ рдкреНрд░реЗрд╖рдХ / рдЧреНрд░рд╛рд╣рдХ" рдкрд░ рдпрд╣ рдореБрджреНрджрд╛ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ
рдпрд╣ рд╕рдм рднреЗрдЬрддреЗ рд╕рдордп рдЙрдк рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреЗрддрд╛ рд╣реИ
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 } ]
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдореИрдВ ${sub}
рдХреЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЙрдк рдмрджрд▓рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛
рд╕рд╛рджрд░
рдирдорд╕реНрдХрд╛рд░ @ рдордпрдпреБрдВрдЧ ,
рдХреНрдпрд╛ рдЖрдк рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдХрд╛ рдорди рдХрд░реЗрдВрдЧреЗ? рдзрдиреНрдпрд╡рд╛рдж!
рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╣реБрдб рдХреЗ рддрд╣рдд рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред
рд╢реБрднрдХрд╛рдордирд╛рдПрдВ,
рдПрд▓реНрдорд░
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@wizysanjay рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ
toString
рдХреЙрд▓ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:рдпрд╣ рдХрд░реЛ: