首页 > 解决方案 > 发送网格 API 400

问题描述

我试图在这里跟踪 SendGrid 的集成,但没有运气。目前我正在尝试在登录时发送一封电子邮件(只是为了让我有一个快速的方法来测试它),并且我不断收到400 Bad Request回复。我已注销控制台process.env.SENDGRID_API_KEY以确保密钥正确,我知道这不是问题所在。它也被设置为完全访问。

完整的错误信息:

ResponseError: Bad Request
    at C:\Code\Recipe Book\node_modules\@sendgrid\client\src\classes\client.js:146:29
    at processTicksAndRejections (internal/process/task_queues.js:93:5) {
  code: 400,
  response: {
    headers: {
      server: 'nginx',
      date: 'Wed, 28 Jul 2021 17:52:10 GMT',
      'content-type': 'application/json',
      'content-length': '185',
      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',
      'strict-transport-security': 'max-age=600; includeSubDomains'
    },
    body: { errors: [Array] }
  }
}

我不认为这是一个典型的CORS错误,因为server.js我有这个:(除非我在这里遗漏了一些东西)

app.use((req, res, next) => {
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept, Authorization"
  );
  res.setHeader(
    "Access-Control-Allow-Methods",
    "GET, POST, PATCH, PUT, DELETE, OPTIONS"
  );
  next();
});

我已经尝试添加On-behalf-of, x-sg-elas-acl到允许的标题中,但这并没有改变结果。应该包括那些吗?

400它似乎也可以在和之间任意切换,401老实说我不知道​​为什么。这是401消息:

ResponseError: Unauthorized
    at C:\Code\Recipe Book\node_modules\@sendgrid\client\src\classes\client.js:146:29
    at processTicksAndRejections (internal/process/task_queues.js:93:5) {
  code: 401,
  response: {
    headers: {
      server: 'nginx',
      date: 'Wed, 28 Jul 2021 18:04:59 GMT',
      'content-type': 'application/json',
      'content-length': '97',
      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',
      'strict-transport-security': 'max-age=600; includeSubDomains'
    },
    body: { errors: [Array] }
  }
}

当我设置发件人身份验证时,我验证了一个域而不是单个发件人,尽管我仍在开发环境中对此进行测试,并且在尝试发送电子邮件时不在我的域中。这也会引起问题吗?

问题是否还在于我正在 localhost 上进行测试,而 sendgrid IP 访问管理允许我当前的 IP 但不允许 localhost 访问?虽然我不太确定将 localhost 添加为允许的 IP 是个好主意。

标签: node.jssendgridsendgrid-api-v3

解决方案


原来问题是我将电子邮件的from字段设置为与我的域认证发件人不匹配的内容。将其更改为右侧@解决了问题,并且电子邮件发送没有问题。


推荐阅读