SendGrid 无法发送电子邮件、firebase 功能。 (代码:403)

Posted

技术标签:

【中文标题】SendGrid 无法发送电子邮件、firebase 功能。 (代码:403)【英文标题】:SendGrid unable to send email, firebase functions. (code: 403) 【发布时间】:2022-01-19 14:07:15 【问题描述】:

我正在使用Firebase Functions 来托管SendGrid 实现,并且我无法使用SendGrid 中“单一发件人验证”列表中未包含的电子邮件发送电子邮件。

我在尝试从 randomemail@gmail.com 发送电子邮件时收到以下错误:

在 node_modules/@sendgrid/client/src/classes/client.js:146:29 在 processTicksAndRejections (internal/process/task_queues.js:95:5) 代码:403

我能够从我添加到Single Sender Verification list 中的SendGrid 的电子邮件中发送电子邮件。

这是我的firebase函数实现,请帮忙。我认为这个问题与域跨域或SandGrid 有关。

import * as functions from "firebase-functions";
const sgMail = require("@sendgrid/mail");

exports.emailMessage = functions.https.onCall((data) => 
    sgMail.setApiKey("my key is here");

   const msg = 
    to: 'stanmozolevskiy@gmail.com', //here is one of the emails that I added to the Singlie Sender verification
    from: data.sender, // only works with email from 
    subject: `$data.name sent you email`,
    text: data.message,
    html: `<strong>$data.message</strong>`,
  
  sgMail
    .send(msg)
    .then(() => 
      console.log('Email sent');
    )
    .catch((error:any) => 
      console.error(error);
    )
    return"status": "sucess", data: data;
);

【问题讨论】:

【参考方案1】:

我在尝试发送电子邮件时收到(以下)错误 randomemail@gmail.com:

...

我能够从我添加到 SendGrid 中的单一发件人验证列表。

这是正常的,Sendgrid 只允许从经过验证的电子邮件发送电子邮件,以避免潜在的恶意用户以他人的名义(即“在邮件中”)发送电子邮件。


请注意,如果您的发件人地址来自同一个电子邮件域,您可以使用Domain Authentication 并避免注册该域的每个电子邮件地址。

【讨论】:

感谢您的回复 Renaud,我认为不是这样。即使我使用某人的电子邮件,我知道它是合法的,仍然会给我同样的错误。所以如果客户想给我发邮件,我需要把它们添加到 SendGrid 中的 Single Sender Verification 列表中吗? (听起来不对) “即使我使用某人的电子邮件,我知道它是合法的”。我会有点“直接”=> 对于 Sendgrid 来说重要的是他们知道电子邮件是合法的,而不是你知道的。他们无法信任其服务的用户,因此他们需要验证用户是他/她在其服务中使用的所有发件人地址的所有者。 我很确定情况并非如此,因为当我按照本教程 edwardbeazer.com/… 进行操作时,我能够正确设置它。但是教程示例不允许我传递参数,所以我不得不将其修改为我现在所拥有的。 您可能对sendgrid.com/blog/dont-send-email-from-domains-you-dont-control 和docs.sendgrid.com/ui/sending-email/sender-verification 感兴趣。请注意,如果您有 authenticated domain 并且您的发件人电子邮件地址与该域完全匹配,您的发件人身份将被自动验证 Twilio SendGrid 布道师在这里。 Renaud 是正确的,使用 SendGrid 时不能只从任何地址发送。您可以通过domain authentication 或verify a single email address,但域身份验证更适合生产用途。【参考方案2】:

Sendgrid 只允许从经过验证的电子邮件发送电子邮件,但您可以使用replyTo 属性来解决问题。

const msg = 
    to: verifiedEmail,
    from: verifiedEmail,
    **replyTo: data.sender,** 
    subject: `$data.name sent you email`,
    text: data.message,
    html: `<strong>$data.message</strong>`,
  

【讨论】:

以上是关于SendGrid 无法发送电子邮件、firebase 功能。 (代码:403)的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 sendgrid api 发送附件

在共享主机上使用 Sendgrid 发送电子邮件

Ruby on Rails 中的 Sendgrid / 电子邮件发送问题(托管在 Heroku 上)

通过 sendgrid/mail 发送时,如何向我的电子邮件添加取消订阅链接

SendGrid 无法从传输连接读取数据:net_io_connectionclosed

Sendgrid 返回 202 但不发送电子邮件