问题描述
我安装了扩展程序以在数据库写入时触发电子邮件。我的网站有一个简单的“联系我”表单,我不希望有很多流量,所以我想设置一个简单的通知电子邮件系统。
但是,我很难正确地进行配置。
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)
如果您打算超过这些限制,则应考虑使用第三方邮寄服务。