使用云功能时,Nodemailer和AWS SES EREFUSED错误

时间:2019-08-30 15:18:55

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

我正在构建具有Firebase和云功能的Web应用程序。我有一个云功能,每次新用户要订阅时都会创建一个验证码,我需要通过电子邮件发送该验证码。我试图将nodemailer与AWS Simple Email Sender结合使用。我有适用于AWS SES的SMTP凭证,并且此代码在我的本地主机上可以正常运行,但是当我将此云函数部署到Firebase时我无法正常工作,并且出现此错误。

{ Error: queryA EREFUSED email-smtp.us-east-1.amazonaws.com
    at QueryReqWrap.onresolve [as oncomplete] (dns.js:213:19)
  errno: 'EREFUSED',
  code: 'EDNS',
  syscall: 'queryA',
  hostname: 'email-smtp.us-east-1.amazonaws.com',
  command: 'CONN' }

我正在使用节点邮件程序示例。

const nodemailer = require('nodemailer');

async function main() {

    let transporter = nodemailer.createTransport({
        host: 'email-smtp.us-east-1.amazonaws.com',
        port: 465,
        secure: true, 
        auth: {
            user: 'thisisfake@fake.com', 
            pass: 'thisisfake' 
        }
    });

    let info = await transporter.sendMail({
        from: '"Fred Foo ?" <foo@example.com>', 
        to: 'bar@example.com, baz@example.com', 
        subject: 'Hello ✔', // Subject line
        text: 'Hello world?', // plain text body
        html: '<b>Hello world?</b>' // html body
    });

    console.log('Message sent: %s', info.messageId);

    console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));

}

main().catch(console.error);

1 个答案:

答案 0 :(得分:0)

我的假设是您将Cloud Functions的免费(“ spark”)层用于Firebase。这类功能不允许Google以外的网络连接。 为了解决您的问题,您需要使用Blaze plan,在允许连接的地方以及“随用随付”的地方。即使使用Blaze计划,您也可以免费使用Spark计划,该计划可以合理程度地进行开发和使用,而无需任何费用。