Nodejs 实现 通过 POP3 协议获取邮件列表【yapople】

让我们使用yapople获取一下,你的邮件列表吧

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
var Client = require('yapople').Client;
var _ = require('lodash');
var async = require('async');
var iconv = require('iconv-lite');

var Fetcher = module.exports = function(options){
this.options = _.assign(options,{port:995,tls:true,mailparser:true})
this.client = new Client(this.options)
this.mails = []
}

Fetcher.prototype.count = function(cb){
var self = this
self.client.connect(function(){
self.client.count(cb);
self.client.quit();
});
}

Fetcher.prototype.fetch = function(nums,cb){
var self = this;
self.client.connect(function(){
self.client.retrieve(nums,function(err,messages){
cb(err,messages);
self.client.quit();
})
});
}

Fetcher.prototype.list = function(number,cb){
var self = this;
self.client.connect(function(){
self.client.list(number,function(err,info){
cb(err,info);
self.client.quit();
})
});
}

Fetcher.prototype.getContent = function(date,cb){
var self = this;
self.client.connect(function(){
async.waterfall([
function(done){
self.client.count(function(err,count){
done(err,count);
});
},
function(count,done){
var nums = [];
var tmp = [];
for(var i=0;i<count;i++){
nums.push(i+1);
}

self.client.retrieve(nums,function(err,res){
console.log('res length',res.length);
done(err,tmp);
// done(err,res);
});
}
],function(err,results){
// console.log('results:',results);
cb(err,results);
self.client.quit();
});
});
}

Fetcher.prototype._connect = function(cb){
var self = this;
self.client.connect(function(){
self.client.retrieve([2],function(err,messages){
cb(err,messages);
self.client.quit();
})
})
}

测试一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
var should = require('should');
var moment = require('moment');
var POP3 = require(__dirname + '/../lib/mail_fetcher/pop3');
var iconv = require('iconv-lite');

var conf = {
hostname: 'pop.126.com',
username: '[email protected]',
password: 'mmmmmm'
};

describe('pop3 test', function(){
it('should get mailbox count', function(done){
var pop3 = new POP3(conf);
pop3.count(function(err,count){
console.log('count:',count);
return done();
})
});
it('should fetch nums messages',function(done){
var pop3 = new POP3(conf);
pop3.fetch([1,2,3],function(err,messages){
messages.forEach(function(i){
// console.log('ALL:',i);
console.log('SUBJECT:',i.subject);
})
return done();
});
});
// it('should return date condition messages',function(done){
// var pop3 = new POP3(conf);
// pop3.getContent('2015-01-03',function(err,messages){
// console.log('MESSAGES:',messages);
// return done();
// })
// });
// it('pop3 list',function(done){
// var pop3 = new POP3(conf);
// pop3.list(function(err,info){
// // console.log('list info:',info);
// return done();
// })
// })
});

password和username换成你自己的。