2014-04-07 69 views
0

如何使用imap同時使用node.js監控多個電子郵件帳戶?如何處理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(); 

回答

0

您必須創建單獨的連接來監視多個帳戶。

1

很簡單

第一,做一個功能,使您的連接和全局變量把你連接上並處理在任何你想

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); 
} 
} 

主題,現在你有不同的陣列連接,這意味着你可以找到你想要的。我希望它有幫助