使用gmail的Nodemailer,无法在string“SMTP”上创build属性“邮件程序”

我试图从我创build的forms发送到我的Gmail帐户的数据,当点击sumbitbutton,我总是得到相同的错误。 我发现了很多关于nodemailer的问题,但是没有一个和我遇到的问题一样。

当然,我已经说明了我的clientId,但刚删除这个职位。

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: '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); }); 

nodemailer已经被重写,所以旧的代码结构可能会抛出这样的错误。 尝试使用以下结构:

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

请检查官方资源了解更多详情: https : //nodemailer.com/smtp/

当前的问题今天的帮助是更快的信息变化,亚历山大很好,当他说“nodemailer重做”;

我用这个简单的线来定义运输者:

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

我从这里得到了https://community.nodemailer.com/

我有类似的问题。 'nodemailer-smtp-transport'模块解决了它

 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 

通过'npm install nodemailer-smtp-transport'来安装nodemailer-smtp-transport

试试下面:

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

请参阅: https : //nodemailer.com/smtp/oauth2/

这正在为我工​​作 –

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

请注意,您将不得不从谷歌打开安全性较低的应用程序。 访问https://myaccount.google.com/lesssecureapps 。 一旦打开,刷新页面只是为了确保它实际上打开(我得到了4次尝试打开)。