Попытка отправить электронное письмо с использованием шаблона + замены, включающей целое число, дает ошибку 400 Bad Request без объяснения причин.
%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 может / должен легко справиться с этим, просто заменив toString ().
Рад представить PR, но когда я пошел и написал провальный тест, не было документации о том, как запускать тесты, и в тестах я увидел много вещей о тестовых хостах, которые я бы не запускал.
Привет @rfunduk ,
Спасибо за подробный отзыв!
Это известная проблема, и у группы API есть исправление для своего невыполненного журнала, чтобы предоставить соответствующую строку ошибки.
Вы правы, нам нужно исправить это в библиотеке, и мы будем рады вашему запросу на перенос.
Я с удовольствием расскажу вам, как работают тесты. Но сначала нам понадобится подписанный 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!
:( Не круто. Это задокументировано здесь , но в вашем случае это не поможет.
Мы собираемся встроить это в библиотеку, так что вам даже не нужно об этом беспокоиться. Ваш голос был добавлен, чтобы повысить приоритет.
Замечательно, рад, что это повысило приоритет. Если это простое исправление, и вы можете указать мне правильное направление (репо или файл), я могу об этом позаботиться.
@dangerismycat ,
Потрясающие! Исправление, скорее всего, будет здесь .
@thinkingserious Хм ... похоже, сборка не удалась. Есть ли связанные тесты, которые мне нужно обновить, или что-то еще?
Что-то было не так со сборками Travis CI для тех, кто не работает в организации SendGrid. Я не совсем уверен, что происходит, но проверю на месте.
Эй, проблема все еще возникает на
Отправка этого, когда sub является целым числом, не работает и дает
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}
, он будет работать
С Уважением
Привет @Mauyeung ,
Не могли бы вы открыть новый номер? Спасибо!
Похоже, это может быть ошибка, поскольку я вижу, что мы должны преобразовать это в строку для вас под капотом.
С наилучшими пожеланиями,
Элмер
Самый полезный комментарий
@wizysanjay вызывает
toString
для ваших замен перед передачей в библиотеку. Например вместо:Сделай это: