Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

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: '[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);     }); 
like image 536
Kyle van Til Avatar asked Feb 23 '17 11:02

Kyle van Til


2 Answers

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: '[email protected]',         //and other stuff 

Please, check official resource for more details:

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

like image 77
Alexander Rulezovsky Avatar answered Sep 22 '22 09:09

Alexander Rulezovsky


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/

like image 39
Richard Aguirre Avatar answered Sep 22 '22 09:09

Richard Aguirre