403 Запрещено в Node.js при отправке электронной почты с использованием sendgrid - PullRequest
2 голосов
/ 13 апреля 2020

Я создаю контактную страницу, на которой пользовательский интерфейс отображается с помощью React. У меня есть форма, которая должна отправить электронное письмо при отправке. Вот код пользовательского интерфейса для обработки отправки:

    handleSubmit = (event) => {
    event.preventDefault();

    this.setState({
        disabled: true
    });

    Axios.post('http://localhost:3040/api/email', this.state)
        .then( res => {
            if(res.data.success){

              this.setState({
                disabled: false,
                emailSent: true
              });
            } else{
                this.setState({
                    disabled: false,
                    emailSent: false
                });
            }
        })
        .catch(err => {
            this.setState({
                disabled: false,
                emailSent: false
            });
        });
}

API для отправки электронной почты написано в Node.js. Использовал @ sendgrid // mail для запуска отправки. При отладке я вижу, что значения формы достигают API, но при отправке выдает 403 Forbidden error. Вот код API:

app.post('/api/email', (req, res, next) => {
sendGrid.setApiKey('<Generated key in sendgrid>');
const msg = {
    to: 'some@email.com',
    from: req.body.email,
    subject: 'Website Contact Page',
    text: req.body.message
}

sendGrid.send(msg).then(result => {
    res.status(200).json({
        success: true
    });
})
.catch(err => {
    console.log('error: ', err);
    res.status(401).json({
        success: false
    });
});
});

Ниже приведена трассировка ошибок, которую я получаю в консоли VSCode при отладке:

stack:"Error: Forbidden
at axios.then.catch.error (c:\react\portfolio-api\node_modules\@sendgrid\client\src\classes\client.js:105:29)
at process._tickCallback (internal/process/next_tick.js:68:7)"

proto : Error { constructor:, toString:, to JSON:}

Не уверен, почему он дает мне Запрещенную ошибку. Пожалуйста, дайте мне знать, если мне нужно добавить больше информации здесь. Заранее спасибо:)

РЕДАКТИРОВАТЬ: - Следуйте do c здесь в sendgrid, чтобы создать ключ API и использовать его в sendGrid.setApiKey ().

enter image description here

1 Ответ

2 голосов
/ 13 апреля 2020

Чтобы иметь возможность отправлять электронную почту с электронной почты, необходимо настроить проверку одного отправителя или подтверждение домена.

Пожалуйста, проверьте документы , чтобы проверить отправителя.

Чтобы наши клиенты поддерживали наилучшую репутацию отправителя и поддерживали законное поведение при отправке, мы требуем, чтобы клиенты проверяли свои идентификационные данные отправителя. Идентификатор отправителя представляет собой ваш адрес электронной почты «От» - адрес, который ваши получатели будут видеть в качестве отправителя ваших электронных писем.

Вы можете проверить одну или несколько идентификационных данных отправителя, используя проверку подлинности домена или проверку одного отправителя.

В журнале консоли приложения api сообщение об ошибке должно выглядеть следующим образом: (чтобы увидеть реальное сообщение об ошибке со стороны reactjs, вам нужно использовать err.response.data.

Адрес отправителя не совпадает с подтвержденной идентификационной информацией отправителя. Почта не может быть отправлена ​​до устранения этой ошибки.

...