通过 firebase 项目上的节点发送电子邮件
Posted
技术标签:
【中文标题】通过 firebase 项目上的节点发送电子邮件【英文标题】:Sending emails via node on a firebase project 【发布时间】:2018-02-11 10:46:33 【问题描述】:我正在处理我在 node 中编写的谷歌操作,并正在部署到 firebase 以通过 API.AI 上定义的意图进行交互。
我想实现一个功能,在激活特定意图时向特定地址发送电子邮件。我尝试过使用 nodemail 和 sendmail 包,但是在使用它们进行部署之后,当调用正确的意图时,它们似乎没有发送电子邮件。我不确定问题是否是我编码错误(鉴于我的经验不足,这是一种明显的可能性),或者在 firebase 部署中指定这些包是否存在一些固有问题。我已经能够通过简单地从其中返回对 API.AI 的响应来验证我是否进入了执行sendmail
的代码;如果我能够访问 firebase 或 API.AI 日志,我不确定如何。 API.AI 显示 JSON 响应,但据我所知仅此而已。
这是一些简化的代码(仅相关部分):
const sendmail = require('sendmail')();
const getSuggestion = app =>
const rawInput = app.getRawInput();
sendmail(
from: 'no-reply@yourdomain.com',
to: 'myemail@gmail.com',
subject: 'test sendmail',
html: rawInput,
, function(err, reply)
console.log(err && err.stack);
console.dir(reply);
return app.ask('You said ' + rawInput + '. Do you have any further input?');
);
;
【问题讨论】:
您看到错误了吗?您是否有一些无法按您期望的方式工作的最小代码?您在使用 Cloud Functions for Firebase 吗? 我在 API.AI 接口或 JSON 响应中没有看到任何类型的错误。我在答案中扔了一些代码。我读到有一种方法可以使用 Cloud Functions 发送电子邮件,但我希望绕过它并做一些非常简单的事情。 我实际上最终使用 Cloud Functions 完成了这项工作。我认为使用 firebase 部署中嵌入的常规节点包是不可能的,但显然我可能错了。 【参考方案1】:这是一个使用 Cloud Functions for Firebase(又名 Firebase Functions)、nodemailer 和 Gmail 的示例:https://github.com/firebase/functions-samples/tree/master/quickstarts/email-users
API.AI 在 webhook 调用失败时在 API.AI 的模拟器中指示 206,因为即使 webhook 调用失败,API.AI 通常也会发送一些内容。如果您在单击“显示 JSON”后看到 206,请检查您的 webhook(在本例中为 Firebase)日志以进行调试。以下是一些截图:
单击“SHOW JSON”会创建以下弹出窗口:
此206 partial_content Webhook call failed. Error: Webhook response was empty.
表示您的 webhook 存在某种错误,可能是 500 错误、无法正确格式化的成功响应,或者您输入的 webhook 的 HTTPS URL 有误。
【讨论】:
以上是关于通过 firebase 项目上的节点发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
将传入的电子邮件通过管道传输到 Windows IIS SMTP 上的脚本?
通过 Firebase 函数发送电子邮件时出现 Firebase SendGrid 错误 - 错误:错误请求