通过 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 项目上的节点发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

firebase 功能电子邮件发送问题

将传入的电子邮件通过管道传输到 Windows IIS SMTP 上的脚本?

通过 Firebase 函数发送电子邮件时出现 Firebase SendGrid 错误 - 错误:错误请求

通过firebase云功能发送电子邮件

在我点击屏幕上的任意位置之前,Firebase 登录承诺不会解决

Firebase 身份验证:通过特殊电子邮件地址(例如 *@gmx.at)发送但未收到的电子邮件