触发电子邮件 Firebase 扩展 - nodemailer 出错

问题描述

我安装了扩展程序以在数据库写入时触发电子邮件。我的网站有一个简单的“联系我”表单,我不希望有很多流量,所以我想设置一个简单的通知电子邮件系统

但是,我很难正确地进行配置。

我配置了一个 firebase 触发器电子邮件扩展:

smtp connection URI: smtp://email:[email protected]:465
email documents collection: messages
default FROM address: Some Name <email>

在提交的每个联系表单上,我都以以下格式将数据存储到 firestore:

let db = firebase.firestore();
db.collection("messages").add({
    from: "First Last <email>",to: "email",replyTo: "First Last <email>",message: {
        subject: "New message from website!",text: "some text"
    }
})
.then((docRef) => {
    console.log("Document written with ID: ",docRef.id);
})
.catch((error) => {
    console.error("Error adding document: ",error);
});

文档被写入 Firestore。

我在函数日志中看到的错误

ext-firestore-send-email-processQueue 传递 message=messages/vG9gviTCyh1Glxl1vBu1 时出错:错误:queryA EREFUSED smtp.gmail.net

此外,我发现 Firestore 集合中添加一个 delivery 对象,并出现相同的错误

鉴于上述情况,我认为代码部分正在运行 - 我成功地将该字段存储在 Firestore 中并触发了云函数。我认为问题在于触发器电子邮件扩展程序或 Gmail 设置中的配置。

现在,我在谷歌搜索(在 firebase 中使用 GMAIL 和 Trigger 电子邮件扩展名)时没有发现这方面有多大用处,这暗示我可能开始错误,也许应该考虑其他选项?如果不是这种情况,那么我可以检查哪些其他设置?我确实在 gmail 中为自己创建了一个应用密码,但我不知道我应该在触发器电子邮件扩展中的哪里提交它。我是否还需要在身份验证模板配置中将 gmail 配置为 SMTP 服务器?

解决方法

分解错误信息,

  • queryA - 提交 DNS A 记录查询
  • EREFUSED - 被拒绝(抛出错误 - 例如未找到)
  • smtp.gmail.net - 查询主题

简而言之,就是说找不到网络服务器 smtp.gmail.net,因为它没有注册。

基于 sending email using Gmail 的文档,

  • 如果您使用的是 Google Workspace,则应使用 smtp-relay.gmail.com(每天 1 万条消息限制)
  • 如果您是 Gmail 的普通用户,则应使用 smtp.gmail.com(每日邮件限制为 2k)

如果您打算超过这些限制,则应考虑使用第三方邮寄服务。