【问题标题】:403 Forbidden in Node.js while sending email using sendgrid403 禁止在 Node.js 中使用 sendgrid 发送电子邮件
【发布时间】:2020-04-13 19:23:39
【问题描述】:

我正在设计一个使用 React 呈现 UI 的联系人页面。我有一个表格,应该在提交时发送电子邮件。下面是处理提交的 UI 代码:

    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 错误。 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:错误 {constructor: , toString: , toJSON: }

不知道为什么它给我禁止错误。如果我需要在此处添加更多信息,请告诉我。在此先感谢:)

编辑:- 按照 sendgrid 的文档创建 API 密钥并在 sendGrid.setApiKey() 中使用相同的密钥。

【问题讨论】:

  • 您的 Sendgrid API 密钥似乎无效。
  • 交叉检查了 api 密钥,它们没问题。编辑了从我获取 api 密钥的地方添加图像的问题。

标签: node.js reactjs express sendgrid


【解决方案1】:

为了能够从 sendgrid 发送电子邮件,您需要设置单发件人验证或域验证。

请检查docs以验证发件人。

为了确保我们的客户保持尽可能好的发件人声誉 并维护合法的发送行为,我们要求客户 验证他们的发件人身份。发件人身份代表您的 “发件人”电子邮件地址 - 您的收件人将看到的地址 您的电子邮件的发件人。

您可以使用任一域验证一个或多个发件人身份 身份验证或单一发件人验证。

在您的 api 应用程序控制台日志中,错误消息必须是这样的: (要在reactjs端看到真正的错误信息,需要使用err.response.data

发件人地址与已验证的发件人身份不匹配。邮件 在解决此错误之前无法发送。

【讨论】:

  • 对我来说,我需要将消息正文中的 From 字段更新为与 sendGrid 帐户关联的已验证 ail 帐户。
  • 非常感谢@Hutch
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 2018-10-23
  • 2021-10-23
相关资源
最近更新 更多