Meteor + node-imap(nodejs) + mailparser(nodejs) 实现完整收发邮件
版本信息:
Meteor:windows MIS安装 0.6.4
node-imap:npm指定的0.8.0版,不是默认的0.7.x版。
mailparser:npm安装0.3.6
以下是记录踩到的坑:
1. 使用meteor的email来发送邮件时,设置process.env.MAIL_URL要注意,如果你的gmail账号是自己设置了domain的,如“xxx@unitedstack.com”。那么process.env.MAIL_URL的写法应该是:“smtp://xxx%40unitedstack.com:YOUR_PASSWORD@smtp.googlemail.com:465”。一定注意第一个@写成“%40”。
2.github上node-imap的版本和例子都是适用于0.8.0的。使用npm如果安装默认的0.7.x版则跑不通官网例子。
3.windows下安装mailparser时会出现 “MSBuild” 报出的错误。安装 visual studio 然后重启就行了。
因为线上搜到的node-imap+mailparser的例子都有版本的问题。以下给出一个能在上面描述的版本中跑通的例子:
var Imap = require('imap') var MailParser = require("mailparser").MailParser var fs = require("fs") var imap = new Imap({ user: 'YOUR_USERNAME', password: 'YOUR_PASSWORD', host: 'imap.gmail.com', port: 993, tls: true, tlsOptions: { rejectUnauthorized: false } }); function openInbox(cb) { imap.openBox('INBOX', true, cb); } var messages = [] imap.once('ready', function() { openInbox(function(err, box) { console.log("open") if (err) throw err; imap.search([ 'UNSEEN', ['SINCE', 'May 20, 2010'] ], function(err, results) { if (err) throw err; var f = imap.fetch(results, { bodies: '' }); f.on('message', function(msg, seqno) { var mailparser = new MailParser() msg.on('body', function(stream, info) { stream.pipe( mailparser ); mailparser.on("end",function( mail ){ fs.writeFile('msg-' + seqno + '-body.html', mail.html, function (err) { if (err) throw err; console.log(seqno + 'saved!'); }); }) }); msg.once('end', function() { console.log(seqno + 'Finished'); }); }); f.once('error', function(err) { console.log('Fetch error: ' + err); }); f.once('end', function() { console.log('Done fetching all messages!'); imap.end(); }); }); }); }); imap.once('error', function(err) { console.log(err); }); imap.once('end', function() { console.log('Connection ended'); }); imap.connect();