web-dev-qa-db-fra.com

403 Interdit dans Node.js lors de l'envoi d'e-mails à l'aide de sendgrid

Je conçois une page de contact dans laquelle l'interface utilisateur est rendue à l'aide de React. J'ai un formulaire qui est censé envoyer un e-mail lors de la soumission. Voici le code d'interface utilisateur pour la gestion de la soumission:

    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
            });
        });
}

L'API pour envoyer des e-mails est écrite en Node.js. Utilisé @ sendgrid // mail pour déclencher l'envoi. Lors du débogage, je peux voir que les valeurs du formulaire atteignent l'API, mais lors de son envoi, il génère une erreur 403 Forbidden. Voici le code api:

app.post('/api/email', (req, res, next) => {
sendGrid.setApiKey('<Generated key in sendgrid>');
const msg = {
    to: '[email protected]',
    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
    });
});
});

Voici la trace d'erreur que j'obtiens dans la console VSCode lors du débogage:

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 : Erreur {constructeur:, toString:, toJSON:}

Je ne sais pas pourquoi cela me donne une erreur interdite. S'il vous plaît laissez-moi savoir si j'ai besoin d'ajouter plus d'informations ici. Merci d'avance :)

EDIT: - J'ai suivi le document ici à sendgrid pour créer une clé API et utilisé la même chose dans sendGrid.setApiKey ().

enter image description here

3
Siddharth Shankar

Pour pouvoir envoyer des e-mails depuis sendgrid, vous devez configurer la vérification d'expéditeur unique ou la vérification de domaine.

Veuillez vérifier docs pour vérifier l'expéditeur.

Pour nous assurer que nos clients conservent la meilleure réputation d'expéditeur possible et pour maintenir un comportement d'envoi légitime, nous demandons aux clients de vérifier leur identité d'expéditeur. Une identité d'expéditeur représente votre adresse e-mail "De" - l'adresse que vos destinataires verront comme l'expéditeur de vos e-mails.

Vous pouvez vérifier une ou plusieurs identités d'expéditeur à l'aide de l'authentification de domaine ou de la vérification d'expéditeur unique.

Dans le journal de votre console d'application api, le message d'erreur doit être comme ceci: (pour voir le vrai message d'erreur du côté reactjs, vous devez utiliser err.response.data.

L'adresse d'expéditeur ne correspond pas à une identité d'expéditeur vérifiée. Le courrier ne peut pas être envoyé tant que cette erreur n'est pas résolue.

5
SuleymanSah