【问题标题】:Nodemailer queryA EREFUSED localhost when using Firebase Cloud Functions使用 Firebase Cloud Functions 时 Nodemailer 查询 A EREFUSED localhost
【发布时间】:2020-04-08 00:12:02
【问题描述】:

每当在 Firebase 数据库中创建新订单时,我都会尝试向管理员帐户发送电子邮件。我为此使用 Cloud Functions 和 Nodemailer,但出现以下错误:

错误:queryA EREFUSED localhost 在 QueryReqWrap.onresolve [as oncomplete] (dns.js:213:19)

这是代码:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const nodemailer = require('nodemailer');
admin.initializeApp();

/**
* Here we're using Gmail to send 
*/
let transporter = nodemailer.createTransport({
    service: 'smtp.gmail.com',
    port: 465,
    secure: true,
    auth: {
        user: 'myemail@gmail.com',
        pass: 'mypass'
    }
});

exports.sendMail = functions.database.ref('/Order/{orderId}').onCreate((snapshot, context) =>{
    const dest = 'destination@gmail.com';

    const mailOptions = {
        from: 'Risal Fajar <noreply@bukakata.com>',
        to: dest,
        subject: 'I\'M A PICKLE!!!',
        html: `<p style="font-size: 16px;">Pickle Riiiiiiiiiiiiiiiick!!</p>
            <br />
            <img src="https://images.prod.meredith.com/product/fc8754735c8a9b4aebb786278e7265a5/1538025388228/l/rick-and-morty-pickle-rick-sticker" />
        `
    };

    // returning result
    return transporter.sendMail(mailOptions).then(() => {
        console.log('Mail sent to ', dest);
    });
});

我不知道为什么错误显示 localhost 即使我已经输入 smtp.gmail.com

编辑:我添加了 transport.verify() 这就是结果

{ 错误:queryA EREFUSED localhost 在 QueryReqWrap.onresolve [as oncomplete] (dns.js:213:19) errno: 'EREFUSED', 代码:'EDNS', 系统调用:'queryA', 主机名:'本地主机', 命令:'CONN' }

【问题讨论】:

    标签: node.js firebase google-cloud-functions nodemailer


    【解决方案1】:

    可以查看文档:https://nodemailer.com/usage/using-gmail/

    gmail还有一个问题,但是关于这个问题,和我一样, 我收到了这个错误:

    错误:{ 错误:queryA EREFUSED smtp.163.com 在 QueryReqWrap.onresolve [as oncomplete] (dns.js:199:19)

    但是当我尝试使用 termux 在我的手机上运行相同的代码时,它可以工作,也许免费的 smtp 服务太糟糕了。

    【讨论】:

      【解决方案2】:

      已修复

      我通过将传输器配置(更改服务名称)更改为:

      let transporter = nodemailer.createTransport({
          service: 'gmail',
          port: 465,
          secure: true,
          auth: {
              user: 'myemail@gmail.com',
              pass: 'mypass'
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-04
        • 2020-10-22
        • 2018-08-18
        • 1970-01-01
        • 2019-04-16
        • 2021-06-15
        • 2020-01-03
        • 2020-02-21
        相关资源
        最近更新 更多