我无法使用Meteorjs处理来自mandrill的入站电子邮件。在编写服务器端路由/ API路由时,我有点新手,所以我希望我不会忽略疯狂基本的东西。 这是我定义的铁路由器路由: 它获得了post调用,创建了一个消息对象并将对象输入到我的集合中。
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注册的地址什么也没做。我很难调试这个,因为我的模数日志中没有错误代码(也是console.log什么都不做)。
我找到了这个指南 http://dev-blog.cloud-spinners.com/2014/03/sending-and-receiving-email-using.html 但我似乎无法在这里看到我所做的根本错误。我知道我需要进一步处理电子邮件正文,但这只是为了获得一个'#34; hello world"消息进入我的数据库。
答案 0 :(得分:0)
iron-router不支持multipart / form-data。我在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);
...
您必须添加以下软件包才能使用npm软件包:meteor add meteorhacks:npm并将packages.json文件添加到项目的根目录并添加以下内容:
{ "busboy": "0.2.9"}