12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235 |
- Network Working Group A. Gulbrandsen
- Request for Comments: 5465 Oryx Mail Systems GmbH
- Updates: 5267 C. King
- Category: Standards Track A. Melnikov
- Isode Ltd.
- February 2009
- The IMAP NOTIFY Extension
- Status of This Memo
- This document specifies an Internet standards track protocol for the
- Internet community, and requests discussion and suggestions for
- improvements. Please refer to the current edition of the "Internet
- Official Protocol Standards" (STD 1) for the standardization state
- and status of this protocol. Distribution of this memo is unlimited.
- Copyright Notice
- Copyright (c) 2009 IETF Trust and the persons identified as the
- document authors. All rights reserved.
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents (http://trustee.ietf.org/
- license-info) in effect on the date of publication of this document.
- Please review these documents carefully, as they describe your rights
- and restrictions with respect to this document.
- Abstract
- This document defines an IMAP extension that allows a client to
- request specific kinds of unsolicited notifications for specified
- mailboxes, such as messages being added to or deleted from such
- mailboxes.
- Gulbrandsen, et al. Standards Track [Page 1]
- RFC 5465 IMAP NOTIFY Extension February 2009
- Table of Contents
- 1. Overview and Rationale ..........................................3
- 2. Conventions Used in This Document ...............................4
- 3. The NOTIFY Extension ............................................4
- 3.1. The NOTIFY Command .........................................4
- 4. Interaction with the IDLE Command ...............................8
- 5. Event Types .....................................................8
- 5.1. FlagChange and AnnotationChange ............................9
- 5.2. MessageNew .................................................9
- 5.3. MessageExpunge ............................................10
- 5.4. MailboxName ...............................................11
- 5.5. SubscriptionChange ........................................12
- 5.6. MailboxMetadataChange .....................................12
- 5.7. ServerMetadataChange ......................................13
- 5.8. Notification Overflow .....................................13
- 5.9. ACL (Access Control List) Changes .........................13
- 6. Mailbox Specification ..........................................14
- 6.1. Mailbox Specifiers Affecting the Currently
- Selected Mailbox ..........................................14
- 6.2. Personal ..................................................15
- 6.3. Inboxes ...................................................15
- 6.4. Subscribed ................................................15
- 6.5. Subtree ...................................................15
- 6.6. Mailboxes .................................................16
- 7. Extension to SEARCH and SORT Commands ..........................16
- 8. Formal Syntax ..................................................16
- 9. Security Considerations ........................................19
- 10. IANA Considerations ...........................................19
- 10.1. Initial LIST-EXTENDED Extended Data Item Registrations ...19
- 11. Acknowledgements ..............................................20
- 12. Normative References ..........................................20
- 13. Informative References ........................................21
- Gulbrandsen, et al. Standards Track [Page 2]
- RFC 5465 IMAP NOTIFY Extension February 2009
- 1. Overview and Rationale
- The IDLE command (defined in [RFC2177]) provides a way for the client
- to go into a mode where the IMAP server pushes it notifications about
- IMAP mailstore events for the selected mailbox. However, the IDLE
- extension doesn't restrict or control which server events can be
- sent, or what information the server sends in response to each event.
- Also, IDLE only applies to the selected mailbox, thus requiring an
- additional TCP connection per mailbox.
- This document defines an IMAP extension that allows clients to
- express their preferences about unsolicited events generated by the
- server. The extension allows clients to only receive events that
- they are interested in, while servers know that they don't need to go
- to the effort of generating certain types of untagged responses.
- Without the NOTIFY command defined in this document, an IMAP server
- will only send information about mailstore changes to the client in
- the following cases:
- - as the result of a client command (e.g., FETCH responses to a
- FETCH or STORE command),
- - as unsolicited responses sent just before the end of a command
- (e.g., EXISTS or EXPUNGE) as the result of changes in other
- sessions, and
- - during an IDLE command.
- The NOTIFY command extends what information may be returned in those
- last two cases, and also permits and requires the server to send
- information about updates between commands. The NOTIFY command also
- allows for the client to extend what information is sent unsolicited
- about the selected mailbox and to request some update information to
- be sent regarding other mailboxes.
- The interaction between IDLE and NOTIFY commands is described in
- Section 4.
- For the new messages delivered to or appended to the selected
- mailbox, the NOTIFY command can be used to request that a set of
- attributes be sent to the client in an unsolicited FETCH response.
- This allows a client to be a passive recipient of events and new mail
- and to be able to maintain full synchronisation without having to
- issue any subsequent commands except to modify the state of the
- mailbox on the server.
- Gulbrandsen, et al. Standards Track [Page 3]
- RFC 5465 IMAP NOTIFY Extension February 2009
- Some mobile clients, however, may want mail "pushed" only for mail
- that matches a SEARCH pattern. To meet that need, [RFC5267] is
- augmented by this document to extend the UPDATE return option to
- specify a list of fetch-atts to be returned when a new message is
- delivered or appended in another session.
- 2. Conventions Used in This Document
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
- document are to be interpreted as described in [RFC2119].
- The acronym MSN stands for Message Sequence Numbers (see Section
- 2.3.1.2 of [RFC3501]).
- Example lines prefaced by "C:" are sent by the client and ones
- prefaced by "S:", by the server. "[...]" means elision.
- 3. The NOTIFY Extension
- IMAP servers that support this extension advertise the NOTIFY
- capability. This extension adds the NOTIFY command as defined in
- Section 5.1.
- A server implementing this extension is not required to implement
- LIST-EXTENDED [RFC5258], even though a NOTIFY-compliant server must
- be able to return extended LIST responses, defined in [RFC5258].
- 3.1. The NOTIFY Command
- Arguments: "SET"
- Optional STATUS indicator
- Mailboxes to be watched
- Events about which to notify the client
- Or
- Arguments: "NONE"
- Responses: Possibly untagged STATUS responses (for SET)
- Result: OK - The server will notify the client as requested.
- NO - Unsupported NOTIFY event, NOTIFY too complex or
- expensive, etc.
- BAD - Command unknown, invalid, unsupported, or has
- unknown arguments.
- Gulbrandsen, et al. Standards Track [Page 4]
- RFC 5465 IMAP NOTIFY Extension February 2009
- The NOTIFY command informs the server that the client listens for
- event notifications all the time (even when no command is in
- progress), and requests the server to notify it about the specified
- set of events. The NOTIFY command has two forms. NOTIFY NONE
- specifies that the client is not interested in any kind of event
- happening on the server. NOTIFY SET replaces the current list of
- interesting events with a new list of events.
- Until the NOTIFY command is used for the first time, the server only
- sends notifications while a command is being processed, and notifies
- the client about these events on the selected mailbox (see Section 5
- for definitions): MessageNew, MessageExpunge, or FlagChange. It does
- not notify the client about any events on other mailboxes.
- The effect of a successful NOTIFY command lasts until the next NOTIFY
- command or until the IMAP connection is closed.
- A successful NOTIFY SET command MUST cause the server to immediately
- return any accumulated changes to the currently selected mailbox (if
- any), such as flag changes and new or expunged messages. Thus, a
- successful NOTIFY SET command implies an implicit NOOP command.
- The NOTIFY SET command can request notifications of message-related
- changes to the selected mailbox, whatever that may be at the time the
- message notifications are being generated. This is done by
- specifying either the SELECTED or the SELECTED-DELAYED mailbox
- selector (see Section 6.1) in the NOTIFY SET command. If the
- SELECTED/SELECTED-DELAYED mailbox selector is not specified in the
- NOTIFY SET command, this means that the client doesn't want to
- receive any <message-event>s for the currently selected mailbox.
- This is the same as specifying SELECTED NONE.
- The client can also request notifications on other mailboxes by name
- or by a limited mailbox pattern match. Message-related notifications
- returned for the currently selected mailbox will be those specified
- by the SELECTED/SELECTED-DELAYED mailbox specifier, even if the
- selected mailbox also appears by name (or matches a pattern) in the
- command. Non-message-related notifications are controlled by mailbox
- specifiers other than SELECTED/SELECTED-DELAYED.
- If the NOTIFY command enables MessageNew, MessageExpunge,
- AnnotationChange, or FlagChange notifications for a mailbox other
- than the currently selected mailbox, and the client has specified the
- STATUS indicator parameter, then the server MUST send a STATUS
- response for that mailbox before NOTIFY's tagged OK. If MessageNew
- is enabled, the STATUS response MUST contain MESSAGES, UIDNEXT, and
- UIDVALIDITY. If MessageExpunge is enabled, the STATUS response MUST
- contain MESSAGES. If either AnnotationChange or FlagChange are
- Gulbrandsen, et al. Standards Track [Page 5]
- RFC 5465 IMAP NOTIFY Extension February 2009
- included and the server also supports the CONDSTORE [RFC4551] and/or
- QRESYNC [RFC5162] extensions, the STATUS response MUST contain
- UIDVALIDITY and HIGHESTMODSEQ. Absence of the STATUS indicator
- parameter allows the client to avoid the additional STATUS responses.
- This might be useful if the client already retrieved this information
- before issuing the NOTIFY command.
- Clients are advised to limit the number of mailboxes used with
- NOTIFY. Particularly, if a client asks for events for all accessible
- mailboxes, the server may swamp the client with updates about shared
- mailboxes. This may reduce the client's battery life. Also, this
- wastes both server and network resources.
- For each mailbox specified, the server verifies that the client has
- access using the following test:
- - If the name does not refer to an existing mailbox, the server MUST
- ignore it.
- - If the name refers to a mailbox that the client can't LIST, the
- server MUST ignore it. For a server that implements [RFC4314],
- this means that if the client doesn't have the 'l' (lookup) right
- for the name, then the server MUST ignore the mailbox. This
- behavior prevents disclosure of potentially confidential
- information to clients who don't have rights to know it.
- - If the name refers to a mailbox that the client can LIST (e.g., it
- has the 'l' right from [RFC4314]), but the client doesn't have
- another right required for processing of the specified event(s),
- then the server MUST respond with an untagged extended LIST
- response containing the \NoAccess name attribute.
- The server SHOULD return the tagged OK response if the client has
- access to at least one of the mailboxes specified in the current list
- of interesting events. The server MAY return the tagged NO response
- if the client has no access to any of the specified mailboxes and no
- access can ever be granted in the future (e.g., the client specified
- an event for 'Subtree Bar/Foo', 'Bar/Foo' doesn't exist, and LIST
- returns \Noinferiors for the parent 'Bar').
- If the notification would be prohibitively expensive for the server
- (e.g., "notify me of all flag changes in all mailboxes"), the server
- MAY refuse the command with a tagged NO [NOTIFICATIONOVERFLOW]
- response.
- Gulbrandsen, et al. Standards Track [Page 6]
- RFC 5465 IMAP NOTIFY Extension February 2009
- If the client requests information for events of an unsupported type,
- the server MUST refuse the command with a tagged NO response (not a
- BAD). This response SHOULD contain the BADEVENT response code, which
- MUST list names of all events supported by the server.
- Here's an example:
- S: * OK [CAPABILITY IMAP4REV1 NOTIFY]
- C: a login bob alice
- S: a OK Password matched
- C: b notify set status (selected MessageNew (uid
- body.peek[header.fields (from to subject)]) MessageExpunge)
- (subtree Lists MessageNew)
- S: * STATUS Lists/Lemonade (UIDVALIDITY 4 UIDNEXT 9999 MESSAGES
- 500)
- S: [...]
- S: * STATUS Lists/Im2000 (UIDVALIDITY 901 UIDNEXT 1 MESSAGES 0)
- S: b OK done
- C: c select inbox
- S: [...] (the usual 7-8 responses to SELECT)
- S: c OK INBOX selected
- (Time passes. A new message is delivered to mailbox
- Lists/Lemonade.)
- S: * STATUS Lists/Lemonade (UIDVALIDITY 4 UIDNEXT 10000
- MESSAGES 501)
- (Time passes. A new message is delivered to inbox.)
- S: * 127 FETCH (UID 127001 BODY[HEADER.FIELDS (From To
- Subject)] {75}
- S: Subject: Re: good morning
- S: From: alice@example.org
- S: To: bob@example.org
- S:
- S: )
- (Time passes. The client decides it wants to know about
- one more mailbox. As the client already knows necessary
- STATUS information for all mailboxes below the Lists
- mailbox, and because "notify set status" would cause
- STATUS responses for *all* mailboxes specified in the
- NOTIFY command, including the ones for which the client
- already knows STATUS information, the client issues an
- explicit STATUS request for the mailbox to be added to
- the watch list, followed by the NOTIFY SET without the
- STATUS parameter.)
- C: d STATUS misc (UIDVALIDITY UIDNEXT MESSAGES)
- S: * STATUS misc (UIDVALIDITY 1 UIDNEXT 999)
- S: d STATUS completed
- Gulbrandsen, et al. Standards Track [Page 7]
- RFC 5465 IMAP NOTIFY Extension February 2009
- C: e notify set (selected MessageNew (uid
- body.peek[header.fields (from to subject)]) MessageExpunge)
- (subtree Lists MessageNew) (mailboxes misc MessageNew)
- S: e OK done
- 4. Interaction with the IDLE Command
- If IDLE [RFC2177] (as well as this extension) is supported, then
- while processing any IDLE command, the server MUST send exactly the
- same events as instructed by the client using the NOTIFY command.
- NOTIFY makes IDLE unnecessary for some clients. If a client does not
- use MSNs and '*' in commands, it can request MessageExpunge and
- MessageNew for the selected mailbox by using the NOTIFY command
- instead of entering the IDLE mode.
- A client that uses MSNs and '*' in commands can still use the NOTIFY
- command if it specifies the SELECTED-DELAYED mailbox specifier in the
- NOTIFY command.
- 5. Event Types
- Only some of the events in [RFC5423] can be expressed in IMAP, and
- for some of them there are several possible ways to express the
- event.
- This section specifies the events of which an IMAP server can notify
- an IMAP client, and how.
- The server SHOULD omit notifying the client if the event is caused by
- this client. For example, if the client issues CREATE and has
- requested a MailboxName event that would cover the newly created
- mailbox, the server SHOULD NOT notify the client of the MailboxName
- change.
- All event types described in this document require the 'l' and 'r'
- rights (see [RFC4314]) on all observed mailboxes. Servers that don't
- implement [RFC4314] should map the above rights to their access-
- control model.
- If the FlagChange and/or AnnotationChange events are specified,
- MessageNew and MessageExpunge MUST also be specified by the client.
- Otherwise, the server MUST respond with the tagged BAD response.
- If one of MessageNew or MessageExpunge is specified, then both events
- MUST be specified. Otherwise, the server MUST respond with the
- tagged BAD response.
- Gulbrandsen, et al. Standards Track [Page 8]
- RFC 5465 IMAP NOTIFY Extension February 2009
- The client can instruct the server not to send an event by omitting
- the necessary event from the list of events specified in NOTIFY SET,
- by using the NONE event specifier in the NOTIFY SET, or by using
- NOTIFY NONE. In particular, NOTIFY SET ... NONE can be used as a
- snapshot facility by clients.
- 5.1. FlagChange and AnnotationChange
- If the flag and/or message annotation change happens in the selected
- mailbox, the server MUST notify the client by sending an unsolicited
- FETCH response, which MUST include UID and FLAGS/ANNOTATION FETCH
- data items. It MAY also send new FLAGS and/or OK [PERMANENTFLAGS
- ...] responses.
- If a search context is in effect as specified in [RFC5267], an
- ESEARCH ADDTO or ESEARCH REMOVEFROM will also be generated, if
- appropriate. In this case, the FETCH response MUST precede the
- ESEARCH response.
- If the change happens in another mailbox, then the server responds
- with a STATUS response. The exact content of the STATUS response
- depends on various factors. If CONDSTORE [RFC4551] and/or QRESYNC
- [RFC5162] are enabled by the client, then the server sends a STATUS
- response that includes at least HIGHESTMODSEQ and UIDVALIDITY status
- data items. If the number of messages with the \Seen flag changes,
- the server MAY also include the UNSEEN data item in the STATUS
- response. If CONDSTORE/QRESYNC is not enabled by the client and the
- server chooses not to include the UNSEEN data item, the server does
- not notify the client. When this event is requested, the server MUST
- notify the client about mailbox UIDVALIDITY changes. This is done by
- sending a STATUS response that includes UIDVALIDITY.
- FlagChange covers the MessageRead, MessageTrash, FlagsSet, and
- FlagsClear events in [RFC5423].
- Example in the selected mailbox:
- S: * 99 FETCH (UID 9999 FLAGS ($Junk))
- And in another mailbox, with CONDSTORE in use:
- S: * STATUS Lists/Lemonade (HIGHESTMODSEQ 65666665 UIDVALIDITY
- 101)
- Gulbrandsen, et al. Standards Track [Page 9]
- RFC 5465 IMAP NOTIFY Extension February 2009
- 5.2. MessageNew
- This covers both MessageNew and MessageAppend in [RFC5423].
- If the new/appended message is in the selected mailbox, the server
- notifies the client by sending an unsolicited EXISTS response,
- followed by an unsolicited FETCH response containing the information
- requested by the client. A FETCH response SHOULD NOT be generated
- for a new message created by the client on this particular
- connection, for instance, as the result of an APPEND or COPY command
- to the selected mailbox performed by the client itself. The server
- MAY also send a RECENT response, if the server marks the message as
- \Recent.
- Note that a single EXISTS response can be returned for multiple
- MessageAppend/MessageNew events.
- If a search context is in effect as specified in [RFC5267], an
- ESEARCH ADDTO will also be generated, if appropriate. In this case,
- the EXISTS response MUST precede the ESEARCH response. Both the
- NOTIFY command and the SEARCH and SORT commands (see Section 7) can
- specify attributes to be returned for new messages. These attributes
- SHOULD be combined into a single FETCH response. The server SHOULD
- avoid sending duplicate data. The FETCH response(s) MUST follow any
- ESEARCH ADDTO responses.
- If the new/appended message is in another mailbox, the server sends
- an unsolicited STATUS (UIDNEXT MESSAGES) response for the relevant
- mailbox. If the CONDSTORE extension [RFC4551] and/or the QRESYNC
- extension [RFC5162] is enabled, the HIGHESTMODSEQ status data item
- MUST be included in the STATUS response.
- The client SHOULD NOT use FETCH attributes that implicitly set the
- \seen flag, or that presuppose the existence of a given bodypart.
- UID, MODSEQ, FLAGS, ENVELOPE, BODY.PEEK[HEADER.FIELDS... and
- BODY/BODYSTRUCTURE may be the most useful attributes.
- Note that if a client asks to be notified of MessageNew events with
- the SELECTED mailbox specifier, the number of messages can increase
- at any time, and therefore the client cannot refer to a specific
- message using the MSN/UID '*'.
- Example in the selected mailbox:
- S: * 444 EXISTS
- S: * 444 FETCH (UID 9999)
- And in another mailbox, without CONDSTORE enabled:
- S: * STATUS Lists/Lemonade (UIDNEXT 10002 MESSAGES 503)
- Gulbrandsen, et al. Standards Track [Page 10]
- RFC 5465 IMAP NOTIFY Extension February 2009
- 5.3. MessageExpunge
- If the expunged message or messages are in the selected mailbox, the
- server notifies the client using EXPUNGE (or VANISHED, if [RFC5162]
- is supported by the server and enabled by the client).
- If a search context is in effect, as specified in [RFC5267], an
- ESEARCH REMOVEFROM will also be generated, if appropriate.
- If the expunged message or messages are in another mailbox, the
- server sends an unsolicited STATUS (UIDNEXT MESSAGES) response for
- the relevant mailbox. If the QRESYNC [RFC5162] extension is enabled,
- the HIGHESTMODSEQ data item MUST be included in the STATUS response
- as well.
- Note that if a client requests MessageExpunge with the SELECTED
- mailbox specifier, the meaning of an MSN can change at any time, so
- the client cannot use MSNs in commands anymore. For example, such a
- client cannot use FETCH, but has to use UID FETCH. The meaning of
- '*' can also change when messages are added or expunged. A client
- wishing to keep using MSNs can either use the SELECTED-DELAYED
- mailbox specifier or can avoid using the MessageExpunge event
- entirely.
- The MessageExpunge notification covers both MessageExpunge and
- MessageExpire events from [RFC5423].
- Example in the selected mailbox, without QRESYNC:
- S: * 444 EXPUNGE
- The same example in the selected mailbox, with QRESYNC:
- S: * VANISHED 5444
- And in another mailbox, when QRESYNC is not enabled:
- S: * STATUS misc (UIDNEXT 999 MESSAGES 554)
- 5.4. MailboxName
- These notifications are sent if an affected mailbox name was created
- (with CREATE), deleted (with DELETE), or renamed (with RENAME). For
- a server that implements [RFC4314], granting or revocation of the 'l'
- right to the current user on the affected mailbox MUST be considered
- mailbox creation or deletion, respectively. If a mailbox is created
- or deleted, the mailbox itself and its direct parent (whether it is
- an existing mailbox or not) are considered to be affected.
- Gulbrandsen, et al. Standards Track [Page 11]
- RFC 5465 IMAP NOTIFY Extension February 2009
- The server notifies the client by sending an unsolicited LIST
- response for each affected mailbox name. If, after the event, the
- mailbox name does not refer to a mailbox accessible to the client,
- the \Nonexistent flag MUST be included.
- For each LISTable mailbox renamed, the server sends an extended LIST
- response [RFC5258] for the new mailbox name, containing the OLDNAME
- extended data item with the old mailbox name. When a mailbox is
- renamed, its children are renamed too. No additional MailboxName
- events are sent for children in this case. When INBOX is renamed, a
- new INBOX is assumed to be created. No MailboxName event is sent for
- INBOX in this case.
- If the server automatically subscribes a mailbox when it is created
- or renamed, then the unsolicited LIST response for each affected
- subscribed mailbox name MUST include the \Subscribed attribute (see
- [RFC5258]). The server SHOULD also include \HasChildren or
- \HasNoChildren attributes [RFC5258] as appropriate.
- Example of a newly created mailbox (or granting of the 'l' right on
- the mailbox):
- S: * LIST () "/" "NewMailbox"
- And a deleted mailbox (or revocation of the 'l' right on the
- mailbox):
- S: * LIST (\NonExistent) "." "INBOX.DeletedMailbox"
- Example of a renamed mailbox:
- S: * LIST () "/" "NewMailbox" ("OLDNAME" ("OldMailbox"))
- 5.5. SubscriptionChange
- The server notifies the client by sending an unsolicited LIST
- response for each affected mailbox name. If and only if the mailbox
- is subscribed after the event, the \Subscribed attribute (see
- [RFC5258]) is included. Note that in the LIST response, all mailbox
- attributes MUST be accurately computed (this differs from the
- behavior of the LSUB command).
- Example:
- S: * LIST (\Subscribed) "/" "SubscribedMailbox"
- 5.6. MailboxMetadataChange
- Support for this event type is OPTIONAL unless the METADATA extension
- [RFC5464] is also supported by the server, in which case support for
- this event type is REQUIRED.
- Gulbrandsen, et al. Standards Track [Page 12]
- RFC 5465 IMAP NOTIFY Extension February 2009
- A client willing to receive unsolicited METADATA responses as a
- result of using the MailboxMetadataChange event in the NOTIFY command
- doesn't have to issue ENABLE METADATA.
- The server sends an unsolicited METADATA response (as per Section
- 4.4.2 of [RFC5464]). If possible, only the changed metadata SHOULD
- be included, but if the server can't detect a change to a single
- metadata item, it MAY include all metadata items set on the mailbox.
- If a metadata item is deleted (set to NIL), it MUST always be
- included in the METADATA response.
- Example:
- S: * METADATA "INBOX" /shared/comment
- 5.7. ServerMetadataChange
- Support for this event type is OPTIONAL unless the METADATA or the
- METADATA-SERVER extension [RFC5464] is also supported by the server,
- in which case support for this event type is REQUIRED.
- A client willing to receive unsolicited METADATA responses as a
- result of using the ServerMetadataChange event in the NOTIFY command
- doesn't have to issue ENABLE METADATA or ENABLE METADATA-SERVER.
- The server sends an unsolicited METADATA response (as per Section
- 4.4.2 of [RFC5464]). Only the names of changed metadata entries
- SHOULD be returned in such METADATA responses. If a metadata item is
- deleted (set to NIL), it MUST always be included in the METADATA
- response.
- Example:
- S: * METADATA "" /shared/comment
- 5.8. Notification Overflow
- If the server is unable or unwilling to deliver as many notifications
- as it is being asked to, it may disable notifications for some or all
- clients. It MUST notify these clients by sending an untagged "OK
- [NOTIFICATIONOVERFLOW]" response and behave as if a NOTIFY NONE
- command had just been received.
- Example:
- S: * OK [NOTIFICATIONOVERFLOW] ...A comment can go here...
- Gulbrandsen, et al. Standards Track [Page 13]
- RFC 5465 IMAP NOTIFY Extension February 2009
- 5.9. ACL (Access Control List) Changes
- Even if NOTIFY succeeds, it is still possible to lose access to the
- mailboxes being monitored at a later time. If this happens, the
- server MUST stop monitoring these mailboxes. If access is later
- granted, the server MUST restart event monitoring.
- The server SHOULD return the LIST response with the \NoAccess name
- attribute if and when the mailbox loses the 'l' right. Similarly,
- the server SHOULD return the LIST response with no \NoAccess name
- attribute if the mailbox was previously reported as having \NoAccess
- and the 'l' right is later granted.
- 6. Mailbox Specification
- Mailboxes to be monitored can be specified in several different ways.
- Only 'SELECTED' and 'SELECTED-DELAYED' (Section 6.1) match the
- currently selected mailbox. All other mailbox specifications affect
- other (non-selected) mailboxes.
- Note that multiple <event-group>s can apply to the same mailbox. The
- following example demonstrates this. In this example, MessageNew and
- MessageExpunge events are reported for INBOX, due to the first
- <event-group>. A SubscriptionChange event will also be reported for
- INBOX, due to the second <event-group>.
- C: a notify set (mailboxes INBOX (Messagenew messageExpunge))
- (personal (SubscriptionChange))
- A typical client that supports the NOTIFY extension would ask for
- events on the selected mailbox and some named mailboxes.
- In the next example, the client asks for FlagChange events for all
- personal mailboxes except the currently selected mailbox. This is
- different from the previous example because SELECTED overrides all
- other message event definitions for the currently selected mailbox
- (see Section 3.1).
- C: a notify set (selected (Messagenew (uid flags) messageExpunge))
- (personal (MessageNew FlagChange MessageExpunge))
- 6.1. Mailbox Specifiers Affecting the Currently Selected Mailbox
- Only one of the mailbox specifiers affecting the currently selected
- mailbox can be specified in any NOTIFY command. The two such mailbox
- specifiers (SELECTED and SELECTED-DELAYED) are described below.
- Gulbrandsen, et al. Standards Track [Page 14]
- RFC 5465 IMAP NOTIFY Extension February 2009
- Both refer to the mailbox that was selected using either SELECT or
- EXAMINE (see [RFC3501], Sections 6.3.1 and 6.3.2). When the IMAP
- connection is not in the selected state, such mailbox specifiers
- don't refer to any mailbox.
- The mailbox specifiers only apply to <message-event>s. It is an
- error to specify other types of events with either the SELECTED or
- the SELECTED-DELAYED selector.
- 6.1.1. Selected
- The SELECTED mailbox specifier requires the server to send immediate
- notifications for the currently selected mailbox about all specified
- <message-event>s.
- 6.1.2. Selected-Delayed
- The SELECTED-DELAYED mailbox specifier requires the server to delay a
- MessageExpunge event until the client issues a command that allows
- returning information about expunged messages (see Section 7.4.1 of
- [RFC3501] for more details), for example, till a NOOP or an IDLE
- command has been issued. When SELECTED-DELAYED is specified, the
- server MAY also delay returning other <message-event>s until the
- client issues one of the commands specified above, or it MAY return
- them immediately.
- 6.2. Personal
- Personal refers to all selectable mailboxes in the user's personal
- namespace(s), as defined in [RFC2342].
- 6.3. Inboxes
- Inboxes refers to all selectable mailboxes in the user's personal
- namespace(s) to which messages may be delivered by a Message Delivery
- Agent (MDA) (see [EMAIL-ARCH], particularly Section 4.3.3).
- If the IMAP server cannot easily compute this set, it MUST treat
- "inboxes" as equivalent to "personal".
- 6.4. Subscribed
- Subscribed refers to all mailboxes subscribed to by the user.
- If the subscription list changes, the server MUST reevaluate the
- list.
- Gulbrandsen, et al. Standards Track [Page 15]
- RFC 5465 IMAP NOTIFY Extension February 2009
- 6.5. Subtree
- Subtree is followed by a mailbox name or list of mailbox names. A
- subtree refers to all selectable mailboxes that are subordinate to
- the specified mailbox plus the specified mailbox itself.
- 6.6. Mailboxes
- Mailboxes is followed by a mailbox name or a list of mailbox names.
- The server MUST NOT do a wildcard expansion. This means there is no
- special treatment for the LIST wildcard characters ('*' and '%') if
- they are present in mailbox names.
- 7. Extension to SEARCH and SORT Commands
- If the server that supports the NOTIFY extension also supports
- CONTEXT=SEARCH and/or CONTEXT=SORT as defined in [RFC5267], the
- UPDATE return option is extended so that a client can request that
- FETCH attributes be returned when a new message is added to the
- context result set.
- For example:
- C: a00 SEARCH RETURN (COUNT UPDATE (UID BODY[HEADER.FIELDS (TO
- FROM SUBJECT)])) FROM "boss"
- S: * ESEARCH (TAG "a00") (COUNT 17)
- S: a00 OK
- [...a new message is delivered...]
- S: * EXISTS 93
- S: * 93 FETCH (UID 127001 BODY[HEADER.FIELDS (FROM TO SUBJECT)]
- {76}
- S: Subject: Re: good morning
- S: From: myboss@example.org
- S: To: bob@example.org
- S:
- S: )
- S: * ESEARCH (TAG "a00") ADDTO (0 93)
- Note that the EXISTS response MUST precede any FETCH responses, and
- together they MUST precede the ESEARCH response.
- No untagged FETCH response SHOULD be returned if a message becomes a
- member of UPDATE SEARCH due to flag or annotation changes.
- Gulbrandsen, et al. Standards Track [Page 16]
- RFC 5465 IMAP NOTIFY Extension February 2009
- 8. Formal Syntax
- The following syntax specification uses the Augmented Backus-Naur
- Form (ABNF) notation as specified in [RFC5234]. [RFC3501] defines
- the non-terminals "capability", "command-auth", "mailbox", "mailbox-
- data", "resp-text-code", and "search-key". The "modifier-update"
- non-terminal is defined in [RFC5267]. "mbx-list-oflag" is defined in
- [RFC3501] and updated by [RFC5258].
- Except as noted otherwise, all alphabetic characters are case-
- insensitive. The use of upper or lower case characters to define
- token strings is for editorial clarity only. Implementations MUST
- accept these strings in a case-insensitive fashion. For example, the
- <filter-mailboxes-selected> non-terminal value "SELECTED" must be
- treated in the same way as "Selected" or "selected".
- capability =/ "NOTIFY"
- command-auth =/ notify
- notify = "NOTIFY" SP
- (notify-set / notify-none)
- notify-set = "SET" [status-indicator] SP event-groups
- ; Replace registered notification events
- ; with the specified list of events
- notify-none = "NONE"
- ; Cancel all registered notification
- ; events. The client is not interested
- ; in receiving any events.
- status-indicator = SP "STATUS"
- one-or-more-mailbox = mailbox / many-mailboxes
- many-mailboxes = "(" mailbox *(SP mailbox) ")"
- event-groups = event-group *(SP event-group)
- event-group = "(" filter-mailboxes SP events ")"
- ;; Only <message-event>s are allowed in <events>
- ;; when <filter-mailboxes-selected> is used.
- filter-mailboxes = filter-mailboxes-selected /
- filter-mailboxes-other
- Gulbrandsen, et al. Standards Track [Page 17]
- RFC 5465 IMAP NOTIFY Extension February 2009
- filter-mailboxes-other = "inboxes" / "personal" / "subscribed" /
- ( "subtree" SP one-or-more-mailbox ) /
- ( "mailboxes" SP one-or-more-mailbox )
- filter-mailboxes-selected = "selected" / "selected-delayed"
- ;; Apply to the currently selected mailbox only.
- ;; Only one of them can be specified in a NOTIFY
- ;; command.
- events = ( "(" event *(SP event) ")" ) / "NONE"
- ;; As in [MSGEVENT].
- ;; "NONE" means that the client does not wish
- ;; to receive any events for the specified
- ;; mailboxes.
- event = message-event /
- mailbox-event / user-event / event-ext
- message-event = ( "MessageNew" [SP
- "(" fetch-att *(SP fetch-att) ")" ] )
- / "MessageExpunge"
- / "FlagChange"
- / "AnnotationChange"
- ;; "MessageNew" includes "MessageAppend" from
- ;; [MSGEVENT]. "FlagChange" is any of
- ;; "MessageRead", "MessageTrash", "FlagsSet",
- ;; "FlagsClear" [MSGEVENT]. "MessageExpunge"
- ;; includes "MessageExpire" [MSGEVENT].
- ;; MessageNew and MessageExpunge MUST always
- ;; be specified together. If FlagChange is
- ;; specified, then MessageNew and MessageExpunge
- ;; MUST be specified as well.
- ;; The fett-att list may only be present for the
- ;; SELECTED/SELECTED-DELAYED mailbox filter
- ;; (<filter-mailboxes>).
- mailbox-event = "MailboxName" /
- "SubscriptionChange" / "MailboxMetadataChange"
- ; "SubscriptionChange" includes
- ; MailboxSubscribe and MailboxUnSubscribe.
- ; "MailboxName" includes MailboxCreate,
- ; "MailboxDelete" and "MailboxRename".
- user-event = "ServerMetadataChange"
- event-ext = atom
- ;; For future extensions
- Gulbrandsen, et al. Standards Track [Page 18]
- RFC 5465 IMAP NOTIFY Extension February 2009
- oldname-extended-item = "OLDNAME" SP "(" mailbox ")"
- ;; Extended data item (mbox-list-extended-item)
- ;; returned in a LIST response when a mailbox is
- ;; renamed.
- ;; Note 1: the OLDNAME tag can be returned
- ;; with or without surrounding quotes, as per
- ;; mbox-list-extended-item-tag production.
- resp-text-code =/ "NOTIFICATIONOVERFLOW" /
- unsupported-events-code
- message-event-name = "MessageNew" /
- "MessageExpunge" / "FlagChange" /
- "AnnotationChange"
- event-name = message-event-name / mailbox-event /
- user-event
- unsupported-events-code = "BADEVENT"
- SP "(" event-name *(SP event-name) ")"
- modifier-update = "UPDATE"
- [ "(" fetch-att *(SP fetch-att) ")" ]
- mbx-list-oflag =/ "\NoAccess"
- 9. Security Considerations
- It is very easy for a client to deny itself service using NOTIFY.
- Asking for all events on all mailboxes may work on a small server,
- but with a big server, can swamp the client's network connection or
- processing capability. In the worst case, the server's processing
- could also degrade the service it offers to other clients.
- Server authors should be aware that if a client issues requests and
- does not listen to the resulting responses, the TCP window can easily
- fill up, and a careless server might block. This problem also exists
- in plain IMAP; however, this extension magnifies the problem.
- This extension makes it possible to retrieve messages immediately
- when they are added to the mailbox. This makes it wholly impractical
- to delete sensitive messages using programs like imapfilter. Using
- SIEVE [RFC5228] or similar is much better.
- Gulbrandsen, et al. Standards Track [Page 19]
- RFC 5465 IMAP NOTIFY Extension February 2009
- 10. IANA Considerations
- The IANA has added NOTIFY to the list of IMAP extensions.
- 10.1. Initial LIST-EXTENDED Extended Data Item Registrations
- The following entry has been added to the LIST-EXTENDED response
- registry [RFC5258]:
- To: iana@iana.org
- Subject: Registration of OLDNAME LIST-EXTENDED extended data item
- LIST-EXTENDED extended data item tag: OLDNAME
- LIST-EXTENDED extended data item description: The OLDNAME extended
- data item describes the old mailbox name for the mailbox
- identified by the LIST response.
- Which LIST-EXTENDED option(s) (and their types) causes this extended
- data item to be returned (if any): none
- Published specification : RFC 5465, Section 5.4.
- Security considerations: none
- Intended usage: COMMON
- Person and email address to contact for further information: Alexey
- Melnikov <Alexey.Melnikov@isode.com>
- Owner/Change controller: iesg@ietf.org
- 11. Acknowledgments
- The authors gratefully acknowledge the help of Peter Coates, Dave
- Cridland, Mark Crispin, Cyrus Daboo, Abhijit Menon-Sen, Timo
- Sirainen, and Eric Burger. In particular, Peter Coates contributed
- lots of text and useful suggestions to this document.
- Various examples are copied from other RFCs.
- This document builds on one published and two unpublished drafts by
- the same authors.
- Gulbrandsen, et al. Standards Track [Page 20]
- RFC 5465 IMAP NOTIFY Extension February 2009
- 12. Normative References
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
- [RFC2177] Leiba, B., "IMAP4 IDLE command", RFC 2177, June 1997.
- [RFC2342] Gahrns, M. and C. Newman, "IMAP4 Namespace", RFC 2342,
- May 1998.
- [RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION
- 4rev1", RFC 3501, March 2003.
- [RFC4314] Melnikov, A., "IMAP4 Access Control List (ACL)
- Extension", RFC 4314, December 2005.
- [RFC4466] Melnikov, A. and C. Daboo, "Collected Extensions to
- IMAP4 ABNF", RFC 4466, April 2006.
- [RFC4551] Melnikov, A. and S. Hole, "IMAP Extension for
- Conditional STORE Operation or Quick Flag Changes
- Resynchronization", RFC 4551, June 2006.
- [RFC5162] Melnikov, A., Cridland, D., and C. Wilson, "IMAP4
- Extensions for Quick Mailbox Resynchronization", RFC
- 5162, March 2008.
- [RFC5234] Crocker, D., Ed., and P. Overell, "Augmented BNF for
- Syntax Specifications: ABNF", STD 68, RFC 5234, January
- 2008.
- [RFC5258] Leiba, B. and A. Melnikov, "Internet Message Access
- Protocol version 4 - LIST Command Extensions", RFC 5258,
- June 2008.
- [RFC5267] Cridland, D. and C. King, "Contexts for IMAP4", RFC
- 5267, July 2008.
- [RFC5423] Newman, C. and R. Gellens, "Internet Message Store
- Events", RFC 5423, Month 2009.
- [RFC5464] Daboo, C., "The IMAP METADATA Extension", RFC 5464,
- February 2009.
- 13. Informative References
- [RFC5228] Guenther, P., Ed., and T. Showalter, Ed., "Sieve: An
- Email Filtering Language", RFC 5228, January 2008.
- Gulbrandsen, et al. Standards Track [Page 21]
- RFC 5465 IMAP NOTIFY Extension February 2009
- [EMAIL-ARCH] Crocker, D., "Internet Mail Architecture", Work in
- Progress, October 2008.
- Authors' Addresses
- Arnt Gulbrandsen
- Oryx Mail Systems GmbH
- Schweppermannstr. 8
- D-81671 Muenchen
- Germany
- EMail: arnt@oryx.com
- Curtis King
- Isode Ltd
- 5 Castle Business Village
- 36 Station Road
- Hampton, Middlesex TW12 2BX
- UK
- EMail: Curtis.King@isode.com
- Alexey Melnikov
- Isode Ltd
- 5 Castle Business Village
- 36 Station Road
- Hampton, Middlesex TW12 2BX
- UK
- EMail: Alexey.Melnikov@isode.com
- Gulbrandsen, et al. Standards Track [Page 22]
|