如何在node.js中使用node-imap标记看不见的电子邮件

时间:2014-06-16 10:47:29

标签: node.js imap

我希望收到电子邮件并标记未见过的电子邮件,如node-imap所示。我已经完成的接收,但我不知道如何标记看不见的电子邮件。 API提供的函数似乎在example中用var f = imap.fetch(results, { bodies: '' });替换代码var f = imap.fetch(results, { markSeen : true });,但它似乎不起作用。我该怎么办?

4 个答案:

答案 0 :(得分:5)

哦,我得到了解决方案。以只读模式打开邮箱是我的错,这就是我无法修改邮件状态的原因。imap.openBox('INBOX', false, cb);第二个false}表示打开邮箱不是只读模式。

答案 1 :(得分:3)

我尝试将邮件状态设置为false imap.openBox('INBOX', false, cb),但最初无效。

然后我更改了body中的数据并将其设置为HEADER.FIELDS (FROM TO SUBJECT DATE)它的工作原理。我不知道这是如何相关的,但它现在正在工作,而邮箱的只读状态显然是假的。

非工作代码:

imap.fetch(results, { bodies: '', markSeen: true });

工作代码:

imap.fetch(results, { bodies: 'HEADER.FIELDS (FROM TO SUBJECT DATE)', markSeen: true });

答案 2 :(得分:2)

imap.openBox("INBOX", false, function(err, mailBox) {
    if (err) {
        console.error(err);
        return;
    }
    imap.search(["UNSEEN"], function(err, results) {

        imap.setFlags(results, ['\\Seen'], function(err) {
            if (!err) {
                console.log("marked as read");
            } else {
                console.log(JSON.stringify(err, null, 2));
            }
        });

        var f = imap.fetch(results, { bodies: "" });
        f.on("message", processMessage);
        f.once("error", function(err) {
            return Promise.reject(err);
        });
        f.once("end", function() {
            console.log("Done fetching all unseen messages.");
            imap.end();
        });
    });
});

而processMessage

function processMessage(msg seqno){
     /*use mailparser*/}

所以基本上结果包含uuid

需要明确调用imap.setFlags([uuids],[' \ Seen'],cb)函数使其标记为已读

答案 3 :(得分:0)

以下是相同的工作示例。

var Imap = require('imap'),
    inspect = require('util').inspect;

var imap = new Imap({
    user: 'USERNAME',
    password: 'PASSWORD',
    host: 'IMAP_HOST',
    port: 993, // Default port is 993
    tls: true,
    tlsOptions: {rejectUnauthorized: false}
});

function openInbox(cb) {
    // openReadOnly = false
    imap.openBox('Inbox', false, cb);
}

imap.once('ready', function () {
    openInbox(function (err, box) {
        if (err) throw err;

        // Search emails having "Some Subject" in their Subject headers
        imap.search([['HEADER', 'SUBJECT', 'Some Subject']], function (err, results) {
            if (err) throw err;

            try {
                var f = imap.fetch(results, {bodies: 'TEXT'});
                f.on('message', function (msg, seqno) {
                    msg.on('body', function (stream, info) {
                        var buffer = '';
                        stream.on('data', function (chunk) {
                            buffer += chunk.toString('utf8');
                        });
                        stream.once('end', function () {

                            // Mark the above mails as read
                            msg.once('attributes', function (attrs) {

                                let uid = attrs.uid;
                                imap.addFlags(uid, ['\\Seen'], function (err) {
                                    if (err) {
                                        console.log(err);
                                    } else {
                                        console.log("Marked as read!")
                                    }
                                });

                            });

                        });
                    });
                });
                f.once('end', function () {
                    imap.end();
                });
            } catch (errorWhileFetching) {
                console.log(errorWhileFetching.message);
                imap.end();
            }

        });
    });
});

imap.connect();