【问题标题】:"UnhandledPromiseRejectionWarning: Error: Forbidden" while sending email from sendGrid in Node.js从 Node.js 中的 sendGrid 发送电子邮件时出现“UnhandledPromiseRejectionWarning:错误:禁止”
【发布时间】:2020-04-12 12:12:34
【问题描述】:

我正在将 sendgrid 集成到我的 node.js 项目中,并按照他们网站上的说明使用以下代码

const sgMail = require('@sendgrid/mail')

const sendGridAPIKey = "API key"

sgMail.setApiKey(sendGridAPIKey)

const msg = {
 to: 'agrawalanuj751997@gmail.com',
 from: 'agrawalanuj751997@gmail.com',
 subject:'My first mail from node',
 text:"I'm sending myself an email"
}

sgMail.send(msg)

我的日志中出现以下错误。我尝试了来自多个帐户的多个 API 密钥,但仍然遇到相同的错误。

(node:16043) UnhandledPromiseRejectionWarning: Error: Forbidden
at Request._callback (node_modules/@sendgrid/client/src/classes/client.js:124:25)
at Request.self.callback (node_modules/request/request.js:185:22)
at Request.emit (events.js:200:13)
at Request.<anonymous> (node_modules/request/request.js:1154:10)
at Request.emit (events.js:200:13)
at IncomingMessage.<anonymous> (node_modules/request/request.js:1076:12)
at Object.onceWrapper (events.js:288:20)
at IncomingMessage.emit (events.js:205:15)
at endReadableNT (_stream_readable.js:1154:12)
at processTicksAndRejections (internal/process/task_queues.js:84:9)
(node:16043) UnhandledPromiseRejectionWarning: Unhandled promise 
rejection. This error originated either by throwing inside of an async 
function without a catch block, or by rejecting a promise which was 
not handled with .catch(). (rejection id: 1)
(node:16043) [DEP0018] DeprecationWarning: Unhandled promise 
rejections are deprecated. In the future, promise rejections that are 
not handled will terminate the Node.js process with a non-zero exit 
code.

【问题讨论】:

    标签: node.js visual-studio-code sendgrid


    【解决方案1】:

    我也遇到了类似的问题。我认为他们需要更新文档。 send 方法返回一个您尚未处理的承诺,这就是您收到错误的原因。

    改变

    sgMail.send(msg)
    

    sgMail.send(msg).then(() => {
        console.log('Message sent')
    }).catch((error) => {
        console.log(error.response.body)
        // console.log(error.response.body.errors[0].message)
    })
    

    现在,未处理的 Promise 拒绝错误将消失,并且您将看到为什么 Promise 被拒绝的错误。

    类似

    发件人地址与已验证的发件人身份不匹配。在解决此错误之前无法发送邮件。访问https://sendgrid.com/docs/for-developers/sending-email/sender-identity/ 查看发件人身份要求

    这是不言自明的。转到指定链接,它将指导您验证自我身份。完成后,它应该可以正常工作。


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

    【讨论】:

    • 这行得通,但经过验证,即使我删除了承诺,为什么我没有收到未处理的承诺拒绝警告?
    • 这是因为处理 resolve 或 reject 在 promise 中是可选的。因此可以省略 then..catch 块,如果您的方法成功运行,它不会影响您的应用程序中的任何内容。省略的唯一缺点是,如果你的 promise 被拒绝,将没有 catch 块来处理它,你最终会在控制台上收到无法追踪的错误消息。
    【解决方案2】:

    我也遇到了类似的问题。 send 方法返回一个您尚未处理的承诺,这就是您收到错误的原因。

    sgMail.send({  
        to: 'arjunregmi148@gmail.com',
        from: 'arjunregmi148@gmail.com',
        subject: 'This is my first creation',
        text:'Be safe from corona virus'
    }).then(() => {
        console.log('Message sent')
    }).catch((error) => {
        console.log(error.response.body)
    })
    

    【讨论】:

      【解决方案3】:

      您无法在 sendgrid 上验证用户验证单个发件人

      【讨论】:

      • 这不相关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多