ETIMEDOUT使用Nodejs Openshift应用程序中的nodemailer连接错误

时间:2015-07-17 10:04:25

标签: node.js openshift nodemailer

我在我的node.js中使用nodemailer模块遇到一些问题。在Openshift中使用单一设备不可扩展的应用程序。正如documentation建议的那样,我初始化了transporter对象并使用了sendMail函数。我的代码的简化版本是

var transporter = nodemailer.createTransport({
    service: 'Gmail',
    auth: {
        user: 'my.mail@gmail.com',
        pass: 'mypassword'
    }
});

var mail = {
    from: 'my.mail@gmail.com',
    to: 'test@mydomain.com',
    subject: 'Test mail',
    html: 'Test mail'
};

transporter.sendMail(mail, function(error, info) {
    if(error){
        console.log(error);
    }else{
        console.log(info);
    }
});

当我在本地计算机上运行时,此代码可以正常工作,但是当我尝试在服务器上执行它时出现ETIMEDOUT错误,就像应用程序无法连接到smtp服务器一样。 / p>

{ [Error: connect ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'connect' }

我尝试增加超时连接参数,但结果相同。

var transporter = nodemailer.createTransport({
    service: 'Gmail',
    auth: {
        user: 'my.mail@gmail.com',
        pass: 'mypassword'
    },
    connectionTimeout: 5 * 60 * 1000, // 5 min
});

我是否缺少任何防火墙或默认的Openshift设置或环境变量?

3 个答案:

答案 0 :(得分:6)

我还要再做一些测试,但我想我弄清楚了问题是什么。通过用户名和密码进行身份验证是Gmail的一种不安全的身份验证方法。正如Nodemailer文档中所写

  

尽管Gmail是开始发送电子邮件的最快方式,但除非您使用OAuth2身份验证,否则它绝不是一个更好的解决方案。 Gmail希望用户成为真正的用户而不是机器人,因此它会针对每次登录尝试运行大量启发式操作,并阻止任何看起来可疑的内容以防止用户进行帐户劫持尝试。例如,如果您的服务器位于另一个地理位置,您可能会遇到麻烦 - 一切都在您的开发计算机上运行,​​但邮件在生产中被阻止。

我使用XOAuth2升级了我的授权方法,并在此guide中进行了解释,现在邮件已正确发送。

答案 1 :(得分:0)

如果您尝试从本地主机运行它。

在auth选项之后添加以下代码行

 tls:{
        rejectUnauthorized:false
    }

它可以工作,但是您可以考虑按照@ matt.kiwi的建议升级到XOAuth2

答案 2 :(得分:0)

就我而言,问题出在端口上 我已将端口从 25 更改为 2525,并且成功了。

尝试更改端口

相关问题