2015-02-18 26 views
6

Tôi gặp sự cố với Nodemailer trên Heroku và tôi thực sự đánh giá cao sự trợ giúp của bạn.Vấn đề Heroku với NodeMailer

Phiên bản trước của ứng dụng của tôi được sử dụng để làm việc trên Heroku không có vấn đề gì và khi tôi quay lại phiên bản đó, nó vẫn hoạt động tốt. Trong phiên bản mới nhất của ứng dụng, tôi đã không thực hiện thay đổi nào đối với mã truy cập Nodemailer vì vậy điều này không thực sự hợp lý với tôi.

Các phiên bản của nodemailer là: 0.6.5

Dưới đây là thông điệp log:

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 

Chúng ta có thể thấy rằng nó là không on line 918 của 'client.js' với lỗi của :

LoạiError: Không thể chỉ định cho thuộc tính chỉ đọc 'reconnectCount' sai.

Tại sao nó cố gắng gán 'false' cho 'reconnectCount'?

Mã của tôi là thực sự đơn giản:

app.locals.smtpTransport = nodemailer.createTransport ('SMTP', { dịch vụ: 'Gmail', auth: { người dùng: "[email protected]" , vượt qua: "pass123" } }); sau đó tôi sử dụng mã để gửi thư như:

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

Mã này hoạt động trên dụ dàn của tôi về Heroku để không làm ý nghĩa với tôi.

tôi đã đăng một yêu cầu hỗ trợ với Heroku và bất kỳ hướng dẫn mà bạn có thể cung cấp cho tôi sẽ vượt qua lên chúng.

cảm ơn rất nhiều sự giúp đỡ của bạn.

Trả lời

11

tôi chỉ có các phản ứng sau từ Nodemailer:

Có thể bạn đang chạy Nodemailer trong ioj. Chỉ có phiên bản mới nhất của Nodemailer được suported trong nút 0.12 và iojs, vì vậy bạn có nên nâng cấp hoặc sửa chữa các dòng 918 cho mình như thế này:

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

tính Thiết để các giá trị boolean được phép trong ES5 nhưng iojs chạy ES6 và cố gắng thiết lập một thuộc tính trong chế độ nghiêm ngặt ES6 ném một lỗi.

Tôi nghĩ rằng tôi đã sửa lỗi này bằng cách đặt rõ ràng phiên bản node.js trong tệp gói của tôi sang phiên bản cũ hơn sử dụng ES5.

Điều này đã khắc phục được sự cố của tôi. Bài học kinh nghiệm là luôn luôn thiết lập phiên bản nodejs trong tập tin gói nếu không Heroku sử dụng phiên bản mới nhất và nó có thể không tương thích với các mô-đun của bạn.

Rất cám ơn Nodemailer, họ đã gửi lại cho tôi siêu nhanh với phản hồi tuyệt vời.

Hy vọng điều này sẽ giúp người khác.

Cảm ơn.

+1

Điều này hữu ích khi biết các nhà phát triển cài đặt nền tảng blog Ghost. Khi bạn nâng cấp Nodejs lên phiên bản 0.12, giả sử bạn đang sử dụng phiên bản trước 0,4 của Ghost, bạn sẽ gặp lỗi này trong tệp sau tại số dòng này tùy thuộc vào số phiên bản Ghost của bạn và phiên bản nodemailer: 'ghost/node_modules/nodemailer /node_modules/simplesmtp/lib/client.js: 828'. Tôi đã chỉnh sửa dòng này cho phù hợp và blog Ghost v.0.4 trước của tôi giờ đây có thể gửi email với Nodejs v.0.12. – surfbuds

8

Tôi đang làm việc với thiên thạch trên bản cài đặt ubuntu và tôi đã nhận được các lỗi tương tự sau khi nâng cấp lên Node.js v12.0 và cài đặt mô-đun tài khoản-mật khẩu của Meteor.

Đã tắt, vì Meteor chưa bắt đầu phát triển tương thích với Node.js v12.0, các tệp nhị phân mới được cài đặt với Nút trên máy chủ của tôi không tương thích với các tệp nhị phân đi kèm với triển khai của tôi. Trong trường hợp này, vấn đề không phải với Nodemailer nhưng với simplesmtp.

Như được đề xuất here, giải pháp là xóa phiên bản đi kèm và sử dụng npm để cài đặt phiên bản máy chủ cục bộ.

Vì vậy, trong kịch bản triển khai của mình, tôi đã thêm các dòng sau đây sau khi tạo gói.

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 

Điều này dễ dàng hơn việc sửa đổi nguồn, đặc biệt nếu bạn triển khai theo kịch bản.

+1

Lưu ý rằng trong Meteor 1.3 (và có khả năng ở trên) cấu trúc tệp đã thay đổi và 'email' hiện nằm trong' bundle/programs/server/npm/node_modules/meteor/email'. –

+0

npm-bcrypt cũng đã được di chuyển. Mặc dù thật dễ dàng để tìm và xóa tôi không biết tôi nên cài đặt lại nó ở đâu ... –