mat*_*iwi 5 node.js openshift nodemailer
我在我的node.js中使用nodemailer模块遇到一些问题.在Openshift中使用单一设备不可扩展的应用程序.正如文档所建议的那样,我初始化了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);
}
});
Run Code Online (Sandbox Code Playgroud)
当我在本地计算机上运行时,此代码可以正常工作,但是当我尝试在服务器上执行它时,我收到ETIMEDOUT错误,就好像应用程序无法连接到smtp服务器一样.
{ [Error: connect ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'connect' }
Run Code Online (Sandbox Code Playgroud)
我试图增加超时连接参数,但我得到了相同的结果.
var transporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: 'my.mail@gmail.com',
pass: 'mypassword'
},
connectionTimeout: 5 * 60 * 1000, // 5 min
});
Run Code Online (Sandbox Code Playgroud)
是否缺少防火墙或默认的Openshift设置或环境变量?
我还要进行一些测试,但我想我弄清楚了问题是什么.通过用户名和密码进行身份验证是Gmail的一种不安全的身份验证方法.正如Nodemailer文档中所写
尽管Gmail是开始发送电子邮件的最快方式,但除非您使用OAuth2身份验证,否则它绝不是一个更好的解决方案.Gmail希望用户成为真正的用户而不是机器人,因此它会针对每次登录尝试运行大量启发式操作,并阻止任何看起来可疑的内容以防止用户进行帐户劫持尝试.例如,如果您的服务器位于另一个地理位置,您可能会遇到麻烦 - 一切都在您的开发计算机上运行,但邮件在生产中被阻止.
我使用XOAuth2升级了我的授权方法,如本指南中所述,现在邮件已正确发送.