#node.js #next.js #sendgrid #sendgrid-api-v3
Вопрос:
Я пытаюсь отправить электронное письмо с помощью nodejs на хосте vercel.
Я получаю неверный запрос с помощью API sendgrid/mail. Похоже, что он не создает информацию заголовка в запросе на отправку.
Когда я сбрасываю сообщение, это просто информация json, которую я отправляю.
Вот код, который я использую.
const sgMail = require('@sendgrid/mail') const SENDGRID_API_KEY = process.env.SENDGRID_API_KEY; export default function (req, res) { const mailData = { from: 'dhook@fullonconsulting.com', to: req.body.email, subject: 'Message to Full On Consulting', text: req.body.message, html: 'lt;divgt;' req.body.message 'lt;/divgt;' } const { classes: { Mail, }, } = require('@sendgrid/helpers'); const mail = Mail.create(mailData); const body = mail.toJSON(); console.log("======================================== "); console.log("RAW BODY: " JSON.stringify(body)); console.log("======================================== "); sendMail(mailData) .then((result) =gt; { console.log('Email sent...', result); res.status(200).json({ status: 'SUCCESS' }) }) .catch((error) =gt; console.log('Error ... ' error.message)); } async function sendMail(mailData) { try { var promise = new Promise( (resolve, reject) =gt; { sgMail.setApiKey(SENDGRID_API_KEY) const msg = { to: mailData.to, // Change to your recipient from: mailData.from, // Change to your verified sender subject: mailData.subject, text: mailData.text, html: mailData.html, } console.log("API KEY: " SENDGRID_API_KEY); console.log(JSON.stringify(msg)); sgMail .send(msg) .then(() =gt; { console.log('Email sent'); }) .catch((error) =gt; { console.error(error); console.log('RECEIVED ERROR') }) }); //promise.then( result =gt; { // console.log("PRomise Success ..."); //}, function(error) { // console.log("Promise Failure..."); //}); } catch (error) { console.log("CATCH ERROR: " error) return error; } }
Вот в чем ошибка
ResponseError: Bad Request at node_modules/@sendgrid/client/src/classes/client.js:146:29 at processTicksAndRejections (node:internal/process/task_queues:96:5) { code: 400, response: { headers: { server: 'nginx', date: 'Sat, 30 Oct 2021 13:51:20 GMT', 'content-type': 'application/json', 'content-length': '219', 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', 'strict-transport-security': 'max-age=600; includeSubDomains' }, body: { errors: [Array] } } }
Комментарии:
1. Что вы получите, если
console.log(error.response.body);
окажетесь в своемcatch
квартале? Я вижу только то, что там написаноerrors: [Array]
, но было бы наиболее полезно посмотреть, что находится в этом массиве.
Ответ №1:
Я неправильно передавал информацию из своей интерфейсной формы, что вызывало проблему.