Heroku与NodeMailer问题

我在Heroku上遇到与Nodemailer有关的问题,我非常感谢您的帮助。

以前版本的我的应用程序曾经在Heroku上工作没有问题,当我回滚到该版本,它仍然正常工作。 在最新版本的应用程序中,我没有更改代码来访问Nodemailer,所以这对我来说没有任何意义。

nodemailer的版本是:0.6.5

这里是日志消息:

2015-02-18T04:29:57.730815+00:00 app[web.2]: POST /employer/53f44e3df4f8150200554eb7/job/ 200 32ms - 581b 2015-02-18T04:29:58.045066+00:00 app[web.2]: /app/node_modules/nodemailer/node_modules/simplesmtp/lib/client.js:918 2015-02-18T04:29:58.045069+00:00 app[web.2]: this._xoauth2.reconnectCount = 0; 2015-02-18T04:29:58.045070+00:00 app[web.2]: ^ 2015-02-18T04:29:58.041300+00:00 app[web.2]: Exit callback being invoked 2015-02-18T04:29:58.045072+00:00 app[web.2]: TypeError: Cannot assign to read only property 'reconnectCount' of false 2015-02-18T04:29:58.045073+00:00 app[web.2]: at SMTPClient._actionAUTHComplete (/app/node_modules/nodemailer/node_modules/simplesmtp/lib/client.js:918:34) 2015-02-18T04:29:58.045075+00:00 app[web.2]: at SMTPClient._onData (/app/node_modules/nodemailer/node_modules/simplesmtp/lib/client.js:352:29) 2015-02-18T04:29:58.045076+00:00 app[web.2]: at TLSSocket.emit (events.js:107:17) 2015-02-18T04:29:58.045078+00:00 app[web.2]: at readableAddChunk (_stream_readable.js:163:16) 2015-02-18T04:29:58.045079+00:00 app[web.2]: at TLSSocket.Readable.push (_stream_readable.js:126:10) 2015-02-18T04:29:58.045080+00:00 app[web.2]: at TCP.onread (net.js:529:20) 2015-02-18T04:29:58.769185+00:00 heroku[web.2]: Process exited with status 1 2015-02-18T04:29:58.780771+00:00 heroku[web.2]: State changed from up to crashed 2015-02-18T04:29:58.780771+00:00 heroku[web.2]: State changed from crashed to starting 2015-02-18T04:30:00.371578+00:00 heroku[web.2]: Starting process with command `node app.js` 2015-02-18T04:30:01.904015+00:00 app[web.2]: Detected 512 MB available memory, 512 MB limit per process (WEB_MEMORY) 2015-02-18T04:30:01.904115+00:00 app[web.2]: Recommending WEB_CONCURRENCY=1 2015-02-18T04:30:02.288471+00:00 app[web.2]: Failed to load c++ bson extension, using pure JS version 2015-02-18T04:30:02.652326+00:00 app[web.2]: Started in PROD mode 2015-02-18T04:30:02.815284+00:00 app[web.2]: Express server listening on port 9622 2015-02-18T04:30:03.291115+00:00 heroku[web.2]: State changed from starting to up 

我们可以看到它在'client.js'的第918行失败,错误为:

TypeError:不能分配给只读属性'reconnectCount'为false。

为什么会试图将“false”分配给“reconnectCount”?

我的代码非常简单:

app.locals.smtpTransport = nodemailer.createTransport('SMTP',{service:'Gmail',auth:{user:“example@gmail.com”,pass:“pass123”}}); 然后我使用代码来发送邮件,如:

req.app.locals.smtpTransport.sendMail(……

这段代码适用于Heroku的暂存实例,所以对我来说没有任何意义。

我已经使用Herokulogin了一个支持请求,任何可以提供的指导都会传递给他们。

非常感谢你的帮助。

我刚收到来自Nodemailer的以下响应:

您可能正在iojs中运行Nodemailer。 在节点0.12和iojs中只有最新版本的Nodemailer被支持,所以你应该像这样自己升级或修复918行:

 if(this._xoauth2){ this._xoauth2.reconnectCount = 0; } 

在ES5中允许将属性设置为布尔值,但iojs运行ES6并尝试在ES6严格模式下设置属性时会引发错误。

我想我通过明确地将我的包文件中的node.js版本设置为使用ES5的旧版本来解决了这个问题。

这已经解决了我的问题。 获得的教训是始终在软件包文件中设置nodejs版本,否则Heroku将使用最新版本,并且可能与您的模块不兼容。

非常感谢Nodemailer,他们以超快的速度回复了我。

希望这会帮助别人。

谢谢。

我在ubuntu安装上使用meteor,在升级到Node.js v12.0并安装Meteor的账户密码模块后,我遇到了类似的错误。

原来,由于Meteor还没有开始与Node.js v12.0兼容的开发,我的服务器上安装了Node的新的二进制文件与我的部署捆绑的二进制文件不兼容,所以我得到了类似的错误。 在这种情况下,问题不在于Nodemailer,而在于simplesmtp。

正如这里所build议的,解决scheme是删除捆绑的版本,并使用npm来安装服务器本地版本。

所以在我的部署脚本中,我在创build捆绑包之后添加了以下几行。

 cd bundle/programs/server/ sudo rm -R ./npm/npm-bcrypt/node_modules/bcrypt sudo npm install bcrypt sudo rm -R ./npm/email/node_modules/simplesmtp sudo npm install simplesmtp 

这比修改源代码更容易,特别是如果您有脚本部署。