【问题标题】:Node JS: Sendgrid Mail 403 'Forbidden' error节点 JS:Sendgrid Mail 403 'Forbidden' 错误
【发布时间】:2020-04-10 21:45:28
【问题描述】:

我正在我的节点 js 项目中使用发送网格发送一封非常简单的电子邮件。但是我得到了一个 403 Forbidden 错误。 API 密钥具有完全访问权限。代码也正确集成,因为我使用了另一个帐户的另一个 API 密钥,它运行良好。

错误日志:

有什么建议吗?

【问题讨论】:

  • 面临同样的问题 - 我看到 x-no-cors-reason 标头有一个指向他们的文档的链接,sendgrid.com/docs/for-developers/sending-email/cors,但它只是说你不能使用浏览器中的 sg api (duh )
  • @AlfredYoung 在您的 Sendgrid 帐户上执行单一单一发件人身份验证,解决了这个问题。

标签: node.js express email sendgrid http-status-code-403


【解决方案1】:

错误的存在是因为消息中“发件人”字段中的电子邮件地址(在您的 nodejs 代码中,将使用 sendgrid 发送)未经 sendgrid 验证。仅将该电子邮件地址放在 sendgrid 明确验证的“发件人”字段中。

要验证您的发件人电子邮件地址以便能够发送电子邮件,请参阅以下链接:-

https://sendgrid.com/docs/ui/sending-email/sender-verification

希望这会有所帮助。

(关于域名可能还有其他问题,请正确阅读链接,他们有关于使用 gmail.com 地址的警告,您可以忽略它)

【讨论】:

  • 这应该是公认的答案,谢谢!
  • 当 SendGrid 想要向不存在的地址发送验证电子邮件时,如何验证“donotreply”电子邮件地址?
  • 我不确定我是否可以将这个特定字段用于此浇注,如果不是,请原谅我,但非常感谢!我在想这是关于我在类传递的字段中使用的编码方法...
【解决方案2】:

在此处粘贴整个 ERROR

ResponseError: Forbidden
    at node_modules/@sendgrid/client/src/classes/client.js:133:29
    at processTicksAndRejections (internal/process/task_queues.js:93:5) {
  code: 403,
  response: {
    headers: {
      server: 'nginx',
      date: 'Sat, 10 Oct 2020 17:22:02 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'
    },

这是进一步扩展@Aman 上述回答的解决方案。

  • 您必须验证发送邮件的电子邮件地址。

这里的意思是from: address

const msg = {
    to: 'recepient@email.com',
    from: 'sender@email.com', //this is the address that needs to be verified by sendgrid
    subject: 'Sending from Sendgrid',
    text: 'here is the test from node',
    html: `<strong> Here is the order #${orderNumber} user: ${user} </strong>`,
}

这里是如何验证它 https://sendgrid.com/docs/ui/sending-email/sender-verification/

请看下面的截图:

【讨论】:

    【解决方案3】:

    在验证发送地址时检查是否使用from电子邮件地址。

    【讨论】:

      【解决方案4】:

      要修复此错误,您需要为您的发件人电子邮件执行 SendGrid 发件人身份验证

      为此,您需要登录 SendGrid Dashboard 并访问 Settings 下拉菜单下的 Sender Authentication

      发件人身份验证有 2 种类型

      1. 域认证 // 推荐
      2. 单一发件人验证

      1 域认证
      如果您允许 SendGrid 对您的域进行身份验证,例如webapp.com
      如果电子邮件from 密钥与验证域from: *@webapp.com 匹配,那么您将能够使用您的 SendGrid API 密钥成功发送电子邮件

      2 单一发件人身份验证
      这是您验证单个电子邮件的另一种选择,例如person@email.com
      这将允许您通过您的 SendGrid API KEY 发送电子邮件 from: person@email.com

      【讨论】:

      • “发件人:*@webapp.com”部分对我有帮助
      【解决方案5】:

      sendgrid 的最新版本中,他们强制验证“单一发件人”,即您是单一发件人。因此,要使其正常工作,Sendgrid Send Email API 中的 From 字段应与您验证为“单一发件人”的电子邮件相匹配

      【讨论】:

        【解决方案6】:

        验证您的单个发件人帐户,其中发件人身份验证/单个发件人验证/操作列(三点)(发送验证电子邮件-编辑-删除菜单)

        【讨论】:

          【解决方案7】:

          我遇到了同样的问题。
          我发现我的应用程序的电子邮件from 和 SendGrid API 的发件人身份验证需要相同。

          const sendMailHtml = async (subject, html) => {
              try {
                  const msg = {
                      to: 'to@email.com',
                      from: {
                          email: "sample@hotmail.com"
                      },
                      subject: subject,
                      html: html,
                  }
                  await sendgrid.send(msg)
              } catch (e) {
                  return e
              }
          }
          

          sendgrid API 电子邮件字段

          【讨论】:

            【解决方案8】:

            [Tulio Faria] 通过在他的 Sendgrid 帐户上执行“单一发件人身份验证”解决了这个问题。

            不久前我也遇到了类似的问题。帮助我解决此问题的是转到设置> API 密钥,然后将我正在使用的密钥的设置更改为完全访问。

            【讨论】:

            • 我也面临同样的问题。将 api 密钥更改为完全访问权限也不能解决问题。
            • Tulio Faria 我通过在我的 Sendgrid 帐户上执行“单一发件人身份验证”解决了这个问题。但是,我有另一个帐户并且我没有验证任何域或发件人电子邮件,但我仍然能够从该帐户发送电子邮件。它令人难以置信,因为我可以将任何电子邮件地址指定为发件人并且电子邮件已成功发送。不确定真正的问题是什么。
            • @Sean C 和 "aledap" 我尝试使用相同的方法更改访问权限,但仍然面临同样的问题,它会给我 403 错误。
            • @sean - 这个解决方案对于这里真正发生的事情来说太过分了,错误是因为你的 msg 对象中的 from: 'emailAddress@email.com', 还没有被 Sendgrid 确认/验证
            猜你喜欢
            • 2016-04-05
            • 1970-01-01
            • 2019-05-26
            • 2020-09-07
            • 2014-02-17
            • 2021-01-24
            • 1970-01-01
            • 1970-01-01
            • 2022-07-30
            相关资源
            最近更新 更多