我有一个
ImapMailReceiver
实现来从远程 IMAP 服务器接收电子邮件,它与我们迄今为止测试的任何 IMAP 服务器都可以正常工作。尽管如此,我们用于测试的一台 Exchange (2016) 服务器似乎不喜欢在获取电子邮件时向其发送 IMAP 命令。以下是根据调试日志发送的命令列表(不带身份验证部分):
A3 LIST "" INBOX
* LIST (\Marked \HasChildren) "/" INBOX
A3 OK LIST completed.
A4 EXAMINE INBOX
* 15 EXISTS
* 0 RECENT
* FLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)
* OK [PERMANENTFLAGS ()] Permanent flags
* OK [UIDVALIDITY 14] UIDVALIDITY value
* OK [UIDNEXT 33765] The next unique identifier value
A4 OK [READ-ONLY] EXAMINE completed.
A5 SEARCH NOT (FLAGGED) ALL
* SEARCH 1 6 7 9 10 11 13 14 15
A5 OK SEARCH completed.
A6 FETCH 1,6:7,9:11,13:15 (ENVELOPE INTERNALDATE RFC822.SIZE FLAGS BODYSTRUCTURE)
...
A6 OK FETCH completed.
A7 STORE 1 +FLAGS (\Flagged)
A7 NO Command received in Invalid state
如您所见,设置标志时最后一个命令失败。现在,如果我添加
SELECT INBOX
然后
A7 STORE 1 +FLAGS (\Flagged)
一切都按预期进行。显然这是一个奇怪的 Exchange 服务器行为,但我想知道我们如何解决这个问题,通过某种方式定义发送到服务器的命令列表?
您发送的“1”是该邮件在邮箱中的编号,在您选择特定邮箱之前,这对服务器来说没有多大意义。