Не удалось отправить контактную форму по электронной почте с SendGrid на Nodejs - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь реализовать контактную форму на Nodejs и express с SendGrid, но она дает мне 403 Forbidden ошибку, но отправленный почтовый запрос возвращает 200. я не знаю, что я делаю неправильно, пожалуйста, мне нужна помощь, чтобы это исправить.

Вот мое целое route

const express = require('express')
const router = express.Router()
const ContacForm = require('../models/contact_form')
const fs = require('fs')
const path = require('path')
const sgMail = require('@sendgrid/mail');
const nodemailer = require("nodemailer");


router.get('/new', (req, res) => {
  res.render("contact_form/new") 
})

router.post('/', (req, res) => {
const output = `
    <p>You have a new Request</p>
    <h3>Contact Details </h3>
    <ul>
        <li>Name: ${req.body.name}</li>
        <li>Email: ${req.body.email}</li> 
    /ul>
<h3>Message</h3>
<li>Request: ${req.body.request}</li>
`;

sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const msg = {
    to: 'chukwumakingley1@gmail.com',
    from: 'chukwumakingley1@gmail.com',
    subject: 'Sending with Twilio SendGrid is Fun',
    text: 'and easy to do anywhere, even with Node.js',
    html: output,
};

sgMail.send(msg, (error, contact)=> {
    if(error) {
        console.log(error)
        res.render("contact_form/new")
    }
 });
});

, и это ответ на сообщение об ошибке я получаю на терминале

ResponseError: Forbidden
at node_modules/@sendgrid/client/src/classes/client.js:105:29
at processTicksAndRejections (internal/process/task_queues.js:97:5) {
code: 403,
message: 'Forbidden',
response: {
headers: {
  server: 'nginx',
  date: 'Sat, 11 Apr 2020 13:15:25 GMT',
  'content-type': 'application/json',
  'content-length': '281',
  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] }
}
}

и вот моя форма

<form method="POST" action="/contact_form">
  <label>Name</label>
  <input type="text" name="name" id="name" placeholder="Enter Your Name">
  <label>Email</label>
  <input type="text" name="email" id="email" placeholder="Enter Your Email">
  <label>Request</label>
  <textarea  name="request" id="request" placeholder="Enter Your  Prayer Request" cols="30" 
  rows="10"></textarea>
  <button type="submit"> Submit </button>
</form>

ПРИМЕЧАНИЕ. Я отправляю свою переменную SENDGRID_API_KEY, и она поступает через

Это это тип Sendgrid API, который я использую

Integrate using our Web API or SMTP Relay

Ответы [ 3 ]

1 голос
/ 11 апреля 2020

Я только что понял это, потратив время на исследования и прочтение документации. Случилось так, что мне нужно было сделать дополнительную аутентификацию под названием Single Sender Verification et c.

и я изменил свой код, чтобы лучше понять ошибку

sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const msg = {
  to: 'chukwumakingsley1@gmail.com',
  from: 'chukwumakingsley1@gmail.com',
  subject: 'Hello world',
  text: output
};

sgMail
  .send(msg)
  .then(() => {
    //Celebrate
    console.log('Email Sent!');
  })    
  .catch(error => {

    //Log friendly error
    console.error(error.toString());
    console.log(output)

    //Extract error msg
    const {message, code, response} = error;

    //Extract response msg
    const {headers, body} = response;
  });

});

после изменения кода сообщение об ошибке изменилось на

Forbidden (403)
The from address does not match a verified Sender Identity. Mail cannot be 
sent until this error is resolved. Visit https://sendgrid.com/docs/for- 
developers/sending-email/sender-identity/ to see the Sender Identity 
requirements

из этой ошибки я прочитал документацию по ошибкам на сетках отправки.

Я думаю, что дополнительная аутентификация была добавлена ​​в прошлом месяце.

0 голосов
/ 27 апреля 2020

У меня была такая же проблема, sendgrid от 6 апреля 2020 года изменил некоторые критерии для аутентификации бесплатных тестов :(. Теперь необходимо сделать некоторые конфигурации. Что для меня решило, так это последовать этому уроку здесь. https://sendgrid.com/docs/ui/sending-email/sender-verification/. Только авторизация нескольких писем для отправки запросов

0 голосов
/ 11 апреля 2020

Ваш почтовый запрос возвращает 200, потому что вы звоните res.render("contact_form/new"), когда возникает ошибка:

if(error) {
    console.log(error)
    res.render("contact_form/new")
}

Просмотрите тело ответа, полученного из ответа SendGrid. Он содержит массив ошибок, которые могут предоставить дополнительную информацию о том, почему вы получаете 403.

...