2017-06-17 16 views
0

nodemailerを設定し、モデル、コントローラ、メーラーの作成を使用しようとしています。私は私の機能が乱れていることを知っていますが、私はtransport.sendmail関数を通してmailModelを送る方法を理解していません。私の最終目標は、メーラーに電子メールを送信するように電話することです。多分私はモンゴースは必要ないでしょうか?NodeJsモジュールのエクスポートと関数

私は自分の目標を説明していないと思います.Nodemailerに割り当てられたmailOptionsを使って1つのスクリプトで作業させることができます。私は関数をエクスポートしたいので、私はちょうどsendMail(userEmail、subject、text)と言うことができます。 mongooseやmongoDBを経由する必要はありません。

//model.js 
var mongoose = require('mongoose'); 
var mailSchema = mongoose.Schema; 

var newMailSchema = new mailSchema({ 
from: '"me" <[email protected]>', // sender address 
to: '', // list of receivers 
subject: '', // Subject line 
text: '', // plain text body 
html: '<b></b>' // html body 
}); 

module.exports = mongoose.model(newMailSchema); 

//controller.js 
'use strict'; 
const nodemailer = require('nodemailer'); 

// create reusable transporter object using the default SMTP transport 
var transporter = nodemailer.createTransport({ 
host: 'smtp-mail.outlook.com', 
port: 587, 
secure: false, // secure:true for port 465, secure:false for port 587 
auth: { 
    user: '[email protected]', 
    pass: 'password' 
} 
}); 


// send mail with defined transport object 
var sender = function(){ 
transporter.sendMail(mailModel, (error, info) => { 
if (error) { 
    return console.log(error); 
} 
console.log('Message %s sent: %s', info.messageId, info.response); 
}); 

}; 
exports.sender = sender; 


//mailer.js 
var sendMail = require('./controller'); 
var newMailModel = require('./model'); 

var mailModel = new newMailModel({ 
from: '"me" <[email protected]>', // sender address 
to: '[email protected]', // list of receivers 
subject: 'Hi', // Subject line 
text: 'Foo', // plain text body 
html: '<b>Bar</b>' // html body 
}); 
sendMail.sender(mailModel); 
+0

あなたの目標は何ですか? MongoDBから受信者を取得し、その人に電子メールを送信しますか? – Janne

+0

はい、ユーザーが情報を入力してmongoDBに保存すると、情報を取得して電子メールで送信できます。私はsendMail(to、subject、text)をちょうど実行できます。 – rudster

+0

あなたが言及したユーザー - 登録ユーザーですか、またはあなたのアプリケーションを使用しているゲストですか? – chenop

答えて

0

あなたは私はあなたがデシベルが必要かどうかの質問に対処するだろうとして、以下のあなたの構文と定義を修正して、U

//model.js 
var mongoose = require('mongoose'); 
var mailSchema = mongoose.Schema; 

var newMailSchema = new mailSchema({ 
    from: {type:String,default:'[email protected]'}, 
    to: String, 
    subject: String, 
    text: String, 
    html: String 
}); 

module.exports = mongoose.model('MailSchema',newMailSchema); 

//controller.js 

var newMailModel = require('./model'); 
const nodemailer = require('nodemailer'); 
exports.SendMail = function(req,res){ 
    var transporter = nodemailer.createTransport({ 
     host: 'smtp-mail.outlook.com', 
     port: 587, 
     secure: false, // secure:true for port 465, secure:false for port 587 
     auth: { 
      user: '[email protected]', 
      pass: 'password' 
     } 
    }); 
    var mailOptions = { 
     from: '[email protected],com', // sender address 
     to: '[email protected]', // list of receivers 
     subject: 'Hi', // Subject line 
     text: 'Foo', // plaintext body 
     html:'<b>Bar</b>' 
    }; 
    transporter.sendMail(mailOptions, (error, info) => { 
     if (error) { 
      return console.log(error); 
     }else { 
      console.log('Message %s sent: %s', info.messageId, info.response); 
      var mailModel = new newMailModel({ 
       from: mailOptions.from, 
       to: mailOptions.to, 
       subject: mailOptions.subject, 
       text: mailOptions.text, 
       html: mailOptions.html, 
      }); 
      mailModel.save(); 
      res.send('Mail Sent Successfully'); 
     } 
    }); 
} 

//router.js 

var express = require('express'), 
    router = express.Router(), 
    controller = require('./controller.js'); 

router.post('/MailExample',controller.SendMail); 
module.exports = router; 
+0

Ratan、これは良い情報ですが、投稿したくありません。sendMail(to、件名、テキスト)などの機能をsendMail関数に呼び出すことができます。 – rudster

+0

ルーティングなしで同じ方法を使用できます –

+0

thats what 'その場合、私はマングースが必要なのでしょうか? – rudster

0

のために動作します。 将来、同じ特定のユーザーの状態を復元するためにユーザーの入力を保存する必要がある場合は、DBを必要とします。 しかし、電子メールを送信するだけのアプリケーションで、あなたの国の他のものに依存しないアプリケーションであれば、dbを必要としません。

もう1つの方法は、クライアント側が最後のユーザーの入力を復元するようにクライアント側が保存するように、ブラウザのキャッシュにデータを保存することです。

+0

それでは、DBは必要ありません。nodemailerの機能をエクスポートして、sendMail(userEmail、subject、text)と言うだけです。それを電子メールで送信します – rudster

関連する問題