Nodemailer using gmail, Cannot create property 'mailer' on string 'SMTP'

匿名 (未验证) 提交于 2019-12-03 08:36:05

问题:

I am trying to send the data from the form I created to my gmail account, when clicking the sumbit button I always get the same error. I found a lot of issues about nodemailer, but none of them seem to be the same issue as I am experiencing.

Ofcourse I have stated my clientId but just deleted for this post.

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) 

this is my 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: 'kylevantil14@gmail.com',             clientId: '-' ,             clientSecret: '-' ,             refreshToken: '-'         })        }   });     //Mail options   mailOpts = {       from: req.body.rating[name] + ' <' + req.body.rating[email][first] + '>',        to: 'kylevantil14@gmail.com',       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);     }); 

回答1:

The nodemailer has been reworked, so old code structure could throw such error. Try use the following structure:

var xoauth2 = require('xoauth2');   smtpTrans = nodemailer.createTransport({   service: 'Gmail',    auth: {     xoauth2: xoauth2.createXOAuth2Generator({         user: 'kylevantil14@gmail.com',         //and other stuff 

Please, check official resource for more details:

https://community.nodemailer.com/2-0-0-beta/using-oauth2/



回答2:

The current problem Today for help is the change of information faster, and Alexander was good when he said "nodemailer is reworked";

i use this easy line to define the transporter:

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

i got it from here https://community.nodemailer.com/



回答3:

I had similar problem. 'nodemailer-smtp-transport' module solved it

var nodemailer = require('nodemailer'); var smtpTransport = require('nodemailer-smtp-transport'); var transport = nodemailer.createTransport(smtpTransport({     service: 'Gmail',     auth:{         xoauth2: xoauth2.createXOAuth2Generator({             user: 'abc@gmail.com',    //and other stuff 

install nodemailer-smtp-transport by 'npm install nodemailer-smtp-transport'



回答4:

Try below:

    smtpTrans = nodemailer.createTransport({         service: 'Gmail',          auth: {             type: 'OAuth2',             user: 'kylevantil14@gmail.com',             // and other stuff 

See: https://nodemailer.com/smtp/oauth2/



回答5:

This is working for 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.     }); } 

Do Note that you will have to turn on less secure apps from google. Visit https://myaccount.google.com/lesssecureapps . Once turned on, refresh the page just to make sure that it actually got turned on (I got it turned on in 4 attempts).



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!