使用 Firebase Cloud Functions 时 Nodemailer 查询 A EREFUSED localhost

Posted

技术标签:

【中文标题】使用 Firebase Cloud Functions 时 Nodemailer 查询 A EREFUSED localhost【英文标题】:Nodemailer queryA EREFUSED localhost when using Firebase Cloud Functions 【发布时间】: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'

【问题讨论】:

【参考方案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'
    
);

【讨论】:

以上是关于使用 Firebase Cloud Functions 时 Nodemailer 查询 A EREFUSED localhost的主要内容,如果未能解决你的问题,请参考以下文章

从 Firebase 功能使用 Cloud SQL 代理

如何在不使用 Firebase Cloud Messaging 控制台的情况下向 Flutter/Firebase Cloud Messaging 上的特定设备发送通知 [重复]

使用 spark(免费)firebase 计划使用 Cloud Functions for Firebase 导出 excel

在 iOS 中为 Firebase 使用 Cloud Functions

使用 Firebase Cloud Functions 导出的问题

如何使用 Cloud Functions for Firebase 更新 Firebase 实时数据库中的值