2015-02-18 4 views
6

У меня проблема с Nodemailer на Heroku, и я был бы очень признателен вам за вашу помощь.Проблема с 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 

Мы можем видеть, что происходит сбой на линии 918 «client.js» с ошибкой :

TypeError: Невозможно назначить только для свойства «reconnectCount» только для чтения.

Зачем пытаться присвоить 'false' 'reconnectCount'?

Мой код очень прост:

app.locals.smtpTransport = nodemailer.createTransport ('SMTP', { служба: 'Gmail', аутентификации: { пользователь: "[email protected]" , проход: "pass123" } }); Затем я использую код для отправки почты, как:

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

Этот код работает на моем промежуточном экземпляре Heroku так, что не делает смысл для меня.

Я вошел запрос в службу поддержки с Heroku и каких-либо указаний, которые вы можете предоставить перейду на них.

спасибо за вашу помощь.

ответ

11

Я только что получил следующий ответ назад от Nodemailer:

Возможно, вы используете Nodemailer в iojs. Только последняя версия Nodemailer является suported в узле 0,12 и iojs, так что вы должны либо обновить или исправить линии 918 себя так:

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

Настройка свойств для булевых значений было разрешено в ES5, но iojs работает ES6 и попытка установить свойство в строгом режиме ES6 вызывает ошибку.

Я думаю, что исправил это путем явной установки версии node.js в файл моего пакета в более старую версию, использующую ES5.

Это устранило мою проблему. Извлеченный урок состоит в том, чтобы всегда устанавливать версию nodejs в файл пакета, иначе Heroku использует последнюю версию и может быть несовместим с вашими модулями.

Большое спасибо Nodemailer, они вернулись ко мне очень быстро с отличным откликом.

Надеюсь, это поможет кому-то еще.

Спасибо.

+1

Это полезно знать разработчикам, которые устанавливают платформу ведения блога Ghost. После обновления Nodejs до версии 0.12, предположим, что вы используете версию Ghost до 0.4, вы получите эту ошибку в следующем файле на этом номере линии в зависимости от вашего номера версии Ghost и версии nodemailer: 'ghost/node_modules/nodemailer /node_modules/simplesmtp/lib/client.js: 828'. Я отредактировал эту строку соответственно, и мой блог pre v.0.4 Ghost теперь может отправлять электронные письма с помощью Nodejs v.0.12. – surfbuds

8

Я работаю с метеоритом на установке ubuntu, и я получаю подобные ошибки после обновления до Node.js v12.0 и установки модуля паролей учетных записей Meteor.

Оказалось, что Meteor еще не приступил к разработке по совместимости с Node.js v12.0, новые двоичные файлы, установленные с узлом на моем сервере, несовместимы с двоичными файлами, связанными с моим развертыванием, поэтому я получал подобные ошибки. В этом случае проблема была не в Nodemailer, а в simplesmtp.

Как было предложено here, решение заключалось в том, чтобы удалить прилагаемую версию и использовать npm для установки локальной локальной версии.

Итак, в моем сценарии развертывания после создания пакета я добавил следующие строки.

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 

Это проще, чем изменение источника, особенно если у вас есть сценарий развертывания.

+1

Обратите внимание, что в Meteor 1.3 (и, возможно, выше) структура файла изменилась, и 'email' теперь находится в' bundle/programs/server/npm/node_modules/meteor/email'. –

+0

npm-bcrypt также перемещен. Хотя его легко найти и удалить, я не знаю, куда его переустановить ... –

Смежные вопросы