2015-02-18 28 views
6

Mam problem z Nodemailer na Heroku i byłbym wdzięczny za twoją pomoc.Problem Heroku z NodeMailerem

Poprzednia wersja mojej aplikacji była używana do pracy na Heroku bez problemu, a po powrocie do tej wersji nadal działa dobrze. W najnowszej wersji aplikacji nie wprowadziłem żadnych zmian w kodzie dostępu do Nodemailera, więc nie ma to dla mnie większego sensu.

Wersja nodemailer jest: 0.6.5

Oto wiadomość dziennika:

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 

Widzimy, że zawodzi on line 918 'client.js' z błędem :

TypeError: Nie można przypisać do właściwości tylko do odczytu "reconnectCount" wartości false.

Dlaczego miałoby to być próbą przypisania "false" do "reconnectCount"?

Moje kodu jest bardzo prosty:

app.locals.smtpTransport = nodemailer.createTransport ('SMTP', { usług: 'Gmail', auth: { użytkownik: "[email protected]" , pass: "pass123" } }); I wtedy użyć kodu do wysyłania poczty jak:

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

ten kod działa na moim instancji inscenizacji Heroku tak, że nie robi dla mnie sens.

mam zalogowany prośbę o pomoc z Heroku oraz wszelkich wskazówek, które można dostarczyć będę przechodzą na nich.

Dzięki bardzo za pomoc.

Odpowiedz

11

właśnie dostałem następującą odpowiedź wrócił od Nodemailera:

Prawdopodobnie używasz Nodemailera w iojs. Tylko najnowsza wersja Nodemailer jest suported w węźle 0,12 i iojs, więc należy albo zaktualizować lub naprawić Linia 918 się tak:

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

właściwości ustawienia do wartości logicznych pozostawiono w ES5 ale iojs biegnie ES6 i próba ustawienia właściwości w trybie ścisłym ES6 powoduje błąd.

Myślę, że naprawiłem to przez jawne ustawienie wersji node.js w moim pliku pakietu do starszej wersji, która używa ES5.

Naprawiło to mój problem. Lekcja jest taka, że ​​zawsze należy ustawić wersję nodejs w pliku pakietu, w przeciwnym razie Heroku używa najnowszej wersji i może być niekompatybilne z twoimi modułami.

Wielkie dzięki dla Nodemailera, wrócili do mnie super szybko z wielką odpowiedzią.

Mam nadzieję, że to pomoże komuś innemu.

Dzięki.

+1

Jest to przydatne dla programistów, którzy instalują platformę blogów Ghost. Po uaktualnieniu wersji Nodejs do wersji 0.12, zakładając, że korzystasz z wersji Ghost z wersji 0.4, otrzymasz ten błąd w poniższym pliku przy tym numerze linii w zależności od numeru wersji Ghost i wersji nodemailer: 'ghost/node_modules/nodemailer /node_modules/simplesmtp/lib/client.js: 828'. Poprawiłem tę linię, a mój blog Ghost pre v.0.4 może teraz wysyłać e-maile z Nodejs v.0.12. – surfbuds

8

Pracuję z meteorem na instalacji Ubuntu i pojawiły się podobne błędy po aktualizacji do Node.js v12.0 i instalacji Meteor's accounts-password module.

Okazało się, ponieważ Meteor nie rozpoczął jeszcze prac nad kompatybilnością z Node.js v12.0, nowe pliki binarne zainstalowane wraz z Węzłem na moim serwerze nie były kompatybilne z plikami binarnymi dołączonymi do mojego wdrożenia, więc miałem podobne błędy. W tym przypadku problem nie dotyczył produktu Nodemailer, lecz programu simplesmtp.

Zgodnie z sugestią here, rozwiązaniem było usunięcie wersji dołączonej i użycie npm do zainstalowania wersji lokalnej dla serwera.

Tak więc w moim skrypcie wdrażania dodałem następujące wiersze po zbudowaniu pakietu.

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 

Jest to łatwiejsze niż modyfikowanie źródła, szczególnie w przypadku wdrożenia ze skryptami.

+1

Należy zauważyć, że w Meteor 1.3 (i potencjalnie powyżej) struktura plików uległa zmianie i 'email' obecnie znajduje się w' bundle/programach/server/npm/node_modules/meteor/email'. –

+0

npm-bcrypt również został przeniesiony. Mimo że można je łatwo znaleźć i usunąć, nie wiem, gdzie powinienem je zainstalować ponownie ... –