在 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 按升序对列表进行排序

Firebase 查询以在 iOS swift 中通过用户 ID 获取特定用户

使用firebase云功能在特定时间发送FCM通知[重复]

在Firebase云功能中等待地图内的快照值