2017-12-21 3 views
1
var inbox = require("inbox"); 

var client = inbox.createConnection(false, "imap.gmail.com", { 
    secureConnection: true, 
    auth:{ 
     user: "[email protected]", 
     pass: "mypass" 
    } 
}); 

client.connect(); 

client.on("connect", function(){ 
    client.openMailbox("INBOX", function(error, info){ 
     if(error) throw error; 

     client.listMessages(-10, function(err, messages){ 
      var datas = []; 
      var data; 
      messages.forEach(function(message){ 
       data = message.UID + ": " + message.title; 
       datas.push(data); 
      }); 
      var messageStream = client.createMessageStream(22048); 
      console.log(messageStream); 
      client.close(); 
     }); 

    }); 
}); 

Der obige Code gibtWie den RFC822-Nachrichtentext als String speichern?

Stream { 
    domain: null, 
    _events: {}, 
    _eventsCount: 0, 
    _maxListeners: undefined } 

Aber durch

ersetzt
var messageStream = client.createMessageStream(22048); 
console.log(messageStream); 

mit

client.createMessageStream(123).pipe(process.stdout, {end: false}); 

ich die gesamte RFC822 Nachrichtentext in Terminal bekommen Wie die RFC822 Nachricht zu speichern, Körperkörper als String? Ich versuchte mein Bestes, es zu tun, aber jedes Mal, wenn es das gleiche zurückgibt wie kann ich es tun?

Antwort

1

Seit dem einem lesbaren Stream können Sie NodeJS - Class: stream.Readable

verwenden Sie data Ereignis verwenden können, um die Nachricht von Strom und end Ereignisse kennen zu lernen, wenn es keine Daten mehr

Veranstaltung: ‚Daten '

const readable = getReadableStreamSomehow(); 
readable.on('data', (chunk) => { 
    console.log(`Received ${chunk.length} bytes of data.`); 
}); 

Veranstaltung: 'Ende'

const readable = getReadableStreamSomehow(); 
readable.on('data', (chunk) => { 
    console.log(`Received ${chunk.length} bytes of data.`); 
}); 
readable.on('end',() => { 
    console.log('There will be no more data.'); 
}); 

P. S. createMessageStream akzeptiert als Argument eine Nachrichten-UID.

In Ihrem Fall Sie könnte dies mit einigen Versprechen Basisfunktionen zu wickeln haben bis

Beispiel

var inbox = require("inbox"); 

var client = inbox.createConnection(false, "imap.gmail.com", { 
    secureConnection: true, 
    auth: { 
     user: "[email protected]", 
     pass: "mypass" 
    } 
}); 

client.connect(); 

client.on("connect", function() { 

    client.openMailbox("INBOX", function(error, info) { 
     if (error) throw error; 

     var emails = []; 

     var promises = []; 

     new Promise(function(resolve, reject) { 

      client.listMessages(-10, function(err, messages) { 

       if (err) { 
        reject(err) 
        return; 
       }; 

       messages.forEach(function(message) { 

        var promise = new Promise(function(resolve, reject) { 

         var email = { 
          UID: messages.UID, 
          title: message.title, 
          body: "" 
         } 

         client.createMessageStream(message.UID) 
          .on('data', (chunk) => { 
           email.body += chunk.toString(); 
          }).on('end',() => { 
           //return the email object 
           resolve(email); 

          }).on('error', (err) => { 
           reject(err); 
          }); 
        }) 

        promises.push(promise); 

       }); 

       resolve(); 

      }); 

     }).then(() => { 

      return Promise.all(promises).then(function(emails) { 
       console.log(emails); 
       console.log("closing"); 
       client.close(); 
      }) 
     }) 

    }); 
}); 
+0

Vielen Dank, Stamos bro ........ und frohe Weihnachten – joeydash

Verwandte Themen