node imap尝试更新标志:错误:在无效状态下收到命令。

时间:2016-10-11 15:34:25

标签: node.js exchange-server imap

提交此问题及其答案,因为SA(以及谷歌)对此非常无益。

我需要删除INBOX中的所有邮件。为清晰起见,下面不相关的行被删除:

function openInbox(cb){
    imap.openBox('INBOX', true, cb);
}

imap.once('ready', function() {
    openInbox(function(err,box){
        if (err) throw err;
        var f = imap.seq.fetch('1:*', {
            bodies: 'HEADER.FIELDS (FROM)',
            struct: true
        });
        f.on('message', function(msg, seqno){
            console.log('Message #%d', seqno);

            imap.seq.addFlags(seqno, 'Deleted', function(err){
                console.log(err);
            });

        });
        f.once('end', function(){
            imap.end();
        });
    });
});

imap.connect();

这一切看起来都不错,当我用console.log查看它时,我看到它正在阅读电子邮件就好了。一切看起来都应该是好的,但我明白了:

{ [Error: Command received in Invalid state.] textCode: undefined, source: 'protocol' }

1 个答案:

答案 0 :(得分:2)

问题是您是否以只读模式打开了INBOX。这就是第二个论点中的“真实”:

function openInbox(cb){
    imap.openBox('INBOX', true, cb);
}

将其更改为

function openInbox(cb){
    imap.openBox('INBOX', false, cb);
}

突然之间一切都会奏效。