我正面临一些奇怪的行为(对我来说)。
我正在尝试在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。
如果有人可以阐明这一点,我将不胜感激。
答案 0 :(得分:1)
您需要加入“火焰”或“烈火”定价计划。
事实上,免费的“ Spark”计划“仅允许对Google拥有的服务的出站网络请求”。请参见https://firebase.google.com/pricing/(将鼠标悬停在“云函数”标题之后的问号上)
由于您的SMTP服务器不是Google拥有的服务,因此您需要切换到“火焰”或“大火”计划。