在 Firebase 云功能中通过 nodemailer 发送邮件是不是需要计费帐户?
Posted
技术标签:
【中文标题】在 Firebase 云功能中通过 nodemailer 发送邮件是不是需要计费帐户?【英文标题】:Does sending mail via nodemailer in firebase cloud functions require billing account?在 Firebase 云功能中通过 nodemailer 发送邮件是否需要计费帐户? 【发布时间】:2019-01-07 23:15:43 【问题描述】:我部署了一个 Firebase 云功能,用于在用户首次登录时发送欢迎邮件。 在firebase控制台中,在firebase云函数日志消息中,我在调用函数时看到了这个错误消息。
错误信息:
未配置结算帐号。外部网络无法访问,配额受到严格限制。配置结算帐号以移除这些限制
难道不能使用 firebase 云功能免费发送电子邮件吗?如果可能,请说明程序。 (可能带有示例代码)
编辑 1: 1.我目前正在使用nodemailer发送邮件。 2. 我使用 Gmail 作为邮件服务。
【问题讨论】:
nodemailer 包本身无关紧要。但是,如果您将其配置为调用非 Google 邮件服务,则您需要使用付费计划。注意消息是在任何情况下都会打印的警告;看到不一定有问题。 @FrankvanPuffelen 如何调用 Google 邮件服务?任何参考都会很棒。 如果您使用 Cloud Functions 提供的非 Google 服务,您的项目需要使用付费计划。免费计划拒绝调用 3rd 方服务,以防止滥用云功能作为这些服务的 DoS 媒介。如果您尝试使用 gmail 并且在部署代码时遇到问题,请编辑您的问题以包含 minimal complete code that reproduces the problem。 你能弄明白吗?我也在使用 nodemailer 并配置了 var transporter = nodemailer.createTransport( service: 'gmail', auth: user: 'xyz@gmail.com', pass: 'xxxxxxxxx' );但仍然收到结算错误 【参考方案1】:Does sending mail via nodemailer in firebase cloud functions require billing account?
不,您不需要计费帐户即可使用云功能通过 nodmailer 发送电子邮件。
我在云功能中遇到了与您一样的计费错误。而且我已经完成了 2 个简单的步骤,它就消失了。
1. 在您的 gmail 帐户设置中,将Less secure app access 启用为开启
2.也转到此链接并点击继续https://accounts.google.com/DisplayUnlockCaptcha。
完成以上2个步骤后,计费错误消失,云功能发送邮件成功。
这是我的nodejs代码供您参考:
const functions = require('firebase-functions');
const nodemailer = require('nodemailer');
const mailTransport = nodemailer.createTransport(
service: 'gmail',
auth:
user: 'xyzz@gmail.com',
pass: '123'
,
);
exports.sendMail = functions.https.onRequest(async (req, res) =>
const mailOptions =
from: '"Test." <noreply@firebase.com>',
to: 'xyz@gmail.com'
;
// Building Email message.
mailOptions.subject = 'Thanks and Welcome!'
mailOptions.text = 'Thanks you for subscribing to our newsletter. You will receive our next weekly newsletter.'
try
await mailTransport.sendMail(mailOptions);
console.log('subscription confirmation email sent to');
return res.send('Sended');
catch (error)
console.error('There was an error while sending the email:', error);
return res.send(error.toString());
);
您可以在部署之前进行本地测试
firebase serve --only functions
你会得到一个链接 http://localhost:5000/project-name/us-central1/sendMail;将其粘贴到浏览器中,云功能将运行。如果有任何错误,它将显示在浏览器和控制台/powershell中
【讨论】:
以上是关于在 Firebase 云功能中通过 nodemailer 发送邮件是不是需要计费帐户?的主要内容,如果未能解决你的问题,请参考以下文章
在android中通过firebase进行Facebook登录时身份验证失败
如何在swift ios中通过键值读取子数据或过滤firebase数据
如何在 Android 中通过 Firebase Childs 按升序对列表进行排序