2377353cae
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
1236 lines
45 KiB
Plaintext
1236 lines
45 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
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]
|
||
|