2017-02-23 81 views
8

Я пытаюсь отправить данные из формы, созданной в мою учетную запись gmail, при нажатии кнопки sumbit всегда получаю ту же ошибку. Я нашел много вопросов о nodemailer, но ни одна из них, похоже, не та же проблема, что и я.Nodemailer с использованием gmail, не удается создать свойство 'mailer' в строке 'SMTP'

Ofcourse Я изложил свой клиент, но просто удалил для этого сообщения.

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) 

это мой app.js:

// 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); 
    }); 

ответ

11

nodemailer был переработан, так что старый код структура может бросить такую ​​ошибку. Попробуйте использовать следующую структуру:

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

Пожалуйста, проверьте официальный сайт для получения более подробной информации: https://nodemailer.com/smtp/

+0

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

+0

Это потому, что вам необходимо снизить параметры безопасности gmail и разрешить «доступ для менее безопасных приложений» в настройках клиента. Затем ваше приложение получит доступ к вашему почтовому ящику через протокол smt. Возможно, есть еще один способ решить эти проблемы, но я их еще не нашел. –

+0

Я знаю, что я уже сделал это, но казалось, что мой код был проблемой, я думал, что сложно догадаться. –

2

У меня была аналогичная проблема. модуль 'nodemailer-SMTP-транспорт' решил, что

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 

установить nodemailer-SMTP-транспорт на 'НОЙ установку nodemailer-Smtp-транспорт'

2

Текущая проблема Сегодня помощь - это смена информации быстрее, и Александр был добрым, когда сказал, что «нодмайлер переработан»;

я использовать эту простую линию, чтобы определить переносчика:

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

я получил его отсюда https://community.nodemailer.com/

0

Это работает для Ме-

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. 
    }); 
} 

ли Обратите внимание, что вы будете иметь чтобы включить менее безопасные приложения из Google. Посетите https://myaccount.google.com/lesssecureapps. После включения обновите страницу, чтобы убедиться, что она действительно включена (я включил ее в 4 попытки).

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