我如何在node.js中处理多个imap连接?

时间:2014-04-07 06:52:17

标签: node.js imap

如何使用node.js同时使用imap监控多个电子邮件帐户?

我有一个程序,可以使用node-imap模块获取单个帐户的通知,并使用邮件解析器解析电子邮件。

var Imap = require('imap'),
    inspect = require('util').inspect;
var MailParser = require('mailparser').MailParser;
var fs = require('fs');
var imap = new Imap(
{
    user: 'any_email_address',
    password: 'password',
    host: 'imap.host.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(['ALL', []], 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();

2 个答案:

答案 0 :(得分:2)

这很简单

首先,创建一个使你的连接和全局变量的函数将你的连接放在那里并处理你想要的主题

var Connection = []; 

function connectImap(username, password, address, port, tls) {

if (typeof Connection[username]             != typeof undefined &&
    typeof Connection[username].state       == typeof ''        &&
    Connection[username].state              == 'authenticated'  &&
    Connection[username]._config.user       == username         &&
    Connection[username]._config.password   == password) {

    console.log('IMAP-CLIENT-USE-AUTHENTICATED-CONNECTION ' + username);

} else {

    port = port || 993;
    tls = tls || true;

    Connection[username] = new Imap({
        user        : username,
        password    : password,
        host        : address,
        port        : port,
        authTimeout : 10000,
        connTimeout : 10000,
        keepalive   : true,
        tls         : tls
    });

    console.log('IMAP-CLIENT-CONNECTED : ' + username);
}
}

现在你有一组不同的连接,这意味着你可以找到你想要的那个。

我希望它有所帮助

答案 1 :(得分:1)

您必须创建单独的连接才能监控多个帐户。