2017-02-23 21 views
8

作成したフォームからデータを送信しようとしています。 nodemailerに関する多くの問題が見つかりましたが、それらのどれも私が経験しているのと同じ問題ではないようです。Gmailを使用しているNodemailerは文字列 'SMTP'に 'mailer'という文字列を作成できません

私はクライアントIDを記載しましたが、この投稿では削除されました。

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

ありがとう、それは1つの問題を解決したが、私は私のユーザー名とパスワードが無効であると言う問題を続けた後。しかし、今はすべてが少ないコードで作業しています。 –

+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 

それを解決し、以下のお試しください] NPMインストールnodemailer-SMTP-輸送 'で

2

現在の問題現在、ヘルプの情報はより速く情報を変更することであり、アレクサンダーは「nodemailerが再加工された」と言ったときには良い状態でした。

私はトランスポーターを定義するには、この簡単なラインを使用

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

私はあなたが持っていることに注意してくださいください、ここでhttps://community.nodemailer.com/

0

これは、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. 
    }); 
} 

のために働いているからそれを得ました安全性の低いGoogleのアプリをオンにするhttps://myaccount.google.com/lesssecureappsにアクセスしてください。電源がオンになったら、ページが実際にオンになったことを確認するためにページをリフレッシュしてください(私は4回オンにしました)。

関連する問題