Firebase云功能,无需AUTH发送邮件

时间:2018-11-26 13:05:24

标签: firebase google-cloud-functions

我的网站托管在Firebase上,我希望从no-reply@mydomain.com之类的电子邮件发送给收件人。我是否被迫创建此电子邮件并提供SMTP连接的登录信息,还是有一种方法可以发送邮件而无需实际创建邮件(没有AUTH凭据),就像在PHP中mail()一样。

目前,我正在使用nodemailer从我的GMail发送邮件:

var transporter = nodemailer.createTransport('smtps://USER@gmail.com:PASSWORD@smtp.gmail.com');

exports.sendMail = functions.https.onRequest((req, res) => {
    var mailOptions = {
        to: 'someone@gmail.com',
        subject: 'Test Mail',
        html: 'Testing the Mail'
    }
    transporter.sendMail(mailOptions, function (err, response) {
        if (err) {
            res.end('Mail not sent');
        } else {
            res.end('Mail sent');
        }
    });
});

有没有出路?感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

这可以使用Sendgrid轻松完成,如下所示。以下是node.js库文档:https://github.com/sendgrid/sendgrid-nodejs

Sendgrid是Firebase推荐的选项,请参见https://github.com/firebase/functions-samples/tree/Node-8/quickstarts/email-users,其内容如下:

  

如果您打算发送大量电子邮件,则应使用   专业的电子邮件发送平台,例如Sendgrid,Mailjet或   Mailgun。

有一个“慷慨的”免费计划,每月有12.000封免费电子邮件,请参阅https://console.cloud.google.com/marketplace/details/sendgrid-app/sendgrid-email

const functions = require('firebase-functions');
const admin = require('firebase-admin');

......

const sgMail = require('@sendgrid/mail');
const sengridkey =
  'SG.............................................';
sgMail.setApiKey(sengridkey);

......

exports.sendMail = functions.https.onRequest((req, res) => {

  const msg = {
    to: 'someone@gmail.com',
    from: 'originator@gmail.com',     //  <-  HERE, set the from
    subject: 'Test Mail',
    html: '<h1>Test Mail</h1>',
  };

   sgMail
     .send(msg)
     .then(() => {
         res.status(200).send('Mail sent');
      })
      .catch(err => {
         console.error('ERROR:', err);
         res.status(500).send('Mail not sent: ' + err);
      });

});

请注意,您需要使用“ Flame”或“ Blaze” Firebase定价计划。

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

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