尝试更新标志的节点imap:错误:以无效状态接收的命令。

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

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

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' } 

问题是您以只读模式打开了INBOX。 在这里的第二个参数中,这是“真实的”

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

改变它

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

突然它会一切工作。