2015-02-18 5 views
6

Ich habe ein Problem mit Nodemailer auf Heroku und ich würde Ihre Hilfe sehr schätzen.Heroku Problem mit NodeMailer

Eine frühere Version meiner Anwendung verwendet, um mit Heroku ohne Probleme zu arbeiten und wenn ich auf diese Version zurückrollen, funktioniert es immer noch gut. In der neusten Version der Anwendung habe ich keine Änderungen am Code-Zugriff vorgenommen, so dass dies für mich keinen Sinn macht.

Die Version von nodemailer ist: 0.6.5

Hier wird die Log-Nachricht ist:

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 

Wir können sehen, dass es mit dem Fehler in Zeile 918 von 'Client.js' versagt von :

TypeError: Kann der schreibgeschützten Eigenschaft 'reconnectCount' von false nicht zuweisen.

Warum sollte versucht werden, 'reconnectCount' 'false' zuzuordnen?

Mein Code ist wirklich einfach:

app.locals.smtpTransport = nodemailer.createTransport ('SMTP', { Service: 'Gmail', Auth: { user: "[email protected]" , pass: "pass123" } }); Ich benutze dann den Code Mail wie zu senden:

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

Dieser Code auf meiner Inszenierung Instanz von Heroku funktioniert so, dass nicht macht Sinn für mich.

ich habe eine Support-Anfrage mit Heroku und jede Anleitung angemeldet, die Sie zur Verfügung stellen kann ich auf sie passieren.

Vielen Dank für Ihre Hilfe.

Antwort

11

ich habe gerade die folgende Antwort zurück von Nodemailer:

Wahrscheinlich betreiben Sie Nodemailer in iojs. Nur die neueste Version von Nodemailer wird in Knoten 0,12 und iojs suported, so sollten Sie entweder oder die Linie 918 sich wie folgt Upgrade beheben:

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

Festlegen von Eigenschaften auf Boolesche Werte wurde in ES5 erlaubt, aber iojs läuft ES6 Wenn Sie versuchen, eine Eigenschaft im ES6-Modus festzulegen, wird ein Fehler ausgegeben.

Ich denke, ich habe dies behoben, indem ich explizit die node.js-Version in meiner Paketdatei auf eine ältere Version, die ES5 verwendet.

Das hat mein Problem behoben. Lektion gelernt ist, immer die nodejs Version in der Paketdatei zu setzen, ansonsten Heroku verwendet die neueste Version und es möglicherweise inkompatibel mit Ihren Modulen.

Vielen Dank an Nodemailer, sie haben mich sehr schnell mit einer tollen Antwort zurückbekommen.

Hoffentlich wird dies jemand anderem helfen.

Danke.

+1

Dies ist nützlich für Entwickler zu wissen, wer Geist Blogging-Plattform zu installieren. Sobald Sie Nodejs auf Version 0.12 upgraden, vorausgesetzt, Sie verwenden eine Version 0.4 von Ghost, erhalten Sie diesen Fehler in der folgenden Datei unter dieser Zeilennummer, abhängig von Ihrer Ghost-Versionsnummer und der nodemailer-Version: 'ghost/node_modules/nodemailer /node_modules/simplesmtp/lib/client.js: 828'. Ich habe diese Zeile entsprechend bearbeitet und mein Ghost-Blog vor Version 4.0 kann nun E-Mails mit Nodejs v.0.12 senden. – surfbuds

8

Ich arbeite mit Meteor auf einem Ubuntu installieren und ich war immer Ähnliche Fehler nach der Node.js v12.0 Upgrade und Meteor-Konten-Passwort Modul installieren.

Da Meteor noch nicht mit der Entwicklung der Kompatibilität mit Node.js v12.0 begonnen hat, waren die neuen Binärdateien, die mit Node auf meinem Server installiert wurden, nicht kompatibel mit den Binaries, die mit meiner Deployment ausgeliefert wurden. In diesem Fall war das Problem nicht mit Nodemailer, sondern mit simplesmtp.

Wie vorgeschlagen here, war die Lösung, die gebündelte Version zu entfernen und npm zu verwenden, um eine serverbasierte Version zu installieren.

Also in meinem Bereitstellungsskript, habe ich die folgenden Zeilen, nachdem ich das Bündel gebaut.

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 

Dies ist einfacher als das Ändern der Quelle, insbesondere wenn Sie eine Bereitstellung mit Skripts haben.

+1

Beachten Sie, dass sich die Dateistruktur in Meteor 1.3 (und möglicherweise darüber) geändert hat und "email" sich nun in "bundle/programs/server/npm/node_modules/meteor/email" befindet. –

+0

npm-bcrypt wurde ebenfalls verschoben. Während es leicht zu finden und zu entfernen ist weiß ich nicht, wo ich es neu installieren sollte ... –