2015-02-05 5 views
0

У меня возникли проблемы с обработкой входящих писем от mandrill с помощью Meteorjs. Я немного новичок, когда дело доходит до написания маршрутов на стороне сервера/маршрутов API, поэтому я надеюсь, что не буду забывать что-то безумно основное. Это маршрут железного маршрутизатора, который я определил: Он получает пост-вызов, создает объект сообщения и вводит объект в мою коллекцию.Обработка Mandrill Входящие письма

Router.route('/api/message/insert', function() { 
    // NodeJS request object 
    var request = this.request; 


    request = JSON.parse(request.body.mandrill_events); 
    console.log(request); 
    var firstEmail = request[0]; 


    if(firstEmail.event == "inbound"){ // == used on purpose 
    var email = firstEmail.msg.from_email; 
    var user = Meteor.users.findOne({"emails[0].address":email }); 
    var chatRoom = chatRooms.findOne({name:user_.id}); 
    var message = { 
     content:firstEmail.msg.text, 
     links:[], 
     chatRoom:chatRoom._id, 
     owner:user._id, 
     ownerName:user.profile.name, 
     ownerEmail:email, 
     createdAt: new Date(), 
    }; 
    chatMessages.insert(message); 
    } 
    // NodeJS response object 
    var response = this.response; 


    this.response.end("chat message implemented"); 
}, {where: 'server'}); 

Когда я отправляю тестовые письма с панели приборов mandrill, я получаю положительный ответ. Фактически отправка электронной почты на адрес, который я зарегистрировал в mandrill, ничего не делает. Мне сложно отлаживать это, потому что я не получаю код ошибки в моих журналах Modulus (также console.log ничего не делает).

Я нашел это руководство http://dev-blog.cloud-spinners.com/2014/03/sending-and-receiving-email-using.html , но я не могу видеть, что я делаю здесь принципиально неправильно. Я знаю, что мне нужно обработать тело электронной почты дальше, но это просто, чтобы получить сообщение «hello world» в моей базе данных.

ответ

0

iron-router не поддерживает многопользовательские/формальные данные. Я использовал следующий код с sendgrid.

var Busboy = Meteor.npmRequire("Busboy"), 
    fs = Npm.require("fs"), 
    os = Npm.require("os"), 
    path = Npm.require("path"); 

Router.onBeforeAction(function (req, res, next) { 
    var filenames = []; // Store filenames and then pass them to request. 
    req.body = req.body || {}; 


if (req.method === "POST") { 
    var busboy = new Busboy({ headers: req.headers }); 
    busboy.on("file", function (fieldname, file, filename, encoding, mimetype) { 
    var saveTo = path.join(os.tmpDir(), filename); 
    file.pipe(fs.createWriteStream(saveTo)); 
    filenames.push(saveTo); 
    }); 

    busboy.on("field", function(fieldname, value) { 


    req.body[fieldname] = value; 

    }); 

    busboy.on("finish", function() { 
    // Pass filenames to request 
    req.filenames = filenames; 
    next(); 
    }); 
} 
    // Pass request to busboy 
    req.pipe(busboy); 
}); 

Вы можете получить его в свой маршрут:

Router.route('inbound', { 
path: '/inbound/', 
where: 'server', 
action: function() { 

var body = this.request.body; 
console.log(body); 
... 

Вы должны добавить следующий пакет использовать НПМ пакеты: метеор добавить meteorhacks: НПМ и добавить файл packages.json в корень вашего проекта и добавить следующее:

{ "busboy": "0.2.9"} 
Смежные вопросы