如何通过自己的smtp在firebase https函数中发送电子邮件

时间:2018-12-24 12:00:01

标签: firebase smtp google-cloud-functions nodemailer

我正面临一些奇怪的行为(对我来说)。
我正在尝试在Firebase应用中创建反馈表格
这是一种简单的表单,当用户提交时应该会向我发送电子邮件。

我在Firebase应用程序中创建了onCall函数。

当我通过firebase experimental:functions:shell在本地对其进行测试时,我收到了一封电子邮件,但是部署该邮件总是失败,并显示以下内容:

{
code: "ECONNECTION"
command: "CONN"
errno: "ENOTFOUND"
}

功能主体:

function feedbacks(data)
{

    let email = createEmail(data);

    let transport = nodemailer.createTransport({
        host: 'smtp.yandex.ru',
        port: 465,
        secure: true,
        // tried this one, but without success too
        //tls:{ secureProtocol: "TLSv1_method" },
        auth: {
            user: 'xxxx@xxxx',
            pass: 'xxxx'
        }
    });

    return new Promise((resolve, reject) => {
        transport.sendMail(email, err => {
            if (err == null) {
                resolve(true);
            } else {
                reject(new functions.https.HttpsError('internal', 'failed', err))
            }
        });
    });

}

由于某些未知的firebase限制,似乎已部署的功能无法访问smtp服务器。

编辑:
我用gmail smtp和我在firebase中使用的gmail凭据测试了已部署的功能,并且可以正常工作。

文档说,我可以在端口不为25的情况下使用自定义smtp。
如果有人可以阐明这一点,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您需要加入“火焰”或“烈火”定价计划。

事实上,免费的“ Spark”计划“仅允许对Google拥有的服务的出站网络请求”。请参见https://firebase.google.com/pricing/(将鼠标悬停在“云函数”标题之后的问号上)

由于您的SMTP服务器不是Google拥有的服务,因此您需要切换到“火焰”或“大火”计划。