如何将RFC822消息主体存储为字符串


var inbox = require("inbox");
var client = inbox.createConnection(false, "imap.gmail.com", {
    secureConnection: true,
    auth:{
        user: "myemail@gmail.com",
        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();
        });
    });
});

以上代码返回

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

但是通过替换

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

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

我在终端中获得了整个RFC822消息主体如何将RFC822消息主体存储为字符串?我尽力做到这一点,但是每次返回时我该怎么做?

由于它是可读的流,您可以使用nodejs -class:stream.able.able

您可以使用data事件从Stream和end事件中获取消息,以了解何时没有更多数据

事件:'data'

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

事件:'end'

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接受为参数a sagese uid。

在您的情况下,您可能必须使用一些承诺基础功能

将其包裹起来

示例

var inbox = require("inbox");
var client = inbox.createConnection(false, "imap.gmail.com", {
    secureConnection: true,
    auth: {
        user: "myemail@gmail.com",
        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();
            })
        })
    });
});

相关内容

  • 没有找到相关文章

最新更新