【问题标题】:How can I use nodemailer with Cloud Functions for Firebase?如何将 nodemailer 与 Cloud Functions for Firebase 一起使用?
【发布时间】:2017-09-04 12:04:20
【问题描述】:

我正在尝试在 Cloud Functions for Firebase 中使用 nodemailer,但不断收到错误,似乎是无法访问或找到 smpt 服务器。我试过 gmail、outlook 和正常的托管 smpt 服务。它在我的本地节点服务器上运行良好。

这是我在尝试发送电子邮件失败时收到的记录错误:

{
  Error: getaddrinfoENOTFOUNDsmtp-mail.outlook.comsmtp-mail.outlook.com: 587aterrnoException(dns.js: 28: 10)atGetAddrInfoReqWrap.onlookup[
    asoncomplete
  ](dns.js: 76: 26)code: 'ECONNECTION',
  errno: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'smtp-mail.outlook.com',
  host: 'smtp-mail.outlook.com',
  port: '587',
  command: 'CONN'
}

【问题讨论】:

  • 您在其中运行该功能的项目是付费计划吗?免费/Spark 计划中的项目不能调用外部服务(以防止潜在的滥用)。
  • @FrankvanPuffelen 它在免费/Spark 上,所以这可能是问题所在。可惜它不适用于gmail。

标签: firebase google-cloud-functions nodemailer firebase-cloud-functions


【解决方案1】:

我创建了一个云功能(http 事件),通过以下方式从我网站的联系表单部分发送电子邮件:

const functions = require('firebase-functions');
const nodemailer = require('nodemailer');
const rp = require('request-promise');

//google account credentials used to send email
const mailTransport = nodemailer.createTransport(
    `smtps://user@domain.com:password@smtp.gmail.com`);

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

  //recaptcha validation
  rp({
        uri: 'https://recaptcha.google.com/recaptcha/api/siteverify',
        method: 'POST',
        formData: {
            secret: 'your_secret_key',
            response: req.body['g-recaptcha-response']
        },
        json: true
    }).then(result => {
        if (result.success) {
            sendEmail('recipient@gmail.com', req.body).then(()=> { 
              res.status(200).send(true);
            });
        }
        else {
            res.status(500).send("Recaptcha failed.")
        }
    }).catch(reason => {
        res.status(500).send("Recaptcha req failed.")
    })

});

// Send email function
function sendEmail(email, body) {
  const mailOptions = {
    from: `<noreply@domain.com>`,
    to: email
  };
  // hmtl message constructions
  mailOptions.subject = 'contact form message';
  mailOptions.html = `<p><b>Name: </b>${body.rsName}</p>
                      <p><b>Email: </b>${body.rsEmail}</p>
                      <p><b>Subject: </b>${body.rsSubject}</p>
                      <p><b>Message: </b>${body.rsMessage}</p>`;
  return mailTransport.sendMail(mailOptions);
}

【讨论】:

猜你喜欢
  • 2018-01-17
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
  • 2017-09-19
  • 2020-04-08
  • 2019-05-18
  • 2017-08-24
  • 2023-01-04
相关资源
最近更新 更多