最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何将RFC822消息正文体存储为String?

运维笔记admin12浏览0评论

如何将RFC822消息正文体存储为String?

如何将RFC822消息正文体存储为String?

var inbox = require("inbox");

var client = inbox.createConnection(false, "imap.gmail", {
    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();
        });

    });
});

上面的代码返回

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消息体体存储为String?我尽力做到这一点,但每次它返回相同我怎么能这样做?

回答如下:

由于它是一个可读的流,你可以使用NodeJS - Class: stream.Readable

您可以使用data事件从流和end事件中获取消息,以便知道何时没有更多数据

事件:'数据'

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

事件:'结束'

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

附: createMessageStream接受消息UID作为参数。

在您的情况下,您可能需要使用一些promise基函数来包装它

var inbox = require("inbox");

var client = inbox.createConnection(false, "imap.gmail", {
    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)

  1. 暂无评论