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

how to send a email in firebase https function through own smtp

我正面临一些奇怪的(对我来说)行为。
我正在尝试在我的 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 凭据测试了已部署的功能,并且可以正常工作。

文档说,我可以使用自定义 smtp,而它的端口不是 25。
如果有人能阐明这一点,我将不胜感激。

您需要加入 "Flame" 或 "Blaze" 定价计划。

事实上,免费 "Spark" 计划 "allows outbound network requests only to Google-owned services"。请参阅 https://firebase.google.com/pricing/(将鼠标悬停在 "Cloud Functions" 标题后面的问号上)

由于您的 SMTP 服务器不是 Google-owned 服务,您需要切换到 "Flame" 或 "Blaze" 计划。