Я настраиваю nodemailer и пытаюсь создать модель, контроллер и почтовую программу. Я знаю, что мои функции испортились, но я не понимаю, как отправить mailModel через функцию transport.sendmail. Моя конечная цель - иметь возможность позвонить в почтовую программу, чтобы отправить электронное письмо. Может мне даже Мангуст не нужен?

Я думаю, что плохо объяснил свою цель, я могу заставить Nodemailer работать в одном скрипте с назначенными mailOptions. но я хочу экспортировать функцию, чтобы я мог просто сказать sendMail (userEmail, subject, text); Это не обязательно должно происходить через mongoose или mongoDB.

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

var newMailSchema = new mailSchema( {
from: '"me" <me@gmail.com>', // 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: 'me@hotmail.com',
    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" <me@hotmail.com>', // sender address
to: 'you@gmail.com', // list of receivers
subject: 'Hi', // Subject line
text: 'Foo', // plain text body
html: '<b>Bar</b>' // html body
});
sendMail.sender(mailModel);
0
rudster 17 Июн 2017 в 07:14
Так какова твоя цель? Получить получателя от MongoDB, а затем отправить ему электронное письмо?
 – 
Janne
17 Июн 2017 в 07:35
Да, пользователь вводит свою информацию, и я сохраняю ее в mongoDB, после чего я хочу получить их информацию и отправить им электронное письмо. Чтобы я мог просто отправить почту (кому, теме, тексту)
 – 
rudster
17 Июн 2017 в 14:58
Упомянутый вами пользователь - это зарегистрированный пользователь или гость, использующий ваше приложение?
 – 
chenop
17 Июн 2017 в 16:29
Зарегистрированный пользователь, у меня уже есть его адрес электронной почты, поэтому у меня нет проблем с получением этой информации. Я хочу иметь возможность вызывать что-то вроде этого sendMail (userEmail, subject, text); и он отправит им электронное письмо.
 – 
rudster
17 Июн 2017 в 16:34

2 ответа

Вы исправляете свой синтаксис и определение, как показано ниже, и будете работать на вас.

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

var newMailSchema = new mailSchema( {
    from: {type:String,default:'me@gmail.com'},
    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: 'me@hotmail.com',
            pass: 'password'
        }
    });
    var mailOptions = {
        from: 'me@gmail,com', // sender address
        to: 'you@gmail.com', // 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 Uday Kumar 17 Июн 2017 в 08:50
Ратан, это хорошая информация, но я не хочу публиковать, я просто хочу иметь возможность вызывать функцию sendMail, чтобы сделать что-то вроде sendMail (to, subject, text)
 – 
rudster
17 Июн 2017 в 15:18
Вы можете использовать тот же способ без маршрутизации
 – 
Ratan Uday Kumar
17 Июн 2017 в 15:44
Вот что у меня проблемы с делом, нужен ли мне мангуст в таком случае?
 – 
rudster
17 Июн 2017 в 16:16

Я отвечу на вопрос, нужен ли вам дб. Если вам нужно сохранить вводимые пользователем данные, чтобы восстановить состояние для того же конкретного пользователя в будущем - так что да, вам нужен db. Но если это приложение, которое просто отправляет электронное письмо и не зависит от чего-либо еще в вашем штате, то вам не нужен db.

Другой вариант - сохранить данные в кеше браузера, чтобы клиентская сторона сохранила и восстановила данные, введенные последним пользователем.

0
chenop 17 Июн 2017 в 22:37
Тогда мне не нужна БД, я хочу экспортировать функцию nodemailer, поэтому я могу просто сказать sendMail (userEmail, subject, text); и он отправит им электронное письмо
 – 
rudster
17 Июн 2017 в 16:37