2017-02-23 18 views
8

Tôi đang cố gắng gửi dữ liệu từ biểu mẫu mà tôi đã tạo cho tài khoản gmail của mình, khi nhấp vào nút sumbit Tôi luôn gặp lỗi tương tự. Tôi đã tìm thấy rất nhiều vấn đề về nodemailer, nhưng không có vấn đề nào giống như vấn đề tôi gặp phải.Nodemailer bằng gmail, Không thể tạo 'mailer' thuộc tính trên chuỗi 'SMTP'

ofcourse Tôi đã tuyên bố clientId của tôi nhưng chỉ xóa cho bài đăng này.

TypeError: Cannot create property 'mailer' on string 'SMTP' 
at Mail (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\nodemailer\lib\mailer\index.js:45:33) 
    at Object.module.exports.createTransport (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\nodemailer\lib\nodemailer.js:46:14) 
    at C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\src\app.js:39:26 
    at Layer.handle [as handle_request] (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\layer.js:95:5) 
    at next (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\route.js:131:13) 
    at Route.dispatch (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\route.js:112:3) 
    at Layer.handle [as handle_request] (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\layer.js:95:5) 
    at C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\index.js:277:22 
    at Function.process_params (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\index.js:330:12) 
    at next (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\index.js:271:10) 
    at serveStatic (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\node_modules\serve-static\index.js:75:16) 
    at Layer.handle [as handle_request] (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\layer.js:95:5) 
    at trim_prefix (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\index.js:312:13) 
    at C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\index.js:280:7 
    at Function.process_params (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\index.js:330:12) 
    at next (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\index.js:271:10) 

đây là app.js tôi:

// require modules 
const express = require('express'); 
const app = express(); 
const pug = require('pug'); 
const fs = require('fs') 
const bodyParser = require('body-parser'); 
const pg = require('pg'); 
const nodemailer = require('nodemailer'); 
const xoauth2 = require('xoauth2'); 


//set view engine and views 
app.set('views', 'src/views'); 
app.set('view engine', 'pug'); 

app.use(bodyParser.urlencoded({extended: false})); 
app.use(express.static('./resources/')); 





//display index page 
app.get('/', function (req, res){ 
    console.log('Index is displayed on localhost'); 
    res.render('index'); 
}); 

app.post('/zorginstelling/ziekenhuis-olvg-locatie-west-voorheen-sint-lucas-andreas-ziekenhuis-amsterdam-109428/waardeer', function (req, res) { 
    var mailOpts, smtpTrans; 
    console.log('form word gepost') 
    //Setup Nodemailer transport, I chose gmail. 
    smtpTrans = nodemailer.createTransport('SMTP', { 
     service: 'Gmail', 
     auth: { 
     xoauth2: xoauth2.createXOAuth2Generator({ 
      user: '[email protected]', 
      clientId: '-' , 
      clientSecret: '-' , 
      refreshToken: '-' 
     }) 
     } 
    }); 

    //Mail options 
    mailOpts = { 
     from: req.body.rating[name] + ' <' + req.body.rating[email][first] + '>', 
     to: '[email protected]', 
     subject: 'Test', 
     text: req.body.rating[comment] + req.body.rating[questions][behandeling] + req.body.rating[name] 
    }; 

    smtpTrans.sendMail(mailOpts, function (error, response) { 
     //Email not sent 
     if (error) { 
      console.log('There was a problem') 
     } 
     //Yay!! Email sent 
     else { 
      console.log('Email sent!') 
     } 
    }); 
}); 



var server = app.listen(4000, function() { 
     console.log('Example app listening on port: ' + server.address().port); 
    }); 

Trả lời

11

Các nodemailer đã được làm lại, cấu trúc mã quá cũ có thể ném lỗi như vậy. Cố gắng sử dụng cấu trúc sau:

smtpTrans = nodemailer.createTransport({ 
    service: 'Gmail', 
    auth: { 
    xoauth2: xoauth2.createXOAuth2Generator({ 
    user: '[email protected]', 
    //and other stuff 

Xin vui lòng, kiểm tra nguồn chính thức để biết thêm chi tiết: https://nodemailer.com/smtp/

+0

Cảm ơn, nó đã giải quyết được một sự cố, nhưng sau khi tôi tiếp tục gặp sự cố, tên người dùng và mật khẩu của tôi không hợp lệ. Nhưng bây giờ mọi thứ đang hoạt động với ít mã hơn. –

+0

Đó là vì bạn cần phải giảm các thông số bảo mật của gmail và cho phép "truy cập các ứng dụng kém an toàn" trong cài đặt ứng dụng khách. Sau đó, ứng dụng của bạn sẽ có quyền truy cập vào hộp thư của bạn qua giao thức smt. Có thể có một cách khác để giải quyết vấn đề này, nhưng tôi chưa tìm thấy chúng. –

+0

Tôi biết tôi đã làm điều đó, nhưng có vẻ như mã của tôi là vấn đề tôi nghĩ theo cách phức tạp tôi đoán. –

2

Tôi có vấn đề tương tự. 'Nodemailer-smtp-vận chuyển' module giải quyết nó

var nodemailer = require('nodemailer'); 
var smtpTransport = require('nodemailer-smtp-transport'); 
var transport = nodemailer.createTransport(smtpTransport({ 
    service: 'Gmail', 
    auth:{ 
     xoauth2: xoauth2.createXOAuth2Generator({ 
      user: '[email protected]', 
    //and other stuff 

cài đặt-smtp-vận chuyển nodemailer bởi 'NPM cài đặt nodemailer-smtp-vận chuyển'

2

Vấn đề hiện tại Hôm nay để được trợ giúp là thay đổi thông tin nhanh hơn, và Alexander là tốt khi ông nói "nodemailer được làm lại";

tôi sử dụng dòng này dễ dàng để xác định vận chuyển:

var smtpTransport = nodemailer.createTransport("smtps://youruser%40gmail.com:"+encodeURIComponent('yourpass#123') + "@smtp.gmail.com:465"); 

tôi đã nhận nó từ đây https://community.nodemailer.com/

0

này đang làm việc cho ME

sendEmail: function(account, params) { 

    // create reusable transporter object using the default SMTP transport 
    var smtpTransport = nodemailer.createTransport({ 
     service: 'Gmail', // sets automatically host, port and connection security settings 
     auth: { 
      user: account.user, 
      pass: account.password 
     } 
    }); 

    var toEmail = params.to[0]; 
    for (var i = 1; i < params.to.length; i++) { 
     toEmail += ', ' + params.to[i]; 
    } 

    // setup email data with unicode symbols 
    var mailOptions = { 
     from: params.from, // sender address 
     to: toEmail, // list of receivers 
     subject: params.subject, // Subject line 
     text: params.text, // plain text body 
     html: params.html, // html body 
     attachments: params.attachments 
    }; 

    // send mail with defined transport object 
    smtpTransport.sendMail(mailOptions, (error, info) => { 
     if (error) { 
      return console.log('Error while sending mail: ' + error); 
     } else { 
      console.log('Message sent: %s', info.messageId); 
     } 
     smtpTransport.close(); // shut down the connection pool, no more messages. 
    }); 
} 

Đừng Lưu ý rằng bạn sẽ có để bật các ứng dụng kém an toàn hơn từ google. Truy cập https://myaccount.google.com/lesssecureapps. Sau khi bật, hãy làm mới trang chỉ để đảm bảo rằng nó thực sự được bật (tôi đã bật nó trong 4 lần thử).

Các vấn đề liên quan