哪些IMAP标志可靠地支持大多数邮件服务器?

我正在写一个应用程序,对发送到邮箱的电子邮件作出反应。 它通过IMAP检索电子邮件。 它将被部署到一些我不控制邮件服务器configuration的系统。

我想使用IMAP标志来指示哪些消息已被处理。 系统的标志是否得到了广泛的支持,我可以在我的应用程序中合理地依赖它们? 用户定义的标志是否得到了广泛的支持?

(如果答案是“哈哈,不是机会”,那么我将使用文件夹。)

谢谢

-ben

    看一下这个示例IMAP服务器会话的集合 。 基本上,无论何时你看到PERMANENTFLAGS包含\* ,服务器都将支持用户定义的标志。

    要添加到列表,这里是Gimap(谷歌邮件IMAP)会话的摘录:

     * OK Gimap ready for requests from 192.0.2.1 5if380490pzk.17 a login username password * CAPABILITY IMAP4rev1 UNSELECT LITERAL+ IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE a OK [email protected] authenticated (Success) b select inbox * FLAGS (\Answered \Flagged \Draft \Deleted \Seen) * OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)] * OK [UIDVALIDITY 2] * 1089 EXISTS * 0 RECENT * OK [UIDNEXT 2371] b OK [READ-WRITE] inbox selected. (Success) c logout * BYE LOGOUT Requested c OK 73 good day (Success) 

    同样,从Exchange 2007开始的一个会话:

     * OK Microsoft Exchange Server 2007 IMAP4 service ready 00000000 CAPABILITY * CAPABILITY IMAP4 IMAP4rev1 AUTH=NTLM AUTH=GSSAPI IDLE NAMESPACE LITERAL+ 00000000 OK CAPABILITY completed. [...] 00000003 SELECT INBOX * 1 EXISTS * 0 RECENT * FLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent) * OK [PERMANENTFLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)] Permanent flags * OK [UIDVALIDITY 472] UIDVALIDITY value * OK [UIDNEXT 7] The next unique identifier value 00000003 OK [READ-WRITE] SELECT completed. 

    我无法从Exchange 2010中find会话。

    所以这不是普遍的 – 交易所是显着的禁忌 – 但它肯定是比较常见的。

    Exchange 2010具有相同的PERMANENTFLAGS集

     * OK [PERMANENTFLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)] Perman ent flags 

    主要的IMAP协议文件是RFC3501。 第2.3.2节描述了每个 IMAP实现必须使用的标准标志。

    系统的标志是否得到了广泛的支持,我可以在我的应用程序中合理地依赖它们?

    事实上,RFC3501描述了通用系统标志。

    用户定义的标志是否得到了广泛的支持?

    没有任何关于用户定义的标志的RFC,只有提议

     RFC 3501 IMAPv4 March 2003 2.3.2. Flags Message Attribute A list of zero or more named tokens associated with the message. A flag is set by its addition to this list, and is cleared by its removal. There are two types of flags in IMAP4rev1. A flag of either type can be permanent or session-only. A system flag is a flag name that is pre-defined in this specification. All system flags begin with "\". Certain system flags (\Deleted and \Seen) have special semantics described elsewhere. The currently-defined system flags are: \Seen Message has been read \Answered Message has been answered \Flagged Message is "flagged" for urgent/special attention \Deleted Message is "deleted" for removal by later EXPUNGE \Draft Message has not completed composition (marked as a draft). \Recent Message is "recently" arrived in this mailbox. This session is the first session to have been notified about this message; if the session is read-write, subsequent sessions will not see \Recent set for this message. This flag can not be altered by the client. If it is not possible to determine whether or not this session is the first session to be notified about a message, then that message SHOULD be considered recent. If multiple connections have the same mailbox selected simultaneously, it is undefined which of these connections will see newly-arrived messages with \Recent set and which will see it without \Recent set. A keyword is defined by the server implementation. Keywords do not begin with "\". Servers MAY permit the client to define new keywords in the mailbox (see the description of the PERMANENTFLAGS response code for more information). A flag can be permanent or session-only on a per-flag basis. Permanent flags are those which the client can add or remove from the message flags permanently; that is, concurrent and subsequent sessions will see any change in permanent flags. Changes to session flags are valid only in that session. Note: The \Recent system flag is a special case of a session flag. \Recent can not be used as an argument in a STORE or APPEND command, and thus can not be changed at all.