Tentar enviar um e-mail usando um modelo + substituições que incluem um inteiro dá um erro 400 Bad Request sem explicação.
%test%
)_Esperado_ - E-mail enviado ou erro com informações sobre o problema.
_Actual_ - 400 Bad Request sem detalhes quanto ao problema.
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' } }
Aqui está um exemplo de código:
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 )
} )
Exatamente o mesmo código, exceto com '42'
vez de 42
para a substituição funciona.
Embora fosse muito bom se o SendGrid em si não tivesse um erro assim (ou explicasse o problema na mensagem de erro, como qual campo e que não foi aceito porque é um número), acho que o sendgrid-node poderia / deveria facilmente lidar com isso apenas toString () - fazendo substituições.
Fico feliz em enviar um PR, mas quando fui escrever um teste reprovado, não havia documentos sobre como executar os testes, e nos testes vi muitas coisas sobre hosts de teste que não teria executado.
Olá @rfunduk ,
Obrigado pelo feedback detalhado!
Este é um problema conhecido e a equipe da API corrigiu seu backlog para fornecer uma string de erro apropriada.
Você está correto, precisamos que isso seja consertado na biblioteca e adoraríamos sua solicitação de pull.
Fico feliz em explicar como os testes funcionam. Mas, primeiro, precisaremos de um CLA assinado: https://github.com/sendgrid/sendgrid-nodejs/blob/master/CONTRIBUTING.md
Obrigado!
Eu tenho o mesmo problema. Como faço para corrigir isso
obrigado
@wizysanjay chame toString
em suas substituições antes de passar para a biblioteca. Por exemplo, em vez de:
personalization.addSubstitution( new helper.Substitution( `%number%`, number ) )
Faça isso:
personalization.addSubstitution( new helper.Substitution( `%number%`, number.toString() ) )
+1
Deixa comigo. obrigado
Eu não posso acreditar que passei uma tarde depurando antes de encontrar isso. Uma menção de substitution must be string
nos documentos, pelo menos, seria bom ... o que eu mesmo acrescentaria, mas neste ponto não consigo nem descobrir para onde isso iria nos documentos.
Olá @dangerismycat ,
:( não é legal. Isso está documentado aqui , mas não é útil para seu caso de uso.
Vamos construir isso na biblioteca, então você não precisa nem se preocupar com isso. Seu voto foi adicionado para ajudar a aumentar a prioridade.
Incrível, que bom que aumentou a prioridade. Se for uma solução simples e você puder me indicar a direção certa (repositório ou arquivo), posso cuidar disso.
@dangerismycat ,
Impressionante! A correção provavelmente estaria aqui .
@thinkingserious Hm… parece que a compilação falhou. Há testes associados que preciso atualizar ou algo mais?
Algo está errado com as compilações do Travis CI para quem não está na organização SendGrid. Não tenho certeza do que está acontecendo, mas vou verificar localmente.
Ei, ainda estou tendo esse problema em
Enviar enquanto sub é um inteiro não funciona e dá
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 } ]
No entanto, quando eu mudar o sub na solicitação para ${sub}
, ele funcionará
Saudações
Olá @Mauyeung ,
Você se importaria de abrir uma nova edição? Obrigado!
Parece que isso pode ser um bug, pois vejo que devemos convertê-lo em uma string para você nos bastidores.
Obrigado pela atenção,
Elmer
Comentários muito úteis
@wizysanjay chame
toString
em suas substituições antes de passar para a biblioteca. Por exemplo, em vez de:Faça isso: