After completing registration, getting the following error while trying to respond to the POST request. (user is successfully added to database though)
express deprecated res.send(status, body): Use res.status(status).send(body)
instead authregistrator.js:31:29
D:startloopservernode_modulesmysqllibprotocolParser.js:80
throw err; // Rethrow non-MySQL errors
^
RangeError: Invalid status code: [object Object]
at ServerResponse.writeHead (_http_server.js:199:11)
at ServerResponse.writeHead (D:startloopservernode_moduleson-headersindex.js:55:19)
at ServerResponse._implicitHeader (_http_server.js:190:8)
at write_ (_http_outgoing.js:632:9)
at ServerResponse.end (_http_outgoing.js:751:5)
at ServerResponse.send (D:startloopservernode_modulesexpresslibresponse.js:221:10)
at ServerResponse.json (D:startloopservernode_modulesexpresslibresponse.js:267:15)
at ServerResponse.send (D:startloopservernode_modulesexpresslibresponse.js:158:21)
at Query.db.query (D:startloopserverauthregistrator.js:31:29)
at Query.<anonymous> (D:startloopservernode_modulesmysqllibConnection.js:502:10)
index.js (inpoints)
// Middlewares
const express = require('express')
const morgan = require('morgan')
const cors = require('cors')
const bodyParser = require('body-parser')
const validator = require('express-validator')
const registrator = require('./auth/registrator')
const status = require('./appstatus/status')
require('dotenv').config();
// New express app
const app = express()
app.use(morgan('tiny'))
app.use(cors())
app.use(bodyParser.json())
app.use(validator())
// Status GET
app.get('/status', status.getStatus)
// Register POST
app.post('/auth/reg', registrator.register)
// Express.js listen
const port = process.env.PORT || 3362
app.listen(port, () => {
console.log(`On port ${port}`)
})
registrator.js
// Registrator
// Requires request and response
const validator = require('./validator')
const bcrypt = require('bcrypt')
exports.register = function(req, res) {
const valErr = validator.registrationValidator(req)
if (valErr) {
console.log(`Validation Error: ${JSON.stringify(valErr)}`)
res.status(200).send([{well: 'no'} ,valErr])
throw valErr
}
const db = require('../modules/database')
const username = req.body.username
const fname = req.body.fname
const lname = req.body.lname
const email = req.body.email
const password = req.body.password
// Hash Password
bcrypt.hash(password, 10, (err, hash) => {
if (err) throw err
db.query('INSERT INTO users (username, email, password_hash, first_name, last_name) VALUES (?, ?, ?, ?, ?)', [username, email, hash, fname, lname], (err, result) => {
if (err) {
res.send(err)
throw err
}
res.status(200).send({well: 'yes'} ,result)
})
})
return 0
}
This seems to be a problem with MySQL. Trying to send valErr works but trying to send response of registration does not. Note: The query is done successfully.
After completing registration, getting the following error while trying to respond to the POST request. (user is successfully added to database though)
express deprecated res.send(status, body): Use res.status(status).send(body)
instead authregistrator.js:31:29
D:startloopservernode_modulesmysqllibprotocolParser.js:80
throw err; // Rethrow non-MySQL errors
^
RangeError: Invalid status code: [object Object]
at ServerResponse.writeHead (_http_server.js:199:11)
at ServerResponse.writeHead (D:startloopservernode_moduleson-headersindex.js:55:19)
at ServerResponse._implicitHeader (_http_server.js:190:8)
at write_ (_http_outgoing.js:632:9)
at ServerResponse.end (_http_outgoing.js:751:5)
at ServerResponse.send (D:startloopservernode_modulesexpresslibresponse.js:221:10)
at ServerResponse.json (D:startloopservernode_modulesexpresslibresponse.js:267:15)
at ServerResponse.send (D:startloopservernode_modulesexpresslibresponse.js:158:21)
at Query.db.query (D:startloopserverauthregistrator.js:31:29)
at Query.<anonymous> (D:startloopservernode_modulesmysqllibConnection.js:502:10)
index.js (inpoints)
// Middlewares
const express = require('express')
const morgan = require('morgan')
const cors = require('cors')
const bodyParser = require('body-parser')
const validator = require('express-validator')
const registrator = require('./auth/registrator')
const status = require('./appstatus/status')
require('dotenv').config();
// New express app
const app = express()
app.use(morgan('tiny'))
app.use(cors())
app.use(bodyParser.json())
app.use(validator())
// Status GET
app.get('/status', status.getStatus)
// Register POST
app.post('/auth/reg', registrator.register)
// Express.js listen
const port = process.env.PORT || 3362
app.listen(port, () => {
console.log(`On port ${port}`)
})
registrator.js
// Registrator
// Requires request and response
const validator = require('./validator')
const bcrypt = require('bcrypt')
exports.register = function(req, res) {
const valErr = validator.registrationValidator(req)
if (valErr) {
console.log(`Validation Error: ${JSON.stringify(valErr)}`)
res.status(200).send([{well: 'no'} ,valErr])
throw valErr
}
const db = require('../modules/database')
const username = req.body.username
const fname = req.body.fname
const lname = req.body.lname
const email = req.body.email
const password = req.body.password
// Hash Password
bcrypt.hash(password, 10, (err, hash) => {
if (err) throw err
db.query('INSERT INTO users (username, email, password_hash, first_name, last_name) VALUES (?, ?, ?, ?, ?)', [username, email, hash, fname, lname], (err, result) => {
if (err) {
res.send(err)
throw err
}
res.status(200).send({well: 'yes'} ,result)
})
})
return 0
}
This seems to be a problem with MySQL. Trying to send valErr works but trying to send response of registration does not. Note: The query is done successfully.
08.09.16 — 12:00
Подскажите пожалуйста как избавиться от этой ошибки:
//
УРЛ = «ссылка» + СокрЛП(ЭлементыФормы.url.Значение);
ХМЛХТТП = ПолучитьCOMОбъект(«», «Microsoft.XMLHTTP»);
ХМЛХТТП.Open(«GET», УРЛ, Ложь);
ХМЛХТТП.Send(Null);
Пока ХМЛХТТП.Status <> 200 Цикл
Состояние(«Ждем…»);
КонецЦикла;
//ТегНачалоРезультата = «<parents>»;
//ТегКонецРезультата = «</parents>»;
//ТегНачалоРезультата2 = «<id>»;
//ТегКонецРезультата2 = «</id>»;
//ТегНачалоПоля = «<» + ТегПоляНаСайте + «>»;
//ТегКонецПоля = «</» + ТегПоляНаСайте + «>»;
ТекстОтвета = ХМЛХТТП.ResponseText;
//
{Форма.Форма.Форма(7)}: Ошибка при вызове метода контекста (send)
ХМЛХТТП.Send(Null);
по причине:
Произошла исключительная ситуация (msxml3.dll): Указанный протокол неизвестен.
1 — 08.09.16 — 12:04
Аналог null в 1С это неопределено
2 — 08.09.16 — 12:05
(1) Аналог, да не аналог и не везде
3 — 08.09.16 — 12:06
(2) В ВК кстати Null
4 — 08.09.16 — 12:13
работает на других функциях с null
я решил проверить обработкой, выдает ошибку
на метод send, что нужно исправить?
5 — 08.09.16 — 12:16
(0)
https://msdn.microsoft.com/ru-ru/library/ms536736.aspx
send method
Sends an HTTP request to the server and receives a response.
Syntax
XMLHttpRequest.send(varBody);
Parameters
varBody [in, optional]
Type: any
Any that specifies the body of the message being sent with the request.
Value Meaning
ArrayBuffer
A binary data. See FileReader.readAsArrayBuffer.
blob
A Blob (binary data object).
Document
A documentnode.
ArrayBufferView
A typed array view of an ArrayBuffer.
string
A DOMString.
FormData
A FormData object
Как видим, NULL там нет
6 — 08.09.16 — 12:17
(1) если ставить неопределено за место null таже ошибка
7 — 08.09.16 — 12:17
+(5) Но, поскольку varBody optional, то,
ХМЛХТТП.Send();
8 — 08.09.16 — 12:17
(0) а что там должно быть?
9 — 08.09.16 — 12:18
(6) Не ставьте вообще ничего
10 — 08.09.16 — 12:18
(9) попробую
11 — 08.09.16 — 12:21
(9) ругается
{Форма.Форма.Форма(8)}: Ошибка при вызове метода контекста (send)
ХМЛХТТП.Send();
по причине:
Произошла исключительная ситуация (msxml3.dll): Указанный протокол неизвестен.
12 — 08.09.16 — 12:21
что то не так!!!
13 — 08.09.16 — 12:22
(12) Пустую строку
14 — 08.09.16 — 12:22
(11) Так это не потому.
Вы в УРЛ пихаете что?
УРЛ = «ссылка» + СокрЛП(ЭлементыФормы.url.Значение);
15 — 08.09.16 — 12:22
16 — 08.09.16 — 12:23
+(14) Любой браузер ругнется на такой урл
17 — 08.09.16 — 12:27
(16) то что я ложу в УРЛ пробовал в браузере он возвращает номер, то есть работает
18 — 08.09.16 — 12:32
брал с отладчика с табло, вставлял в строку браузера
19 — 08.09.16 — 12:34
(17) НЕ ВЕРЮ (с)
20 — 08.09.16 — 12:35
(18) значение УРЛ в студию.
21 — 08.09.16 — 12:35
(18) А там по аналогии с 1С
xhr.open(‘POST’, ‘/server’, true);
а в Send ресурсы
22 — 08.09.16 — 12:37
23 — 08.09.16 — 12:38
24 — 08.09.16 — 12:39
А попробуй
ХМЛХТТП.Open(«GET», «http://www.reestr35.ru/admin/offline_func.php»;, Ложь);
ХМЛХТТП.Send(«?act=add_redirect&url=http://ya.ru»;);
25 — 08.09.16 — 12:43
(22)
УРЛ = «http://www.reestr35.ru/admin/offline_func.php?act=add_redirect&url=http://ya.ru»;;
ХМЛХТТП = ПолучитьCOMОбъект(«», «Microsoft.XMLHTTP»);
ХМЛХТТП.Open(«GET», УРЛ, Ложь);
ХМЛХТТП.Send(Null);
Пока ХМЛХТТП.Status <> 200 Цикл
Состояние(«Ждем…»);
КонецЦикла;
ТекстОтвета = ХМЛХТТП.ResponseText;
У меня работает.
26 — 08.09.16 — 12:46
(25) почему у меня может быть ошибка?
27 — 08.09.16 — 12:54
(26) не подскажете? если все одинаково, то дело в сервере?
28 — 08.09.16 — 12:57
29 — 08.09.16 — 12:58
(28) попробовал на своем компе, тоже самое, ошибка
30 — 08.09.16 — 12:59
31 — 08.09.16 — 12:59
(28) все же не понимаю как мне устранить эту ошибку? (
32 — 08.09.16 — 13:00
(30) (24) в смысле?
33 — 08.09.16 — 13:01
(30) но вы говорите же что у вас выполняется все
34 — 08.09.16 — 13:07
врап=новый COMОбъект(«NetObjectToIDispatch45»);
HttpClient=Врап.ПолучитьТипИзСборки(«System.Net.Http.HttpClient»,»System.Net.Http.dll»);
handler = врап.СоздатьОбъект(«System.Net.Http.HttpClientHandler»);
DecompressionMethods= Врап.ПолучитьТип(«System.Net.DecompressionMethods»);
handler.AutomaticDecompression=Врап.OR(DecompressionMethods.GZip,DecompressionMethods.Deflate) ;
Клиент=Врап.СоздатьОбъект(HttpClient,handler);
УРЛ = «http://www.reestr35.ru/admin/offline_func.php?act=add_redirect&url=http://ya.ru»;;
Стр=Клиент.GetStringAsync(УРЛ).Result;
Сообщить(Стр);
//Клиент.Dispose();
Врап.ЗакрытьРесурс(Клиент);
Выдает
Your IP (хх.ххх.х.ххх) is not allowed.
35 — 08.09.16 — 13:09
(34) да если пробовать как в 24, тоже
36 — 08.09.16 — 13:12
(33) Это не я а 25
37 — 08.09.16 — 13:13
(32) Попробуй 15+30
38 — 08.09.16 — 14:14
(36) узнал что такое бывает на сервере иногда
то есть в иной период возможно сработает, как в (0)
39 — 08.09.16 — 14:22
(38) Побробуй 37 для успокоения души
40 — 08.09.16 — 14:23
38 при этом из браузера читает?
41 — 08.09.16 — 14:30
(39) пока меня выкинуло с сервера и не пускает (((( ожидаю когда наладится если
(24) вот это сработало у меня на компе, выдав результат Your IP (хх.ххх.х.ххх) is not allowed, так как там можно только с сервера, я хотел проверить это на сервере и меня выбросило
то есть при (24) ошибки той нет, и по коду идет дальше
(40) (0) + ссылка из (22) в браузере возвращает число на пустой странице, которое мне и нужно считать
42 — 08.09.16 — 14:39
(41) Значит у тебя проблема с библиотеками на сервере. Небось 64 разрядны. А почему HTTPСоединеие не используешь?
Почему 37 не хочешь попробовать?
43 — 08.09.16 — 14:57
прокси все ломает…
44 — 08.09.16 — 14:59
(42) Нет не с библиотеками.
45 — 08.09.16 — 15:01
(44) Возможно. Я таким анахронизмом давно не занимаюсь.
46 — 08.09.16 — 15:02
(41) У меня тоже именно это (Your IP (хх.ххх.х.ххх) is not allowed) и выдало.
О чем это говорит, что разрешен вход либо под определенным агентом с определенной подсети, иначе браузер не выдавал бы
числа <<ссылка из (22) в браузере возвращает число на пустой странице, которое мне и нужно считать>>.
47 — 08.09.16 — 15:53
(42) на сервере 64х разрядная система
(46) да работать это будет только на сервере
48 — 08.09.16 — 15:54
(42) (37) там много написано, изучать неделю только нужно, мне дали пример кода и что делать объяснили, но вот из за ошибки на send ничего не работает
49 — 08.09.16 — 15:54
(47) неа, иначе как ты видишь ссылка из (22) в браузере возвращает число на пустой странице, которое мне и нужно считать.
50 — 08.09.16 — 15:55
(49) я вижу это в браузере на сервере, там только работает
51 — 08.09.16 — 15:57
но вот из 1с ломается на методе send, пока ни разу не сработало
то что в (24) возвратило <?xml version=»1.0″ encoding=»UTF-8″?> то есть это не подойдет наверное, так как это не то что нужно
52 — 08.09.16 — 16:00
{Форма.Форма.Форма(7)}: Ошибка при вызове метода контекста (send)
ХМЛХТТП.Send(Null);
по причине:
Произошла исключительная ситуация (msxml3.dll): Указанный протокол неизвестен.
||
остается
53 — 08.09.16 — 16:18
54 — 08.09.16 — 16:20
Рядом с NetObjetToIDispatch45.dll лежит RegAsm.bat
его нужно запустить от администратора. Там делов меньше минуты
55 — 08.09.16 — 16:56
(54) ну я не администратор на сервере, мне сказали что метод сенд иногда не работает, иногда работает, я не пойму этого всего пока
falselight
56 — 08.09.16 — 16:57
(54) я не в теме этого всего, с этим всем нужно разбираться
Если при получении данных с сайта возникает ошибка:
Ошибка при вызове метода контекста (Send): Произошла исключительная ситуация (WinHttp.WinHttpRequest): The certificate authority is invalid or incorrect
Это может означать, что соединение защищенное и 1С не может установить подлинность сертификата.
Чтобы обойти эту ситуацию можно включить игнорирование ошибок защищенного соединения. Ниже в листенге это «блок по отключению защищенного соединения»
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.SetProxy(2, ПроксиСервер.Адрес+":"+ПроксиСервер.Порт); // устанавливаем параметры проксисервера если нужно
WinHttp.SetCredentials(ПроксиСервер.Логин, ПроксиСервер.Пароль, 1); // логин и пароль проксисервера
// ************************** Начало блока по отключению защищенного соединения **********
Скрипт= Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.language="javascript";
Скрипт.AddObject("WinHttp",WinHttp);
Скрипт.Eval("WinHttp.Option(2)=1251"); // установка кодировки страницы
Скрипт.Eval("WinHttp.Option(4)=13056");//intSslErrorIgnoreFlags Игноировать ошбибки при SSL соединении
Скрипт.Eval("WinHttp.Option(6)=true");//blnEnableRedirects Разрешить перенаправления
Скрипт.Eval("WinHttp.Option(12)=true");//blnEnableHttpsToHttpRedirects Разрешить перенаправления с защищенного на не защиещенное соединение
// ************************** Конец блока по отключению защищенного соединения **********
WinHttp.Open("POST",URLСайта, Ложь); // URLСайта нужно заменить на тот к которому подсоединяетесь
WinHttp.SetRequestHeader("Host", URLСайта); // URLСайта нужно заменить на тот к которому подсоединяетесь
WinHttp.SetRequestHeader("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5");
WinHttp.SetRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
WinHttp.SetRequestHeader("Accept-Language","ru,en-us;q=0.7,en;q=0.3");
WinHttp.SetRequestHeader("Accept-Charset","windows-1251,utf-8;q=0.7,*;q=0.7");
WinHttp.SetRequestHeader("Keep-Alive","300");
WinHttp.SetRequestHeader("Connection","keep-alive");
WinHttp.SetRequestHeader("Content-Type","application/x-www-form-urlencoded");
WinHttp.Send(ДанныеPOSTЗапроса)
Ключевыми, здесь являются параметры 4 и 12
Также встречал следующий код, но он НЕ рабочий, хотя и не вызывает ошибок
WinHttp.Option(2, 1251);
WinHttp.Option(4, 13056);//intSslErrorIgnoreFlags
WinHttp.Option(6, true);//blnEnableRedirects
WinHttp.Option(12, true);//blnEnableHttpsToHttpRedirects
Резюме проблемы
Получение ошибки «неверный запрос» со следующей полезной нагрузкой.
Запрос
cosnt msg = {
"to": "[email protected]",
"from": "[email protected]",
"subject": "Support Pay Transparency at PayCheck",
"templateId": "24ae3147-4faa-4380-8613-c5be144f4542",
"customArgs": {
"ally_id": "cj6zlh7yd000001qir4r5suuk"
}
};
sgMail.send(msg)
отклик
{
"message": "Bad Request",
"code": 400,
"response": {
"headers": {
"server": "nginx",
"date": "Wed, 30 Aug 2017 22:30:41 GMT",
"content-type": "application/json",
"content-length": "365",
"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": [
{
"message": "Unless a valid template_id is provided, the content parameter is required. There must be at least one defined content block. We typically suggest both text/plain and text/html blocks are included, but only one block is required.",
"field": "content",
"help": "http://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/errors.html#message.content"
}
]
}
}
}
Заметки
В документации написано templateId
но в сообщении об ошибке написано template_id
. Я пробовал оба и получил такое же сообщение об ошибке. Я прикрепил снимок экрана с моим шаблоном для проверки работоспособности, чтобы убедиться, что он правильно настроен в sendgrid.
Технические подробности:
- sendgrid-nodejs Версия: master (последняя фиксация: [номер фиксации])
- Node.js Версия: 6.10.3
- Запуск в функции AWS Lambda
Все 23 Комментарий
@onesien API почтовой программы JS нового узла не зависит от регистра, поэтому вы можете использовать как templateId
и template_id
. Случай верблюда более распространен в области JS, поэтому мы добавили его поддержку, в то время как сам API использует случай змеи.
Я посмотрю, что происходит с идентификатором шаблона
Привет @onesien!
Вы также можете обратиться в службу поддержки . Я думаю, проблема может быть связана со старым редактором шаблонов.
Можете ли вы также попробовать создать новый шаблон и использовать этот идентификатор?
С наилучшими пожеланиями,
Элмер
@thinkingserious ты можешь проверить это на своем конце? Похоже, что мы правильно отправляем параметр template_id
с запросом. Я только что создал новый шаблон, и у меня тоже возникает эта проблема.
@adamreisnz ,
Мои локальные тесты работают, но у меня в аккаунте только новые шаблоны.
Нет, я использовал новый шаблон, только что созданный, возникла та же проблема
Следующее работает для меня (с использованием версии v6.1.1), следуя приведенному здесь примеру:
// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');
//build object
var mailOptions = {
personalizations:[{
to: '[email protected]',
substitutions: {'name':'John', 'city':'Denver'}
}],
from: '[email protected]',
reply_to: '[email protected]',
subject: 'Hello',
html: 'email text goes here',
templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932'
};
//send
sendGridMail.send(mailOptions);
Ах, я думаю, что у нас есть старая ошибка, когда API требует блокировать контент во всех случаях. Итак, это работает:
// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');
//build object
var mailOptions = {
to: '[email protected]',
from: '[email protected]',
reply_to: '[email protected]',
subject: 'Hello',
templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932',
html: ' ',
substitutions: {
name: 'Some One',
city: 'Denver',
}
};
//send
sendGridMail.send(mailOptions);
но не это:
// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');
//build object
var mailOptions = {
to: '[email protected]',
from: '[email protected]',
reply_to: '[email protected]',
subject: 'Hello',
templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932',
substitutions: {
name: 'Some One',
city: 'Denver',
}
};
//send
sendGridMail.send(mailOptions);
Мне пришлось добавить блок содержимого, чтобы отправить шаблон. Я получал _Bad Request (400) «Если не указан действительный template_id, параметр содержимого обязателен. Должен быть хотя бы один определенный блок содержимого …» _ при использовании шаблона, созданного в новом редакторе html.
sgMail.setApiKey(sgKey);
sgMail.setSubstitutionWrappers('-', '-');
var msg: any = {
to: email,
from: '[email protected]',
templateId: 'xxxxxxx',
substitutions: {
verifyUrl: createAccountLink
}
};
sgMail.send(msg)
Если я добавлю блок содержимого, электронное письмо с шаблоном будет отправлено в редакторе html в формате.
sgMail.setApiKey(sgKey);
sgMail.setSubstitutionWrappers('-', '-');
var msg: any = {
to: email,
from: '[email protected]',
content: [{"type":"text/html","value":"0"}],
templateId: 'xxxxxx',
substitutions: {
verifyUrl: createAccountLink
}
};
sgMail.send(msg)
Хорошо, я оставляю это открытым как ошибку.
Я предполагаю, что этот SDK добавляет пустой объект содержимого, если он не установлен. Я думаю, нам нужно пропустить эти функции, когда html и txt не установлены.
На данный момент вышеуказанный обходной путь сделает то, что вам нужно.
@thinkingserious Думаю, ты прав. Я прочитал документацию по API и подумал, что это поле является обязательным. В нем есть только хорошо скрытый комментарий (который великолепно оформлен!), Который я пропустил:
Я создам PR для решения этой проблемы!
PR установлен, это должно решить проблему, а не отправлять поле содержимого с запросом, если контент не предоставлен.
Спасибо за помощь пищит. Я буквально терял рассудок. Вчера поздно вечером я наконец придумал обходной путь и приходил сюда, чтобы сообщить больше информации, но похоже, что вы все уже используете это
Извините за @onesien ,
Исправление только что было отправлено в npm (v6.1.2).
Я использовал дословный код из ответа @thinkingserious, и у возникают проблемы.
Я просто пытаюсь получить самые простые замены в шаблоне, который я создал в sengrid, для отправки. Ответ в CloudWatch (поскольку он работает в Lambda) отображается как 202, но я получаю электронное письмо: A message was received from this address by our systems that had errors in the smtpapi header, and cannot be processed. The error detected was: The template id must be a valid template id for your account.
Что я здесь делаю не так, ребята? Я пытаюсь просеять документы sendgrid, но все кажется действительно разрозненным.
Как вы отправляете идентификатор шаблона? Это через переменную окружения при вызове лямбды?
спасибо за быстрый ответ @cbilliau — нет, в моем случае строка шаблона жестко запрограммирована, так как я просто пытаюсь получить функциональную основу между интерфейсом и сервером. Мой дословный пример:
const sgMail = require("@sendgrid/mail");
sgMail.setApiKey(
"XXXXX"
);
sgMail.setSubstitutionWrappers("%", "%"); // Configure the substitution tag wrappers globally
const msg = {
to: formFields.toEmail,
from: formFields.fromEmail,
subject: "Hello world",
text: "test",
html: "<p>test</p>",
templateId: "be2cc0da-5b2c-428f-8e45-c140f6cfb6eb",
substitutions: {
name1: formFields.fromName,
name2: formFields.fromName,
date: formFields.date
}
};
sgMail.send(msg);
@tetreault Ознакомьтесь с моим ответом выше, я добавляю content: [{"type":"text/html","value":"0"}],
в свою функцию, и это сработало. Неизвестно почему.
просто попробовал, к сожалению, не изменил конечный результат @cbilliau :(. Получил то же письмо:
A message was received from this address by our systems that had errors in the smtpapi header, and cannot be processed.
The error detected was: The template id must be a valid template id for your account. You provided be2cc0da-5b2c-428f-8e45-c140f6cfb6eb
вау, позволь мне поклониться на секунду @cbilliau 🤣 я просто торопился с вещами и не обращал больше внимания. Я понял, что получаю уникальный идентификатор для шаблона, который я создал в разделе «маркетинг», а не в «шаблонах транзакций». Я не очень часто использую интерфейс sendgrid и просто напортачил с этим lol
Ладонь полностью закрываю лицо, фиксирую на моем конце и надеюсь, что это сработает.
кк — подтверждение его работа в настоящее время, особенно с помощью content: [{ type: "text/html", value: "0" }]
линии, @cbilliau упомянутого 👍
Была ли эта страница полезной?
0 / 5 — 0 рейтинги