mirror of
https://github.com/uw-imap/imap.git
synced 2024-11-16 10:28:23 +01:00
22f316e36d
MD5 2126fd125ea26b73b20f01fcd5940369
508 lines
16 KiB
Plaintext
508 lines
16 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Network Working Group A. Melnikov
|
||
Request for Comments: 3503 ACI Worldwide/MessagingDirect
|
||
Category: Standards Track March 2003
|
||
|
||
|
||
Message Disposition Notification (MDN) profile for
|
||
Internet Message Access Protocol (IMAP)
|
||
|
||
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) The Internet Society (2003). All Rights Reserved.
|
||
|
||
Abstract
|
||
|
||
The Message Disposition Notification (MDN) facility defined in RFC
|
||
2298 provides a means by which a message can request that message
|
||
processing by the recipient be acknowledged as well as a format to be
|
||
used for such acknowledgements. However, it doesn't describe how
|
||
multiple Mail User Agents (MUAs) should handle the generation of MDNs
|
||
in an Internet Message Access Protocol (IMAP4) environment.
|
||
|
||
This document describes how to handle MDNs in such an environment and
|
||
provides guidelines for implementers of IMAP4 that want to add MDN
|
||
support to their products.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Melnikov Standards Track [Page 1]
|
||
|
||
RFC 3503 MDN profile for IMAP March 2003
|
||
|
||
|
||
Table of Contents
|
||
|
||
1. Conventions Used in this Document............................. 2
|
||
2. Introduction and Overview..................................... 2
|
||
3. Client behavior............................................... 3
|
||
3.1. Client behavior when receiving a message................. 5
|
||
3.2. Client behavior when copying a message................... 5
|
||
3.3. Client behavior when sending a message................... 5
|
||
3.4. Client behavior when saving a temporary message.......... 5
|
||
4. Server behavior............................................... 5
|
||
4.1. Server that supports arbitrary keywords.................. 5
|
||
4.2. Server that supports only $MDNSent keyword............... 5
|
||
4.3. Interaction with IMAP ACL extension...................... 6
|
||
5. Examples...................................................... 6
|
||
6. Security Considerations....................................... 7
|
||
7. Formal Syntax................................................. 7
|
||
8. Acknowledgments............................................... 7
|
||
9. Normative References.......................................... 8
|
||
10. Author's Address.............................................. 8
|
||
11. Full Copyright Statement...................................... 9
|
||
|
||
1. Conventions Used in this Document
|
||
|
||
"C:" and "S:" in examples show lines sent by the client and server
|
||
respectively.
|
||
|
||
The keywords "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY" in
|
||
this document when typed in uppercase are to be interpreted as
|
||
defined in "Key words for use in RFCs to Indicate Requirement Levels"
|
||
[KEYWORDS].
|
||
|
||
2. Introduction and Overview
|
||
|
||
This memo defines an additional [IMAP4] mailbox keyword that allows
|
||
multiple Mail User Agents (MUAs) to know if a requested receipt
|
||
notification was sent.
|
||
|
||
Message Disposition Notification [MDN] does not require any special
|
||
support of IMAP in the case where a user has access to the mailstore
|
||
from only one computer and is using a single MUA. In this case, the
|
||
MUA behaves as described in [MDN], i.e., the MUA performs automatic
|
||
processing and generates corresponding MDNs, it performs requested
|
||
action and, with the user's permission, sends appropriate MDNs. The
|
||
MUA will not send MDN twice because the MUA keeps track of sent
|
||
notifications in a local configuration. However, that does not work
|
||
when IMAP is used to access the same mailstore from different
|
||
locations or is using different MUAs.
|
||
|
||
|
||
|
||
|
||
Melnikov Standards Track [Page 2]
|
||
|
||
RFC 3503 MDN profile for IMAP March 2003
|
||
|
||
|
||
This document defines a new special purpose mailbox keyword $MDNSent
|
||
that must be used by MUAs. It does not define any new command or
|
||
response for IMAP, but describes a technique that MUAs should use to
|
||
achieve interoperability.
|
||
|
||
When a client opens a mailbox for the first time, it verifies that
|
||
the server is capable of storing the $MDNSent keyword by examining
|
||
the PERMANENTFLAGS response code. In order to support MDN in IMAP, a
|
||
server MUST support either the $MDNSent keyword, or arbitrary message
|
||
keywords.
|
||
|
||
3. Client behavior
|
||
|
||
The use of IMAP requires few additional steps in mail processing on
|
||
the client side. The following timeline modifies the timeline found
|
||
in Section 4 of [MDN].
|
||
|
||
-- User composes message.
|
||
|
||
-- User tells MUA to send message.
|
||
|
||
-- MUA passes message to MSA (original recipient information passed
|
||
along). MUA [optionally] saves message to a folder for sent mail
|
||
with $MDNSent flag set.
|
||
|
||
-- MSA sends message to MTA.
|
||
|
||
-- Final MTA receives message.
|
||
|
||
-- Final MTA delivers message to MUA (possibly generating DSN).
|
||
|
||
-- MUA logs into IMAP server, opens mailbox, verifies if mailbox can
|
||
store $MDNSent keyword by examining PERMANENTFLAGS response.
|
||
|
||
-- MUA performs automatic processing and generates corresponding MDNs
|
||
("dispatched", "processed", "deleted", "denied" or "failed"
|
||
disposition type with "automatic-action" and "MDN-sent-
|
||
automatically" disposition modes) for messages that do not have
|
||
$MDNSent keyword, or \Draft flag set. (*)
|
||
|
||
-- MUA sets the $MDNSent keyword for every message that required an
|
||
automatic MDN to be sent, whether or not the MDN was sent.
|
||
|
||
-- MUA displays a list of messages to user.
|
||
|
||
-- User selects a message and requests that some action be performed
|
||
on it.
|
||
|
||
|
||
|
||
|
||
Melnikov Standards Track [Page 3]
|
||
|
||
RFC 3503 MDN profile for IMAP March 2003
|
||
|
||
|
||
-- MUA performs requested action and, with user's permission, sends
|
||
appropriate MDN ("displayed", "dispatched", "processed",
|
||
"deleted", "denied" or "failed" disposition type with "manual-
|
||
action" and "MDN-sent-manually" or "MDN-sent-automatically"
|
||
disposition mode). If the generated MDN is saved to a mailbox
|
||
with the APPEND command, the client MUST specify the $MDNSent
|
||
keyword in the APPEND.
|
||
|
||
-- MUA sets the $MDNSent keyword for all messages for which the user
|
||
confirmed the dispatching of disposition (or was explicitly
|
||
prohibited to do so).
|
||
|
||
-- User possibly performs other actions on message, but no further
|
||
MDNs are generated.
|
||
|
||
(*) Note: MUA MUST NOT use \Recent flag as an indicator that it
|
||
should send MDN, because according to [IMAP4], "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". Thus, using \Recent as an indicator will cause
|
||
unpredictable client behavior with different IMAP4 servers.
|
||
However, the client MAY use \Seen flag as one of the indicators
|
||
that MDN must not be sent. The client MUST NOT use any other
|
||
standard flags, like \Draft or \Answered, to indicate that MDN
|
||
was previously sent, because they have different well known
|
||
meaning. In any case, in the presence of the $MDNSent keyword,
|
||
the client MUST ignore all other flags or keywords for the
|
||
purpose of generating an MDN and MUST NOT send the MDN.
|
||
|
||
When the client opens a mailbox for the first time, it must verify
|
||
that the server supports the $MDNSent keyword, or arbitrary message
|
||
keywords by examining PERMANENTFLAGS response code.
|
||
|
||
The client MUST NOT try to set the $MDNSent keyword if the server is
|
||
incapable of storing it permanently.
|
||
|
||
The client MUST be prepared to receive NO from the server as the
|
||
result of STORE $MDNSent when the server advertises the support of
|
||
storing arbitrary keywords, because the server may limit the number
|
||
of message keywords it can store in a particular mailbox. A client
|
||
SHOULD NOT send MDN if it fails to store the $MDNSent keyword.
|
||
|
||
Once the $MDNSent keyword is set, it MUST NOT be unset by a client.
|
||
The client MAY set the $MDNSent keyword when a user denies sending
|
||
the notification. This prohibits all other MUAs from sending MDN for
|
||
this message.
|
||
|
||
|
||
|
||
|
||
Melnikov Standards Track [Page 4]
|
||
|
||
RFC 3503 MDN profile for IMAP March 2003
|
||
|
||
|
||
3.1. Client behavior when receiving a message
|
||
|
||
The client MUST NOT send MDN if a message has the $MDNSent keyword
|
||
set. It also MUST NOT send MDN if a message has \Draft flag, because
|
||
some clients use this flag to mark a message as incomplete.
|
||
|
||
See the timeline in section 3 for details on client behavior when
|
||
receiving a message.
|
||
|
||
3.2. Client behavior when copying a message
|
||
|
||
The client SHOULD verify that $MDNSent is preserved on a COPY
|
||
operation. Furthermore, when a message is copied between servers
|
||
with the APPEND command, the client MUST set the $MDNSent keyword
|
||
correctly.
|
||
|
||
3.3. Client behavior when sending a message
|
||
|
||
When saving a sent message to any folder, the client MUST set the
|
||
$MDNSent keyword to prevent another client from sending MDN for the
|
||
message.
|
||
|
||
3.4. Client behavior when saving a temporary message
|
||
|
||
When saving an unfinished message to any folder client MUST set
|
||
$MDNSent keyword to prevent another client from sending MDN for the
|
||
message.
|
||
|
||
4. Server behavior
|
||
|
||
Server implementors that want to follow this specification must
|
||
insure that their server complies with either section 4.1 or section
|
||
4.2. If the server also supports the IMAP [ACL] extension, it MUST
|
||
also comply with the section 4.3.
|
||
|
||
4.1. Server that supports arbitrary keywords
|
||
|
||
No changes are required from the server to make it compatible with
|
||
the extension described in this document if it supports arbitrary
|
||
keywords.
|
||
|
||
4.2. Server that supports only $MDNSent keyword
|
||
|
||
Servers that support only the $MDNSent keyword MUST preserve it on
|
||
the COPY operation. It is also expected that a server that supports
|
||
SEARCH <flag> will also support the SEARCH KEYWORD $MDNSent.
|
||
|
||
|
||
|
||
|
||
|
||
Melnikov Standards Track [Page 5]
|
||
|
||
RFC 3503 MDN profile for IMAP March 2003
|
||
|
||
|
||
4.3. Interaction with IMAP ACL extension
|
||
|
||
Any server that conforms to either 4.1 or 4.2 and also supports the
|
||
IMAP [ACL] extension, SHOULD preserve the $MDNSent keyword on COPY
|
||
even if the client does not have 'w' right. This will prevent the
|
||
generation of a duplicated MDN for the same message. Note that the
|
||
server MUST still check if the client has rights to perform the COPY
|
||
operation on a message according to [ACL].
|
||
|
||
5. Examples
|
||
|
||
1) MUA opens mailbox for the first time.
|
||
|
||
a) The server supports storing of arbitrary keywords
|
||
|
||
C: a100 select INBOX
|
||
S: * FLAGS (\Flagged \Draft \Deleted \Seen)
|
||
S: * OK [PERMANENTFLAGS (\Flagged \Draft \Deleted \Seen \*)]
|
||
S: * 5 EXISTS
|
||
S: * 3 RECENT
|
||
S: * OK [UIDVALIDITY 894294713]
|
||
S: a100 OK [READ-WRITE] Completed
|
||
|
||
b) The server supports storing of the $MDNSent keyword
|
||
|
||
C: a100 select INBOX
|
||
S: * FLAGS (\Flagged \Draft \Deleted \Seen $MDNSent)
|
||
S: * OK [PERMANENTFLAGS (\Flagged \Draft \Deleted \Seen $MDNSent)]
|
||
S: * 5 EXISTS
|
||
S: * 3 RECENT
|
||
S: * OK [UIDVALIDITY 894294713]
|
||
S: a100 OK [READ-WRITE] Completed
|
||
|
||
2) The MUA successfully sets the $MDNSent keyword
|
||
|
||
C: a200 STORE 4 +FLAGS ($MDNSent)
|
||
S: * 4 FETCH (FLAGS (\Flagged \Seen $MDNSent))
|
||
S: * FLAGS ($MDNSent \Flagged \Deleted \Draft \Seen)
|
||
S: * OK [PERMANENTFLAGS ($MDNSent \Flagged \Deleted \Draft \Seen \*)]
|
||
S: a200 OK STORE completed
|
||
|
||
3) The server refuses to store the $MDNSent keyword
|
||
|
||
C: a200 STORE 4 +FLAGS ($MDNSent)
|
||
S: a200 NO STORE failed : no space left to store $MDNSent keyword
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Melnikov Standards Track [Page 6]
|
||
|
||
RFC 3503 MDN profile for IMAP March 2003
|
||
|
||
|
||
4) All clients and servers MUST treat the $MDNSent keyword as case
|
||
insensitive in all operations, as stated in [IMAP].
|
||
|
||
C: a300 FETCH 1:* FLAGS
|
||
S: * 1 FETCH (FLAGS (\Seen))
|
||
S: * 2 FETCH (FLAGS (\Answered \Seen $MdnSENt))
|
||
S: * 3 FETCH (FLAGS ())
|
||
S: * 4 FETCH (FLAGS (\Flagged \Seen $MdnSENT))
|
||
S: * 5 FETCH (FLAGS ($MDNSent))
|
||
S: * 6 FETCH (FLAGS (\Recent))
|
||
S: a300 OK FETCH completed
|
||
C: a400 SEARCH KEYWORDS $mdnsent
|
||
S: * SEARCH 2 4 5
|
||
S: a400 OK SEARCH completed
|
||
|
||
6. Security Considerations
|
||
|
||
There are no known security issues with this extension, not found in
|
||
[MDN] and/or [IMAP4].
|
||
|
||
Section 4.3 changes ACL checking requirements on an IMAP server that
|
||
implements IMAP [ACL] extension.
|
||
|
||
7. Formal Syntax
|
||
|
||
The following syntax specification uses the augmented Backus-Naur
|
||
Form (BNF) notation as specified in [RFC-822], as modified by
|
||
[IMAP4]. Non-terminals referenced, but not defined below, are as
|
||
defined by [IMAP4].
|
||
|
||
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.
|
||
|
||
flag_keyword ::= "$MDNSent" / other_keywords
|
||
|
||
other_keywords ::= atom
|
||
|
||
8. Acknowledgments
|
||
|
||
This document is the product of discussions that took place on the
|
||
IMAP mailing list. Special gratitude to Cyrus Daboo and Randall
|
||
Gellens for reviewing the document.
|
||
|
||
Thank you to my father who as he has helped to make me what I am. I
|
||
miss you terribly.
|
||
|
||
|
||
|
||
|
||
Melnikov Standards Track [Page 7]
|
||
|
||
RFC 3503 MDN profile for IMAP March 2003
|
||
|
||
|
||
9. Normative References
|
||
|
||
[KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate
|
||
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
||
|
||
[MDN] Fajman, R., "An Extensible Message Format for Message
|
||
Disposition Notifications", RFC 2298, March 1998.
|
||
|
||
[IMAP4] Crispin, M., "Internet Message Access Protocol - Version
|
||
4rev1", RFC 3501, March 2003.
|
||
|
||
[ACL] Myers, J., "IMAP4 ACL extension", RFC 2086, January 1997.
|
||
|
||
10. Author's Address
|
||
|
||
Alexey Melnikov
|
||
ACI Worldwide/MessagingDirect
|
||
59 Clarendon Road
|
||
Watford, Hertfordshire
|
||
United Kingdom, WD17 1FQ
|
||
|
||
Phone: +44 1923 81 2877
|
||
EMail: mel@messagingdirect.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Melnikov Standards Track [Page 8]
|
||
|
||
RFC 3503 MDN profile for IMAP March 2003
|
||
|
||
|
||
11. Full Copyright Statement
|
||
|
||
Copyright (C) The Internet Society (2003). All Rights Reserved.
|
||
|
||
This document and translations of it may be copied and furnished to
|
||
others, and derivative works that comment on or otherwise explain it
|
||
or assist in its implementation may be prepared, copied, published
|
||
and distributed, in whole or in part, without restriction of any
|
||
kind, provided that the above copyright notice and this paragraph are
|
||
included on all such copies and derivative works. However, this
|
||
document itself may not be modified in any way, such as by removing
|
||
the copyright notice or references to the Internet Society or other
|
||
Internet organizations, except as needed for the purpose of
|
||
developing Internet standards in which case the procedures for
|
||
copyrights defined in the Internet Standards process must be
|
||
followed, or as required to translate it into languages other than
|
||
English.
|
||
|
||
The limited permissions granted above are perpetual and will not be
|
||
revoked by the Internet Society or its successors or assigns.
|
||
|
||
This document and the information contained herein is provided on an
|
||
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
|
||
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
|
||
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
|
||
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
|
||
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
||
Acknowledgement
|
||
|
||
Funding for the RFC Editor function is currently provided by the
|
||
Internet Society.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Melnikov Standards Track [Page 9]
|
||
|