aboutsummaryrefslogtreecommitdiffstats
path: root/RFC/rfc1203.txt
diff options
context:
space:
mode:
Diffstat (limited to 'RFC/rfc1203.txt')
-rw-r--r--RFC/rfc1203.txt2747
1 files changed, 0 insertions, 2747 deletions
diff --git a/RFC/rfc1203.txt b/RFC/rfc1203.txt
deleted file mode 100644
index a362ca88..00000000
--- a/RFC/rfc1203.txt
+++ /dev/null
@@ -1,2747 +0,0 @@
-
-
-
-
-
-
-Network Working Group J. Rice
-Request for Comments: 1203 Stanford
-Obsoletes: RFC 1064 February 1991
-
-
- INTERACTIVE MAIL ACCESS PROTOCOL - VERSION 3
-
-Status of this Memo
-
- This RFC suggests a method for workstations to access mail
- dynamically from a mailbox server ("repository"). This RFC specifies
- a standard for the SUMEX-AIM community and an Experimental Protocol
- for the Internet community. Discussion and suggestions for
- improvement are requested. Please refer to the current edition of
- the "IAB Official Protocol Standards" for the standardization state
- and status of this protocol. Distribution of this memo is unlimited.
-
-Scope
-
- The following document is a modified version of RFC 1064, the
- definition of the IMAP2 protocol. This RFC has been written
- specifically as a counter proposal to RFC 1176, which itself proposes
- modifications to IMAP2. Sadly, RFC 1176 was made without internal
- consultation with the IMAP community, so we are in a position of
- feeling we have to present a counter proposal to what, if we do not
- act, will become a de facto standard. The reasons for this counter
- proposal are numerous but fall mostly into the following categories:
-
- - IMAP2 is insufficiently powerful for a number of server/client
- interactions which we believe to be important. RFC 1176
- negligibly enhances the functionality of IMAP2.
-
- - IMAP2 makes what we believe to be an erroneous definition for
- unsolicited vs. solicited data. IMAP3 as specified herein
- attempts to correct this. RFC 1176 makes no effort to remedy
- these problems.
-
- - RFC 1176 has explicitly modified the intent of RFC 1064 by
- allowing the server to make assumptions about the client's
- caching architecture. We believe this to be a grave error
- and do not support it in this proposal.
-
- - RFC 1176 specifies a number of "optional" features in the
- protocol without specifying a suitable metaprotocol by which
- servers and clients can adequately negotiate over the set of
- implemented features. This proposal specifies a mechanism
- by which servers and clients can come to an unambiguous
- understanding about which features are usable by each party.
-
-
-
-Rice [Page 1]
-
-RFC 1203 IMAP3 February 1991
-
-
-
- - RFC 1176 pays only lip-service to being network protocol
- independent and, in fact assumes the use of TCP/IP. Neither
- RFC 1064 nor this proposal make any such assumption.
-
- Although there are numerous other detailed objections to RFC 1176, we
- believe that the above will serve to show that we believe strongly in
- the importance of mailbox abstraction level mail protocols and, after
- a couple of years of use of IMAP2 under RFC 1064 we believe that we
- have a good enough understanding of the issues involved to be able to
- take the next step.
-
- It is important to take this next step because of the rapid pace of
- both mail system and user interface development. We believe that,
- for IMAP not to die in its infancy, IMAP must be ready to respond to
- emerging ISO and RFC standards in mail, such as for multi-media mail.
- We believe that RFC 1176 not only provides a very small increment in
- functionality over RFC 1064 but also adds a number of bugs, which
- would be detrimental to the IMAP cause. Thus we propose the
- following definition for IMAP3.
-
-Compatibility notes:
-
- In revising the IMAP2 protocol it has been our intent, wherever
- possible to make upwards compatible changes to produce IMAP3. There
- were, however, some places that had to be changed incompatibly in
- order to compensate for either ambiguities in the IMAP2 protocol as
- defined by RFC 1064 or behavior that proved undesirable in the light
- of experience.
-
- It is our goal, however, that existing IMAP2 clients should still be
- supported and that, at least for the foreseeable future, all IMAP3
- servers will support IMAP2 behavior as their default mode.
-
- The following are the major differences between this proposal, RFC
- 1176 and RFC 1064:
-
- - In this proposal we specify a difference between "solicited" and
- "unsolicited" data sent from the server. It is generally the
- case that data sent by the server can be sent either in response
- to an explicit request by the client or by the server of its own
- volition. Any data that the server is required to sent to the
- client as the result of a request is said to be solicited and
- carries the same tag as the request that provoked it. Any data
- sent by the server to the client that is not required by the
- protocol is said to be unsolicited and carries the special "*"
- tag. RFC 1176 preserves the original RFC 1064 terminology that
- calls all such data sent by the server "unsolicited" even when
-
-
-
-Rice [Page 2]
-
-RFC 1203 IMAP3 February 1991
-
-
- it is, in fact, solicited.
-
- - This proposal introduces the experimental concept of
- distinguishing between Generic, Canonical and Concrete keys,
- allowing the mailbox to be viewed as a relational database
- indexed by these keys. This should allow the IMAP protocol
- to evolve away from its current reliance on RFC 822. RFC 1176
- does not have such a unifying model.
-
- - The SEARCH command has been changed so as to allow multiple
- simultaneous searches to be made and to allow unsolicited
- search messages to be sent by the server. Such a change is
- essential to allow more sophisticated servers that can process
- commands asynchronously, possibly substantially delaying
- searches over slow backing storage media, for example. It is
- also important to allow servers to be able to send unsolicited
- search messages that might inform the client of interesting
- patterns of messages, such as new and unseen mail.
-
- - This proposal introduces a specific protocol for the negotiation
- of protocol versions and server features. This is important
- because it allows client/server pairs to come to an agreement on
- what behavior is really available to it. RFC 1176 introduces a
- number of "optional" commands, which are in some way analogous
- to "feature-introduced" commands in this proposal. The principle
- distinction between these is that in RFC 1176 there is no way
- for a client to discover the set of optional commands, nor is
- there a way for it to determine whether a specific command
- really is supported, since RFC 1176 requires the use of the
- "BAD" response if a feature is not supported. There is,
- therefore, no way for the client to determine why the attempted
- command did not work. This also means that, for example, a
- client cannot disable certain user commands or make them
- invisible on menus if they are not supported, since there
- is no way for the client to discover whether the commands are
- indeed supported without trying to execute such a command.
-
- - This proposal introduces a mechanism for clients to create and
- delete user flags (keywords). This is nor supported in either
- RFC 1176 or RFC 1064, requiring the user to add keys manually
- on the server, generally by editing some form of "init" file.
-
- - RFC 1064 has no mechanism for determining whether a mailbox is
- readonly or not. RFC 1176 introduces a non-enforced convention
- of encoding data about the readonly status of a mailbox in the
- SELECT message's OK respose comment field. This is not regular
- with respect to the rest of the protocol, in which the comment
- field is used for no purpose other than documentation. This
-
-
-
-Rice [Page 3]
-
-RFC 1203 IMAP3 February 1991
-
-
- proposal introduces specific protocol additions for the dynamic
- determination and modification of the readonly/readwrite status
- of mailboxes.
-
-Introduction
-
- The intent of the Interactive Mail Access Protocol, Version 3 (IMAP3)
- is to allow a (possibly unreliable) workstation or similar machine to
- access electronic mail from a reliable mailbox server in an efficient
- manner.
-
- Although different in many ways from POP2 (RFC 937), IMAP3 may be
- thought of as a functional superset of POP2, and the POP2 RFC was
- used as a model for this RFC. There was a cognizant reason for this;
- RFC 937 deals with an identical problem and it was desirable to offer
- a basis for comparison.
-
- Like POP2, IMAP3 specifies a means of accessing stored mail and not
- of posting mail; this function is handled by a mail transfer protocol
- such as SMTP (RFC 821). A comparison with the DMSP protocol of
- PCMAIL can be found at the end of "System Model and Philosophy"
- section.
-
- This protocol assumes a reliable data stream such as provided by TCP
- or any similar protocol. When TCP is used, the IMAP server listens
- on port 220. When CHAOS is used the IMAP server listens for the
- logical contact name "IMAP3".
-
- Communication in IMAP is defined to be using the ASCII character
- interpretation of data. Communication using other conventions may be
- possible by the selection of features on some servers.
-
-System Model and Philosophy
-
- Electronic mail is a primary means of communication for the widely
- spread SUMEX-AIM community. The advent of distributed workstations
- is forcing a significant rethinking of the mechanisms employed to
- manage such mail. With mainframes, each user tends to receive and
- process mail at the computer he used most of the time, his "primary
- host". The first inclination of many users when an independent
- workstation is placed in front of them is to begin receiving mail at
- the workstation, and, in fact, many vendors have implemented
- facilities to do this. However, this approach has several
- disadvantages:
-
- (1) Workstations (especially Lisp workstations) have a software
- design that gives full control of all aspects of the system
- to the user at the console. As a result, background tasks,
-
-
-
-Rice [Page 4]
-
-RFC 1203 IMAP3 February 1991
-
-
- like receiving mail, could well be kept from running for
- long periods of time either because the user is asking to
- use all of the machine's resources, or because, in the course
- of working, the user has (perhaps accidentally) manipulated
- the environment in such a way as to prevent mail reception.
- This could lead to repeated failed delivery attempts by
- outside agents.
-
- (2) The hardware failure of a single workstation could keep its
- user "off the air" for a considerable time, since repair of
- individual workstation units might be delayed. Given the
- growing number of workstations spread throughout office
- environments, quick repair would not be assured, whereas a
- centralized mainframe is generally repaired very soon after
- failure.
-
- (3) It is more difficult to keep track of mailing addresses when
- each person is associated with a distinct machine. Consider
- the difficulty in keeping track of a large number of postal
- addresses or phone numbers, particularly if there was no
- single address or phone number for an organization through
- which you could reach any person in that organization.
- Traditionally, electronic mail on the ARPANET involved
- remembering a name and one of several "hosts" (machines)
- whose name reflected the organization in which the
- individual worked. This was suitable at a time when most
- organizations had only one central host. It is less
- satisfactory today unless the concept of a host is changed
- to refer to an organizational entity and not a particular
- machine.
-
- (4) It is very difficult to keep a multitude of heterogeneous
- workstations working properly with complex mailing protocols,
- making it difficult to move forward as progress is made in
- electronic communication and as new standards emerge. Each
- system has to worry about receiving incoming mail, routing
- and delivering outgoing mail, formatting, storing, and
- providing for the stability of mailboxes over a variety of
- possible filing and mailing protocols.
-
- Consequently, while the workstation may be viewed as an Internet host
- in the sense that it implements IP, it should not be viewed as the
- entity which contains the user's mailbox. Rather, a mail server
- machine (sometimes called a "repository") should hold the mailbox,
- and the workstation (hereafter referred to as a "client") should
- access the mailbox via mail transactions. Because the mail server
- machine would be isolated from direct user manipulation, it could
- achieve high software reliability easily, and, as a shared resource,
-
-
-
-Rice [Page 5]
-
-RFC 1203 IMAP3 February 1991
-
-
- it could achieve high hardware reliability, perhaps through
- redundancy. The mail server could be used from arbitrary locations,
- allowing users to read mail across campus, town, or country using
- more and more commonly available clients. Furthermore, the same user
- may access his mailbox from different clients at different times, and
- multiple users may access the same mailbox simultaneously.
-
- The mail server acts an an interface among users, data storage, and
- other mailers. The mail access protocol is used to retrieve
- messages, access and change properties of messages, and manage
- mailboxes. This differs from some approaches (e.g., Unix mail via
- NFS) in that the mail access protocol is used for all message
- manipulations, isolating the user and the client from all knowledge
- of how the data storage is used. This means that the mail server can
- utilize the data storage in whatever way is most efficient to
- organize the mail in that particular environment, without having to
- worry about storage representation compatibility across different
- machines.
-
- In defining a mail access protocol, it is important to keep in mind
- that the client and server form a macrosystem, in which it should be
- possible to exploit the strong points of both while compensating for
- each other's weaknesses. Furthermore, it's desirable to allow for a
- growth path beyond the hoary text-only RFC 822 protocol. Unlike
- POP2, IMAP3 has extensive features for remote searching and parsing
- of messages on the server. For example, a free text search
- (optionally in conjunction with other searching) can be made
- throughout the entire mailbox by the server and the results made
- available to the client without the client having to transfer the
- entire mailbox and searching itself. Since remote parsing of a
- message into a structured (and standard format) "envelope" is
- available, a client can display envelope information and implement
- commands such as REPLY without having any understanding of how to
- parse RFC 822, etc., headers.
-
- Additionally, IMAP3 offers several facilities for managing a mailbox
- beyond the simple "delete message" functionality of POP2.
-
- In spite of this, IMAP3 is a relatively simple protocol. Although
- servers should implement the full set of IMAP3 functions, a simple
- client can be written which uses IMAP3 in much the way as a POP2
- client.
-
- IMAP3 differs from the DMSP protocol of PCMAIL (RFC 1056) in a more
- fundamental manner, reflecting the differing architectures of IMAP
- and PCMAIL. PCMAIL is either an online ("interactive mode"), or
- offline ("batch mode") system. IMAP is primarily an online system in
- which real-time and simultaneous mail access were considered
-
-
-
-Rice [Page 6]
-
-RFC 1203 IMAP3 February 1991
-
-
- important.
-
- In PCMAIL, there is a long-term client/server relationship in which
- some mailbox state is preserved on the client. There is a
- registration of clients used by a particular user, and the client
- keeps a set of "descriptors" for each message which summarize the
- message. The server and client synchronize their states when the
- DMSP connection starts up, and, if a client has not accessed the
- server for a while, the client does a complete reset (reload) of its
- state from the server.
-
- In IMAP, the client/server relationship lasts only for the duration
- of the IMAP3 connection. All mailbox state is maintained on the
- server. There is no registration of clients. The function of a
- descriptor is handled by a structured representation of the message
- "envelope". This structure makes it unnecessary for a client to know
- anything about RFC 822 parsing. There is no synchronization since
- the client does not remember state between IMAP3 connections. This
- is not a problem since in general the client never needs the entire
- state of the mailbox in a single session, therefore there isn't much
- overhead in fetching the state information that is needed as it is
- needed.
-
- There are also some functional differences between IMAP3 and DMSP.
- DMSP has functions for sending messages, printing messages, and
- changing passwords, all of which are done outside of IMAP3. DMSP has
- 16 binary flags of which 8 are defined by the system. IMAP has flag
- names; there are currently 5 defined system flag names and a facility
- for some number (29 in the current implementations) of user flag
- names. IMAP3 has a sophisticated message search facility in the
- server to identify interesting messages based on dates, addresses,
- flag status, or textual contents without compelling the client to
- fetch this data for every message.
-
- It was felt that maintaining state on the client is advantageous only
- in those cases where the client is only used by a single user, or if
- there is some means on the client to restrict access to another
- user's data. It can be a serious disadvantage in an environment in
- which multiple users routinely use the same client, the same user
- routinely uses different clients, and where there are no access
- restrictions on the client. It was also observed that most user mail
- access is to a relatively small set of "interesting" messages, which
- were either "new" mail or mail based upon some user-selected
- criteria. Consequently, IMAP3 was designed to easily identify those
- "interesting" messages so that the client could fetch the state of
- those messages and not those that were not "interesting".
-
- One crucial philosophical difference between IMAP and other common
-
-
-
-Rice [Page 7]
-
-RFC 1203 IMAP3 February 1991
-
-
- mail protocols is that IMAP is a mailbox access protocol, not a
- protocol for manipulating mail files. In the IMAP model, unlike
- other mail system models in which mail is stored in a linear mail
- file, no specification is made for the implementation architecture
- for mail storage. Servers may choose to implement mailboxes as files
- but this is a detail of which the client can be totally unaware.
-
- What is more, in the IMAP model, mailboxes are viewed as mappings
- from keys into values. There are broadly three types of keys,
- generic, canonical and concrete. Generic keys are generic, mail
- protocol independent keys defined by IMAP which are meaningful across
- multiple mail encoding formats. An example of such a generic key
- might be "TO", which would be associated with the "To:" field of an
- RFC 822 format message.
-
- Canonical keys represent the way in which the server can associate
- values that are generally "about" a certain key concept, possibly
- integrating several mail format specific fields, without having to
- worry the client with the particular details of any particular
- message format. Thus, the canonical TO key (called $TO) could denote
- anything that could reasonably be construed as being directed towards
- someone. Hence, in an RFC 822 message the server could find the
- union of the "To:", "Resent-To", "Apparently-To:" and "CC:" fields to
- be the appropriate value associated with the canonical $TO key.
-
- Concrete keys allow the client to gain access to certain mail format
- specific concepts, that are not pre-specified by the IMAP protocol,
- in a well defined manner. For example, If the client asks for the
- value associated with the "APPARENTLY-TO" key then, if the message
- were to be in RFC 822 format, the server would look for a header
- field called "Apparently-To:". If no such field is found or the
- field is not implemented or meaningful for the particular message
- format then the server will respond with the null value, called NIL,
- indicating the non-existence of the field.
-
- Thus, IMAP servers are at liberty to implement mailboxes as a
- relational databases if it seems convenient. Indeed, we anticipate
- that future mail systems will tend to use database technology for the
- storage and indexing of mailboxes as a result of the pressure caused
- by the increasing size of mailboxes.
-
- Although for historical reasons IMAP is currently somewhat closely
- associated with RFC 822, we anticipate that future developments in
- IMAP will remove these mail format specific components and will move
- towards the generic model mentioned above. This will allow IMAP more
- easily to incorporate such things as multi-media mail.
-
-
-
-
-
-Rice [Page 8]
-
-RFC 1203 IMAP3 February 1991
-
-
-The Protocol
-
- The IMAP3 protocol consists of a sequence of client commands and
- server responses to those commands, with extra information from the
- server data being sent asynchronously to and independent to the
- responses to client commands. Unlike most Internet protocols,
- commands and responses are tagged. That is, a command begins with a
- unique identifier (typically a short alphanumeric sequence such as a
- Lisp "gensym" function would generate e.g., A0001, A0002, etc.),
- called a tag. The response to this command is given the same tag
- from the server.
-
- We distinguish between data sent by the server as the result of a
- client request, which we term "SOLICITED" and data sent by the server
- not as the result of a client request, which we term "UNSOLICITED".
- The server may send unsolicited data at any time that would not
- fragment another piece of data on the same stream rendering it
- unintelligible. The server is contractually required, however, to
- return all data that is solicited by the client before the return of
- the completion signal for that command, i.e., all solicited data must
- be returned within the temporal extent of the request/completion
- acknowledgement wrapper. This does not, however, preclude the
- simultaneous processing of multiple requests by the client, it simply
- requires that the client be confident that it has all the requested
- data when a request finishes. This allows the implementation of both
- synchronous and asynchronous clients.
-
- Solicited data is identified by the tag of the initial request by the
- client. Unsolicited data is identified by the special reserved tag
- of "*". There is another special reserved tag, "+", discussed below.
-
- Note: the tagging of SOLICITED data is only permitted for a selected
- server version other than 2.0.
-
- No assumptions concerning serial or monolithic processing by the
- server can be made by a correct client. The server is at liberty to
- process multiple requests by the same client in any order. This
- allows servers to process costly searches over mailboxes on slow
- backing storage media in the background, while still preserving
- interactive performance. Clients can, however, assume the
- serialization of the request/data/completion behavior mentioned
- above.
-
- When a connection is opened the server sends an unsolicited OK
- response as a greeting message and then waits for commands. When
- commands are received the server acts on them and responds with
- responses, often interspersed with data.
-
-
-
-
-Rice [Page 9]
-
-RFC 1203 IMAP3 February 1991
-
-
- The client opens a connection, waits for the greeting, then sends a
- LOGIN command with user name and password arguments to establish
- authorization. Following an OK response from the server, the client
- then sends a SELECT command to access the desired mailbox. The
- user's default mailbox has a special reserved name of "INBOX" which
- is independent of the operating system that the server is implemented
- on. The server will generally send a list of valid flags, number of
- messages, and number of messages arrived since last access for this
- mailbox as solicited data, followed by an OK response. The client
- may terminate access to this mailbox and access a different one with
- another SELECT command.
-
- Because the SELECT command affects the state of the server in a
- fundamental way, the server is required to process all outstanding
- commands for any given mailbox before sending the OK tag for the
- SELECT command. Thus, the client will always know that all responses
- before an OK SELECT response will refer to the old mailbox and all
- responses following it will apply to the new mailbox.
-
- Because, in the real world, local needs or experimental work will
- dictate that servers will support both supersets of the defined
- behavior and incompatible changes, servers will support a
- SELECT.VERSION command and a SELECT.FEATURES command, the purpose of
- which is to allow clients to select the overall behavior and specific
- features that they want from a server. The default behavior of any
- server is to process commands and to have interaction syntax the same
- as is specified by IMAP2 in RFC 1064. A server may not behave in any
- other manner unless the SELECT.VERSION or SELECT.FEATURES commands
- are used to select different behavior.
-
- Over time, when groups of generally useful changes to the current,
- default behavior of the server are found, these will be collected
- together and incorporated in such a way that all of the features can
- be selected simply by selecting a particular major version number of
- the protocol. It should be noted that the version numbers (both
- major and minor) selected by the SELECT.VERSION command denote
- versions of the IMAP protocol, not versions of the server per se.
- Thus, although in general changes to the protocol specification will
- be made in such a way that they are upwards compatible, this cannot
- be guaranteed. No client should rely on tests of the form "if
- major_version > 2 then..." being valid for all protocol versions,
- since incompatible changes might be made in the future.
-
- The client reads mailbox information by means of FETCH commands. The
- actual data is transmitted via the solicited data mechanism (that is,
- FETCH should be viewed as poking the server to include the desired
- data along with any other data it wishes to transmit to the client).
- There are three major categories of data which may be fetched.
-
-
-
-Rice [Page 10]
-
-RFC 1203 IMAP3 February 1991
-
-
- The first category is that data which is associated with a message as
- an entity in the mailbox. There are presently three such items of
- data: the "internal date", the "RFC 822 size", and the "flags". The
- internal date is the date and time that the message was placed in the
- mailbox. The RFC 822 size is subject to deletion in the future; it
- is the size in bytes of the message, expressed as an RFC 822 text
- string. Current clients only use it as part of a status display
- line. The flags are a list of status flags associated with the
- message (see below). All of the first category data can be fetched
- by using the macro-fetch word "FAST"; that is, "FAST" expands to
- "(FLAGS INTERNALDATE RFC822.SIZE)".
-
- The second category is that data which describes the composition and
- delivery information of a message; that is, information such as the
- message sender, recipient lists, message-ID, subject, etc. This is
- the information which is stored in the message header in RFC 822
- format message and is traditionally called the "envelope". [Note:
- this should not be confused with the SMTP (RFC 821) envelope, which
- is strictly limited to delivery information.] IMAP3 defines a
- structured and unambiguous representation for the envelope which is
- particularly nice for Lisp-based parsers. A client can use the
- envelope for operations such as replying and not worry about RFC 822
- at all. Envelopes are discussed in more detail below. The first and
- second category data can be fetched together by using the macro-fetch
- word "ALL"; that is, "ALL" expands to "(FLAGS INTERNALDATE
- RFC822.SIZE ENVELOPE)".
-
- The third category is that data which is intended for direct human
- viewing. The present RFC 822 based IMAP3 defines three such items:
- RFC822.HEADER, RFC822.TEXT, and RFC822 (the latter being the two
- former appended together in a single text string). Fetching "RFC822"
- is equivalent to typing the RFC 822 representation of the message as
- stored on the mailbox without any filtering or processing.
-
- Typically, a client will "FETCH ALL" for some or all of the messages
- in the mailbox for use as a presentation menu, and when the user
- wishes to read a particular message will "FETCH RFC822.TEXT" to get
- the message body. A more primitive client could, of course, simply
- "FETCH RFC822" a la POP2-type functionality.
-
- The client can alter certain data by means of a STORE command. As an
- example, a message is deleted from a mailbox by a STORE command which
- includes the \DELETED flag as one of the flags being set.
-
- Other client operations include copying a message to another mailbox
- (COPY command), permanently removing deleted messages (EXPUNGE
- command), checking for new messages (CHECK command), and searching
- for messages which match certain criteria (SEARCH command).
-
-
-
-Rice [Page 11]
-
-RFC 1203 IMAP3 February 1991
-
-
- The client terminates the session with the LOGOUT command. The
- server returns a "BYE" followed by an "OK".
-
-A Typical Scenario
-
- Client Server
- ------ ------
- {Wait for Connection}
- {Open Connection} -->
- <-- * OK IMAP3 Server Ready
- {Wait for command}
- A001 SUPPORTED.VERSIONS -->
- <-- * SUPPORTED.VERSIONS ((2 0 )
- (3 0 EIGHT.BIT.TRANSPARENT
- AUTO.SET.SEEN
- TAGGED.SOLICITED))
- A001 OK Supported Versions returned.
- {Wait for command}
- A002 SELECT.VERSION (3 0) -->
- <-- A002 OK Version 3.0 Selected.
- {Wait for command}
- A002 SELECT.FEATURES TAGGED.SOLICITED -->
- <-- A002 OK Features selected.
- {Wait for command}
- A003 LOGIN Fred Secret -->
- <-- A003 OK User Fred logged in
- {Wait for command}
- A004 SELECT INBOX -->
- <-- A004 FLAGS (Meeting Notice \Answered
- \Flagged \Deleted \Seen)
- <-- A004 19 EXISTS
- <-- A004 2 RECENT
- <-- A004 OK Select complete
- {Wait for command}
- A005 FETCH 1:19 ALL -->
- <-- A005 1 Fetch (......)
- ...
- <-- A005 18 Fetch (......)
- <-- A005 19 Fetch (......)
- <-- A005 OK Fetch complete
- {Wait for command}
- A006 FETCH 8 RFC822.TEXT -->
- <-- A006 8 Fetch (RFC822.TEXT {893}
- ...893 characters of text...
- <-- )
- <-- A006 OK Fetch complete
- {Wait for command}
-
-
-
-
-Rice [Page 12]
-
-RFC 1203 IMAP3 February 1991
-
-
- A007 STORE 8 +Flags \Deleted -->
- <-- A007 8 Store (Flags (\Deleted
- \Seen))
- <-- A007 OK Store complete
- {Wait for command}
- A008 EXPUNGE -->
- <-- A008 19 EXISTS
- <-- A008 8 EXPUNGE
- <-- A008 18 EXISTS
- <-- A008 Expunge complete
- {Wait for command}
- A009 LOGOUT -->
- <-- A009 BYE IMAP3 server quitting
- <-- A009 OK Logout complete
- {Close Connection} --><-- {Close connection}
- {Go back to start}
-
- A more complex scenario produced by a pipelining multiprocess client.
-
- Client Server
- ------ ------
- {Wait for Connection}
- {Open session as above}
- <-- A004 19 EXISTS
- <-- A004 2 RECENT
- <-- A004 OK Select complete
- {Wait for command}
- A005 SEARCH RECENT -->
- <-- A005 SEARCH (18 19) (RECENT)
- <---A005 OK Search complete
- A006 FETCH 18:19 ALL RFC822.TEXT
- A007 STORE 18:19 +FLAGS (\SEEN)
- A008 FETCH 1:17 ALL -->
- <-- A006 18 Fetch (... RFC822.TEXT ...)
- A009 STORE 18 +FLAGS (\DELETED)
- <-- A006 19 Fetch (... RFC822.TEXT ...)
- <-- A006 OK Fetch complete
- <-- A007 18 STORE (Flags (\Seen))
- A010 STORE 19 +FLAGS (\DELETED)
- <-- A007 19 STORE (Flags (\Seen))
- <-- A007 OK Store complete
- <-- A008 1 Fetch (......)
- ...
- <-- A008 16 Fetch (......)
- <-- A008 17 Fetch (......)
- <-- A008 OK Fetch complete
- <-- A009 18 STORE (Flags (\Seen
- \Deleted))
-
-
-
-Rice [Page 13]
-
-RFC 1203 IMAP3 February 1991
-
-
- <-- A009 OK Store complete
- <-- A010 19 STORE (Flags (\Seen
- \Deleted))
- <-- A010 OK Store complete
- {Wait for command}
- <-- * EXISTS 23
- <-- * RECENT 4
- <-- * SEARCH (20 21 22 23) (RECENT)
- A011 FETCH 20:23 ALL RFC822.TEXT
-
-Conventions
-
- The following terms are used in a meta-sense in the syntax
- specification below:
-
- An ASCII-STRING is a sequence of arbitrary ASCII characters.
-
- An ATOM is a sequence of ASCII characters delimited by SP or CRLF.
-
- A CHARACTER is any ASCII character except """", "{", CR, LF, "%",
- or "\".
-
- A CRLF is an ASCII carriage-return character followed immediately
- by an ASCII linefeed character.
-
- A NUMBER is a sequence of the ASCII characters which represent
- decimal numerals ("0" through "9"), delimited by SP, CRLF, ",", or
- ":".
-
- A SP is the ASCII space character.
-
- A TEXT_LINE is a human-readable sequence of ASCII characters up to
- but not including a terminating CRLF.
-
- One of the most common fields in the IMAP3 protocol is a STRING,
- which may be an ATOM, QUOTED-STRING (a sequence of CHARACTERs inside
- double-quotes), or a LITERAL. A literal consists of an open brace
- ("{"), a number, a close brace ("}"), a CRLF, and then an ASCII-
- STRING of n characters, where n is the value of the number inside the
- brace. In general, a string should be represented as an ATOM or
- QUOTED-STRING if at all possible. The semantics for QUOTED-STRING or
- LITERAL are checked before those for ATOM; therefore an ATOM used in
- a STRING may only contain CHARACTERs. Literals are most often sent
- from the server to the client; in the rare case of a client to server
- literal there is a special consideration (see the "+ text" response
- below).
-
- Another important field is the SEQUENCE, which identifies a set of
-
-
-
-Rice [Page 14]
-
-RFC 1203 IMAP3 February 1991
-
-
- messages by consecutive numbers from 1 to n where n is the number of
- messages in the mailbox. A sequence may consist of a single number,
- a pair of numbers delimited by colon indicating all numbers between
- those two numbers, or a list of single numbers and/or number pairs.
- For example, the sequence 2,4:7,9,12:15 is equivalent to
- 2,4,5,6,7,9,12,13,14,15 and identifies all of those messages.
-
-Definitions of Commands and Responses
-
- Summary of Commands and Responses
-
-Commands:
- tag NOOP
- tag LOGIN user password
- tag LOGOUT
- tag SELECT mailbox
- tag CHECK
- tag EXPUNGE
- tag COPY sequence mailbox
- tag FETCH sequence data
- tag STORE sequence data value
- tag SEARCH criteria
- tag BBOARD bboard
- tag FIND (BBOARDS / MAILBOXES) pattern
- tag READONLY
- tag READWRITE
- tag SELECT.VERSION (major_version minor_version)
- tag SELECT.FEATURES features
- tag SUPPORTED.VERSIONS
- tag FLAGS
- tag SET.FLAGS
-
-Responses (can be either solicited or unsolicited):
- */tag FLAGS flag_list
- */tag SEARCH (numbers) (criteria)
- */tag EXISTS
- */tag RECENT
- */tag EXPUNGE
- */tag STORE data
- */tag FETCH data
- */tag BBOARD bboard_name
- */tag MAILBOX non_inbox_mailbox_name
- */tag SUPPORTED.VERSIONS version_data
- */tag READONLY
- */tag READWRITE
- */tag OK text
- */tag NO text
- */tag BAD text
-
-
-
-Rice [Page 15]
-
-RFC 1203 IMAP3 February 1991
-
-
- */tag BYE text
-
-Responses (can only be solicited):
- tag COPY message_number
-
-Responses (can only be unsolicited):
- + text
-
-Commands
-
- tag NOOP
-
- The NOOP command returns an OK to the client. By itself, it does
- nothing, but certain things may happen as side effects. For
- example, server implementations which implicitly check the mailbox
- for new mail may do so as a result of this command. The primary
- use of this command is to for the client to see if the server is
- still alive (and notify the server that the client is still alive,
- for those servers which have inactivity autologout timers).
-
- tag LOGIN user password
-
- The LOGIN command identifies the user to the server and carries
- the password authenticating this user. This information is used
- by the server to control access to the mailboxes.
-
- EXAMPLE: A001 LOGIN SMITH SESAME logs in as user SMITH with
- password SESAME.
-
- tag LOGOUT
-
- The LOGOUT command indicates the client is done with the session.
- The server sends a solicited BYE response before the (tagged) OK
- response, and then closes the connection.
-
- tag SELECT mailbox
-
- The SELECT command selects a particular mailbox. The server must
- check that the user is permitted read access to this mailbox.
- Prior to returning an OK to the client, the server must send an
- solicited FLAGS and <n> EXISTS response to the client giving the
- flags list for this mailbox (simply the system flags if this
- mailbox doesn't have any special flags) and the number of messages
- in the mailbox. It is also recommended that the server send a <n>
- RECENT unsolicited response to the client for the benefit of
- clients which make use of the number of new messages in a mailbox.
- It is further recommended that servers should send an unsolicited
- READONLY message if the mailbox that has been selected is not
-
-
-
-Rice [Page 16]
-
-RFC 1203 IMAP3 February 1991
-
-
- writable by the user.
-
- Multiple SELECT commands are permitted in a session, in which case
- the prior mailbox is deselected first.
-
- The default mailbox for the SELECT command is INBOX, which is a
- special name reserved to mean "the primary mailbox for this user
- on this server". The format of other mailbox names is operating
- system dependent (as of this writing, it reflects the path of the
- mailbox on the current servers), though it could reflect any
- server-specific naming convention for the namespace of mailboxes.
- Such a namespace need not and should not be viewed as being
- equivalent or linked to the server machine's file system.
-
- EXAMPLES: A002 SELECT INBOX ;; selects the default mailbox.
- A002 197 EXISTS ;; server says 197 messages in INBOX
- A002 5 RECENT ;; server says 5 are recent.
- A002 OK Select complete.
- or
- A003 SELECT /usr/fred/my-mail.txt
- ;; select a different user specified mailbox.
- ...
-
- tag CHECK
-
- The CHECK command forces a check for new messages and a rescan of
- the mailbox for internal change for those implementations which
- allow multiple simultaneous read/write access to the same mailbox
- (e.g., TOPS-20). It is recommend that periodic implicit checks
- for new mail be done by servers as well. The server must send a
- solicited <n> EXISTS response prior to returning an OK to the
- client.
-
- tag EXPUNGE
-
- The EXPUNGE command permanently removes all messages with the
- \DELETED flag set in its flags from the mailbox. Prior to
- returning an OK to the client, for each message which is removed,
- a solicited <n> EXPUNGE response is sent indicating which message
- was removed. The message number of each subsequent message in the
- mailbox is immediately decremented by 1; this means that if the
- last 5 messages in a 9-message mailbox are expunged you will
- receive 5 "5 EXPUNGE" responses for message 5. To ensure mailbox
- integrity and server/client synchronization, it is recommended
- that the server do an implicit check prior to commencing the
- expunge and again when the expunge is completed. Furthermore, if
- the server allows multiple simultaneous access to the same mailbox
- the server must guarantee both the integrity of the mailbox and
-
-
-
-Rice [Page 17]
-
-RFC 1203 IMAP3 February 1991
-
-
- the views of it held by the clients.
-
- EXPUNGE is not allowed if the user does not have write access to
- this mailbox. If a user does not have write access to the mailbox
- then the server is required to signal this fact by replying with a
- NO response with a suitable text string that can be presented to
- the user explaining that the mailbox is read-only. It is further
- recommended that servers send an unsolicited READONLY message to
- clients that attempt an expunge operation on a read only mailbox.
-
- tag COPY sequence mailbox
-
- The COPY command copies the specified message(s) to the specified
- destination mailbox. If the destination mailbox does not exist,
- the server should create it. Prior to returning an OK to the
- client, the server must return a solicited <n> COPY response for
- each message copied.
-
- EXAMPLE: A003 COPY 2:4 MEETING copies messages 2, 3, and 4 to
- mailbox "MEETING".
-
- COPY is not allowed if the user does not have write access to the
- destination mailbox. If a user does not have write access to the
- destination mailbox then the server is required to signal this
- fact by replying with a NO response with a suitable text string
- that can be presented to the user explaining that the mailbox is
- read-only. It is further recommended that servers send an
- unsolicited READONLY message to clients that attempt to copy to a
- read only mailbox. IMAP3 does not specify "where" the message
- will be put in the mailbox to which it has been copied.
-
- tag FETCH sequence fetch_att
-
- The FETCH command retrieves data associated with a message in the
- mailbox. The data items to be fetched may be either a single atom
- or an S-expression list. The attributes that can be fetched are
- any of those mentioned specifically below along with any generic,
- canonical or concrete key. The set of predefined generic keys is:
- {BCC, BODY, CC, FROM, HEADER, SIZE, SUBJECT, TEXT, TO}. The set
- of predefined canonical keys is {$CC, $FROM, $SUBJECT, $TO}. The
- value returned by the server for a non-existent or non-meaningful
- key is defined to be the null value, NIL.
-
- ALL Equivalent to:
- (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE)
-
- ENVELOPE The envelope of the message. The envelope is
- computed by the server by parsing the header,
-
-
-
-Rice [Page 18]
-
-RFC 1203 IMAP3 February 1991
-
-
- i.e., the RFC 822 header for an RFC822 format
- message, into the component parts, defaulting
- various fields as necessary.
-
- FAST Macro equivalent to:
- (FLAGS INTERNALDATE RFC822.SIZE)
-
- FLAGS The flags which are set for this message.
- This may include the following system flags:
-
- \RECENT Message arrived since
- last read of this mailbox
- \SEEN Message has been read
- \ANSWERED Message has been answered
- \FLAGGED Message is "flagged" for
- urgent/special attention
- \DELETED Message is "deleted" for
- removal by later EXPUNGE
-
- INTERNALDATE The date and time the message was written to
- the mailbox.
-
- RFC822 The message in RFC 822 format.
-
- RFC822.HEADER The RFC 822 format header of the message.
-
- RFC822.SIZE The number of characters in the message as
- expressed in RFC 822 format.
-
- RFC822.TEXT The text body of the message, omitting the
- RFC 822 header.
-
- EXAMPLES:
-
- A003 FETCH 2:4 ALL
- fetches the flags, internal date, RFC 822 size, and envelope
- for messages 2, 3, and 4.
-
- A004 FETCH 3 RFC822
- fetches the RFC 822 representation for message 3.
-
- A005 FETCH 4 (FLAGS RFC822.HEADER)
- fetches the flags and RFC 822 format header for message 4.
-
- A006 FETCH 42 $SUBJECT
- A006 FETCH $SUBJECT "Some subject text..."
- A006 OK FETCH completed ok.
- fetches the canonical subject field.
-
-
-
-Rice [Page 19]
-
-RFC 1203 IMAP3 February 1991
-
-
- A007 FETCH 42 APPARENTLY-TO
- A007 FETCH APPARENTLY-TO NIL
- A007 OK FETCH found no value.
- fetches the concrete apparently-to field.
-
- tag STORE sequence data value
-
- The STORE command alters the values associated with particular
- keys for a message in the mailbox. As is the case for the FETCH
- command, any generic, canonical or concrete key may be used to
- index the value provided. In addition to these, the following
- pre-defined keys are provided.
-
- FLAGS Replace the flags for the message with the
- argument (in flag list format).
- The server must respond with a solicited STORE FLAGS
- message, showing the new state of the flags after
- the store.
-
- +FLAGS Add the flags in the argument to the
- message's flag list.
- The server must respond with a solicited STORE FLAGS
- message, showing the new state of the flags after
- the store.
-
- -FLAGS Remove the flags in the argument from the
- message's flag list.
- The server must respond with a solicited STORE FLAGS
- message, showing the new state of the flags after
- the store.
-
- RFC822.HEADER Replace the header of the message(s) with that
- specified. This allows users to use their mailboxes
- as databases with header fields as keys.
- The server must respond with solicited
- STORE RFC822.HEADER, STORE RFC822.SIZE and
- STORE ENVELOPE messages, showing the new state
- of the reparsed header after the store.
-
- RFC822.TEXT Replace the body of the messages with that specified.
- The server must respond with solicited
- STORE RFC822.TEXT and STORE RFC822.SIZE messages,
- showing the new state of the message after the store.
-
- STORE is not allowed if the user does not have write access to
- this mailbox.
-
- The server is required to send a solicited STORE response for
-
-
-
-Rice [Page 20]
-
-RFC 1203 IMAP3 February 1991
-
-
- each store operation that results in a format transformation by
- the server. For example, the server is required to send a
- STORE FLAGS response when the client performs a STORE +FLAGS or
- a STORE -FLAGS, since the client may not easily be able to know
- what the result of this command will be. Similarly, if the
- client emits a STORE FROM command then the server should
- respond with a suitable STORE FROM response because the client
- would be sending a string value to be stored and the server
- should transform this into a set of addresses. In general,
- however, although it is legal for the server to send a
- solicited STORE response for each STORE operation, this is
- discouraged, since it might result in the retransmission of
- very large and unnecessary amounts of data that have been
- stored.
-
- EXAMPLE: A003 STORE 2:4 +FLAGS (\DELETED) marks messages 2, 3,
- and 4 for deletion.
-
- tag SEARCH search_criteria
-
- The SEARCH command searches the mailbox for messages which match
- the given set of criteria. The server response SEARCH (criteria)
- (numbers) gives the set of messages which match the conjunction of
- the criteria specified. In addition to each of the search
- criteria there is its logical inverse. The logical inverse
- criterion is denoted by the ~ (tilda) sign.
-
- Thus, no message that matches the criterion:
- FROM crispin
-
- will match the criterion:
- ~FROM crispin
-
- The criteria for the search can be any generic, canonical or
- concrete key. In addition to these, the following pre-defined
- keys are also provided:
-
- ALL All messages in the mailbox; the default
- initial criterion for ANDing.
-
- ANSWERED Messages with the \ANSWERED flag set.
-
- BCC string Messages which contain the specified string
- in the envelope's BCC field.
-
- BEFORE date Messages whose internal date is earlier than
- the specified date.
-
-
-
-
-Rice [Page 21]
-
-RFC 1203 IMAP3 February 1991
-
-
- BODY string Messages which contain the specified string
- in the body of the message.
-
- CC string Messages which contain the specified string
- in the envelope's CC field.
-
- DELETED Messages with the \DELETED flag set.
-
- FLAGGED Messages with the \FLAGGED flag set.
-
- FROM string Messages which contain the specified string
- in the envelope's FROM field.
-
- HEADER string Messages which contain the specified string
- in the message header.
-
- KEYWORD flag Messages with the specified flag set.
-
- NEW Messages which have the \RECENT flag set but
- not the \SEEN flag. This is functionally
- equivalent to "RECENT UNSEEN".
-
- OLD Messages which do not have the \RECENT flag
- set.
-
- ON date Messages whose internal date is the same as
- the specified date.
-
- RECENT Messages which have the \RECENT flag set.
-
- SEEN Messages which have the \SEEN flag set.
-
- SINCE date Messages whose internal date is later than
- the specified date.
-
- SUBJECT string Messages which contain the specified string
- in the envelope's SUBJECT field.
-
- TEXT string Messages which contain the specified string.
-
- TO string Messages which contain the specified string in
- the envelope's TO field.
-
- EXAMPLE: A003 SEARCH DELETED FROM "SMITH" SINCE 1-OCT-87
- returns the message numbers for all deleted messages from Smith
- that were placed in the mailbox since October 1, 1987.
-
- Implementation note: The UNANSWERED, UNDELETED, UNFLAGGED,
-
-
-
-Rice [Page 22]
-
-RFC 1203 IMAP3 February 1991
-
-
- UNKEYWORD and UNSEEN criteria, described below, are preserved in
- IMAP3 for IMAP2 compatibility. They are, however, considered
- obsolete and new Client programs are encouraged to use the ~
- notation for the logical inverses of search criteria with a view
- to the dropping of this outmoded syntax in later versions.
-
- UNANSWERED Messages which do not have the \ANSWERED flag
- set.
-
- UNDELETED Messages which do not have the \DELETED flag
- set.
-
- UNFLAGGED Messages which do not have the \FLAGGED flag
- set.
-
- UNKEYWORD flag Messages which do not have the specified flag
- set.
-
- UNSEEN Messages which do not have the \SEEN flag set.
-
- tag READONLY
-
- The READONLY command indicates that the client wishes to make the
- mailbox read-only. The server is required to reply with a
- solicited READONLY or READWRITE response.
-
- tag READWRITE
-
- The READWRITE command indicates that the client wishes to make the
- mailbox read-write. The server is required to reply with a
- solicited READONLY or READWRITE response.
-
- tag SUPPORTED.VERSIONS
-
- The SUPPORTED.VERSIONS solicits from the server a
- SUPPORTED.VERSIONS message, which encapsulates information about
- which versions and features the server supports.
-
- tag SELECT.VERSION (major_version minor_version)
-
- The SELECT.VERSION command indicates that the client wishes to
- select certain behavior on the part of the server. The major and
- minor versions indicate the specific version of the protocol being
- selected.
-
- EXAMPLE: A002 SELECT.VERSION (3 0)
-
- A client may not request a server version that is not supported by
-
-
-
-Rice [Page 23]
-
-RFC 1203 IMAP3 February 1991
-
-
- the server, i.e., which is specifically mentioned in the response
- to a SUPPORTED.VERSIONS command. An attempt to do so by a client
- will result in a NO response from the server. It is an error for
- the SELECT.VERSION command to be used after a mailbox has been
- selected. The rationale for this is that for some server
- implementations it might be necessary to spawn separate programs
- to implement widely divergent protocol versions. Thus, the client
- cannot be allowed to expect any server state to be preserved after
- the use of the SELECT.VERSION command. The default version of all
- servers is 2.0, i.e., IMAP2 as defined by RFC 1064.
-
- tag SELECT.FEATURES 1#features
-
- The SELECT.FEATURES command indicates that the client wishes to
- select certain specific features on the part of the server. A
- client may not request a feature that is not supported by the
- server, i.e., one that is explicitly mentioned in the set of
- features for the selected version returned by the
- SUPPORTED.VERSIONS command. An attempt to do so by a client will
- result in a NO response from the server.
-
- EXAMPLE: A002 SELECT.FEATURES AUTO.SET.SEEN ~TAGGED.SOLICITED
- EIGHT.BIT.TRANSPARENT
-
- i.e., select the set of features called AUTO.SET.SEEN and
- EIGHT.BIT.TRANSPARENT and deselect the feature called
- TAGGED.SOLICITED. The use of the SELECT.FEATURES command
- completely resets the set of selected features. Note: These are
- only example feature names and are not necessarily supported by
- any server. See the appendix on features for more information on
- features. Note: Some features, when present in the server, will
- cause the upwards compatible extension of the grammar, i.e., by
- adding extra commands. The server is at liberty not to remove
- these upwards compatible extensions to the command tables when a
- feature is disabled. Thus, it is an error for a client to rely on
- getting a NO or BAD response in any way, for instance to determine
- the selectedness or presence of a feature.
-
- tag BBOARD bboard
-
- The BBOARD command is equivalent to SELECT, except that its
- argument is a bulletin board (BBoard) name. The format of a
- BBoard name is implementation specific, although it is strongly
- encouraged to use something that resembles a name in a generic
- sense and not a file or mailbox name on the particular system.
- There is no requirement that a BBoard name be a mailbox name or a
- file name (in particular, Unix netnews has a completely different
- namespace from mailbox or file names).
-
-
-
-Rice [Page 24]
-
-RFC 1203 IMAP3 February 1991
-
-
- The result from the BBOARD command is identical from that of the
- SELECT command. For example, in the TOPS-20 server
- implementation, the command
- A0002 BBOARD FOO
- is exactly equivalent to the command
- A0002 SELECT POBOX:<BBOARD>FOO.TXT
- Note: the equivalence in this example is *not* required by the
- protocol, and merely reflects the fuzzy distinction between
- mailboxes and BBoards on TOPS-20.
-
- tag FIND (BBOARDS / MAILBOXES) pattern
-
- The FIND command accepts as arguments the keywords BBOARDS or
- MAILBOXES and a pattern which specifies some set of BBoard/mailbox
- names which are usable by the BBOARD/SELECT command. Two wildcard
- characters are defined; "*" specifies that any number (including
- zero) characters may match at this position and "%" specifies that
- a single character may match at this position. For example,
- FOO*BAR will match FOOBAR, FOOD.ON.THE.BAR and FOO.BAR, whereas
- FOO%BAR will match only FOO.BAR; furthermore, "*" will match all
- BBoards/mailboxes. The following quoting convention applies to
- wildcards: "\*" is the literal "*" character, "\%" is the literal
- "%" character and "\\" is the literal "\" character. Notes: The
- format of mailboxes is server implementation dependent. The
- special mailbox name INBOX is not included in the output to the
- FIND MAILBOXES command.
-
- The FIND command solicits any number of BBOARD or MAILBOX
- responses from the server as appropriate.
-
- Examples:
- A0002 FIND BBOARDS *
- A0002 BBOARD FOOBAR
- A0002 BBOARD GENERAL
- A0002 OK FIND completed
- or
- A0002 FIND MAILBOXES FOO%BA*
- A0002 MAILBOX FOO.BAR
- A0002 MAILBOX FOO.BAZZAR
- A0002 OK FIND completed
-
- Note: Although the use of explicit file or path names for
- mailboxes is discouraged by this standard, it may be unavoidable.
- It is important that the value returned in the MAILBOX solicited
- reply be usable in the SELECT command without remembering any path
- specification which may have been used in the FIND MAILBOXES
- pattern.
-
-
-
-
-Rice [Page 25]
-
-RFC 1203 IMAP3 February 1991
-
-
- tag FLAGS
-
- The FLAGS command solicits a FLAGS response from the server.
-
- tag SET.FLAGS flag_list
-
- The SET.FLAGS command defines the user specifiable flags for this
- mailbox, i.e., the keywords. If this set does not include flags
- formerly sent to the client by the server in a FLAGS message then
- this constitutes a request to delete the flag. Any new flags
- should be created. This command does not affect the system
- defined flags and any system flags that are included in the
- flag_list will be ignored. The server must respond to this
- command with a solicited FLAGS message. If the deletion of a flag
- results in the invalidation of the flag sets of any messages then
- the server is required to send solicited STORE FLAGS messages to
- the client for each modified message.
-
-Responses:
-
- */tag OK text
-
- In its solicited form this response identifies successful
- completion of the command with the indicated tag. The text is a
- line of human-readable text which may be useful in a protocol
- telemetry log for debugging purposes.
-
- In its unsolicited form, this response indicates simply that the
- server is alive. No special action on the part of the client is
- called for. This is presently only used by servers at startup as
- a greeting message indicating that they are ready to accept the
- first command. This usage, although legal, is by no means
- required. The text is a line of human-readable text which may be
- logged in protocol telemetry.
-
- */tag NO text
-
- In its solicited form this response identifies unsuccessful
- completion of the command with the indicated tag. The text is a
- line of human-readable text which probably should be displayed to
- the user in an error report by the client.
-
- In its unsolicited form this response indicates some operational
- error at the server which cannot be traced to any protocol
- command. The text is a line of human-readable text which should
- be logged in protocol telemetry for the maintainer of the server
- and/or the client.
-
-
-
-
-Rice [Page 26]
-
-RFC 1203 IMAP3 February 1991
-
-
- */tag BAD text
-
- In its solicited form response indicates faulty protocol received
- from the client and indicates a bug. The text is a line of
- human-readable text which should be recorded in any telemetry as
- part of a bug report to the maintainer of the client.
-
- In its unsolicited form response indicates some protocol error at
- the server which cannot be traced to any protocol command. The
- text is a line of human-readable text which should be logged in
- protocol telemetry for the maintainer of the server and/or the
- client. This generally indicates a protocol synchronization
- problem, and examination of the protocol telemetry is advised to
- determine the cause of the problem.
-
- */tag BYE text
-
- This indicates that the server is about to close the connection.
- The text is a line of human-readable text which should be
- displayed to the user in a status report by the client. IMAP2
- requires that the server emit a solicited BYE response as part of
- a normal logout sequence. This solicited form is not required
- under IMAP3, though is still legal for compatibility. In its
- unsolicited form the BYE response is used as a panic shutdown
- announcement by the server. It is required to be used by any
- server which performs autologouts due to inactivity.
-
- */tag number message_data
-
- The solicited (tag number message_data) response is generated as
- the result of a number of client requests. The server may also
- emit any the following at any time as unsolicited data (i.e., *
- number message_data). The message_data is one of the following:
-
- EXISTS The specified number of messages exists in the mailbox.
-
- RECENT The specified number of messages have arrived since the
- last time this mailbox was selected with the SELECT
- command or equivalent.
-
- EXPUNGE The specified message number has been permanently
- removed from the mailbox, and the next message in the
- mailbox (if any) becomes that message number.
- The server must send a solicited EXPUNGE response
- for each message that it expunges as the result
- of an EXPUNGE command. Note: future versions of the
- protocol may allow the use of a message sequence
- as a value returned by the EXPUNGE response to allow the
-
-
-
-Rice [Page 27]
-
-RFC 1203 IMAP3 February 1991
-
-
- more efficient compaction of client representations of
- mailboxes.
-
- STORE data
- Functionally equivalent to FETCH, only it is sent by the
- server when the state of a mailbox changes. The server
- must send solicited STORE responses as the result of
- any change caused by a STORE command.
-
- FETCH data
- This is the principle means by which data about a
- message is sent to the client. The data is in a
- Lisp-like S-expression property list form. Just as the
- FETCH request from the client can fetch any generic,
- canonical or concrete key, so also the FETCH response
- can return values for any of these keys as well as for
- the pre-defined attributes mentioned below. Note that
- the server is permitted to send any unsolicited FETCH
- or STORE messages that it should choose, be they the
- values associated with generic, canonical or concrete
- keys. Clients are required to ignore any such
- FETCH responses that it cannot interpret. For example,
- clients are not required to be able to understand, i.e.,
- use fruitfully, the canonical $TO key, but they are
- required to be able to ignore an unsolicited $TO message
- correctly.
-
- ENVELOPE An S-expression format list which describes the
- envelope of a message. The envelope is computed
- by the server by parsing the RFC 822 header into
- the component parts, defaulting various fields
- as necessary.
-
- The fields of the envelope are in the following
- order: date, subject, from, sender, reply-to, to,
- cc, bcc, in-reply-to, and message-id. The date,
- subject, in-reply-to, and message-id fields are
- strings. The from, sender, reply-to, to, cc,
- and bcc fields are lists of addresses.
-
- An address is an S-expression format list which
- describes an electronic mail address. The fields
- of an address are in the following order:
- personal name, source-route (i.e., the
- at-domain-list in SMTP), mailbox name, host name
- and comments. Implementation note: The addition
- of the comment field is an incompatible extension
- from IMAP2. The server is required not to provide
-
-
-
-Rice [Page 28]
-
-RFC 1203 IMAP3 February 1991
-
-
- this field when running in IMAP2 mode.
-
- Any field of an envelope or address which is
- not applicable is presented as the atom NIL.
- Note that the server must default the reply-to
- and sender fields from the from field; a client is
- not expected to know to do this.
-
- FLAGS An S-expression format list of flags which are set
- for this message. This may include the following
- system flags:
-
- \RECENT Message arrived since last
- read of this mailbox
- \SEEN Message has been read
- \ANSWERED Message has been answered
- \FLAGGED Message is "flagged" for
- urgent/special attention
- \DELETED Message is "deleted" for
- removal by later EXPUNGE
-
- INTERNALDATE A string containing the date and time the
- message was written to the mailbox.
-
- RFC822 A string expressing the message in RFC 822
- format.
- Note: Some implementations of IMAP2 servers
- had the (undocumented) behavior of setting
- the \SEEN flag as a side effect of fetching
- the body of a message. This resulted in
- erroneous behavior for clients that prefetch
- messages that the user might not get
- around to reading. Thus, this behavior is
- explicitly disallowed in IMAP3.
- Note: this is not a significant performance
- restriction because it is always possible for
- IMAP3 clients to use an interaction with the
- server of the following type:
- A001 FETCH 42 RFC822
- A002 STORE 42 +FLAGS (\SEEN)
- A001 42 FETCH RFC822 {637} ......
- A001 OK Fetch completed
- A002 42 STORE FLAGS (\SEEN \FLAGGED...)
- A002 OK Store Completed.
-
- RFC822.HEADER A string expressing the RFC 822 format
- header of the message
-
-
-
-
-Rice [Page 29]
-
-RFC 1203 IMAP3 February 1991
-
-
- RFC822.SIZE A number indicating the number of
- characters in the message as expressed
- in RFC 822 format.
-
- RFC822.TEXT A string expressing the text body of the
- message, omitting the RFC 822 header.
- See also note for RFC822.
-
- */tag FLAGS flag_list
-
- A solicited FLAGS response must occur as a result of a SELECT
- command. The flag list is the list of flags (at a minimum, the
- IMAP defined flags) which are applicable for this mailbox. Flags
- other than the system flags are a function of the server
- implementation.
-
- */tag SEARCH (numbers) (search_criteria)
-
- This response occurs as a result of a SEARCH command. The
- number(s) refer to those messages which match the search criteria.
- In its solicited form this message allows clients to find
- interesting groups of messages, e.g., unseen messages from
- Crispin. In its unsolicited form it allows the server to inform
- the client of interesting patterns, e.g., when new mail arrives,
- recent and from Crispin. Compatibility note: The search_criteria
- are sent by the server along with the matching numbers so
- unsolicited SEARCH messages may be interpreted. This syntax is
- not upwards compatible with IMAP2 and so the new syntax is
- intended to make it simple for clients that are not able to take
- advantage of unsolicited SEARCH messages still to interpret
- solicited SEARCH messages simply by ignoring everything that
- follows the list of numbers with minimal parsing. Such clients
- may not, however, simply discard the rest of the line because
- there might be LITERALs in the search pattern.
-
- Examples:
- A00042 SEARCH (2 3 6) (FROM Crispin ~SEEN)
- and
- * SEARCH (42) (FROM Crispin RECENT)
-
- */tag READONLY
-
- This indicates that the mailbox is read-only. The server is
- required to respond to a READONLY or READWRITE command with either
- a solicited READONLY or a solicited READWRITE response. Note: If
- the client attempts a mutation operation, such as STORE, on a
- mailbox to which it does not have write access then the server is
- required to reply with a solicited READONLY response on the first
-
-
-
-Rice [Page 30]
-
-RFC 1203 IMAP3 February 1991
-
-
- such attempted mutation. The server may also choose to send
- solicited READONLY responses for each subsequent attempted
- mutation.
-
- */tag READWRITE
-
- This indicates that the mailbox is read-write. The server is
- required to respond to a READONLY or READWRITE command with either
- a solicited READONLY or a solicited READWRITE response.
-
- */tag BBOARD bboard_name
-
- This message is produced in its solicited form as a response to a
- FIND BBOARDS command. In its unsolicited form it represents a
- notification by the server that a new BBoard has been added.
- Bboard_name must be a name that can be supplied to the BBOARD
- command so as to select the appropriate bboard.
-
- */tag MAILBOX non_inbox_mailbox_name
-
- This message is produced in its solicited form as a response to a
- FIND MAILBOXES command. In its unsolicited form it represents a
- notification by the server that a new mailbox has been added,
- perhaps as the result of a COPY command creating a new mailbox.
- Non_inbox_mailbox_name must be a name that can be supplied to the
- SELECT command so as to select the appropriate mailbox. Note:
- non_inbox_mailbox_name is never the string "INBOX".
-
- */tag SUPPORTED.VERSIONS (version_specs)
-
- This message is used either as a response to the
- SUPPORTED.VERSIONS or, in its unsolicited form, to indicate the
- dynamic addition or removal of support for features or protocol
- versions. Each version_spec is of the form (4 2
- EIGHT.BIT.TRANSPARENT AUTO.SET.SEEN ...), i.e., a major version
- number and a minor version number for the protocol and the set of
- features supported under the server's implementation of that
- protocol version. A server may not dynamically remove support for
- any version or feature that has been selected by any currently
- logged in client by the use of the VERSION command.
-
- Example:
- A00005 SUPPORTED.VERSIONS ((2 0 )
- (2 2 TAGGED.SOLICITED)
- (3 0 EIGHT.BIT.TRANSPARENT TAGGED.SOLICITED))
-
- Indicates that two major versions are supported and one minor
- version is supported and that tagged solicited messages are
-
-
-
-Rice [Page 31]
-
-RFC 1203 IMAP3 February 1991
-
-
- supported in versions 2.2 and 3.0 with eight bit characters being
- supported under version 3. For each feature mentioned in the list
- of features there is also always the negation of that feature.
- For example, if the server supports the TAGGED.SOLICITED feature
- then it also supports the ~TAGGED.SOLICITED feature, which
- disables this feature. Note: These are only example feature
- names and are not necessarily supported by any server. See the
- appendix on features for more information on features.
-
- + text
-
- This response indicates that the server is ready to accept the
- text of a literal from the client. Normally, a command from the
- client is a single text line. If the server detects an error in
- the command, it can simply discard the remainder of the line. It
- cannot do this in the case of commands which contain literals,
- since a literal can be an arbitrarily long amount of text, and the
- server may not even be expecting a literal. This mechanism is
- provided so the client knows not to send a literal until the
- server definitely expects it, preserving client/server
- synchronization.
-
- In actual practice, this situation is rarely encountered. In the
- current protocol, the only client commands likely to contain
- literals are the LOGIN command and the STORE RFC822.HEADER or
- STORE RFC822.TEXT commands. Consider a situation in which a
- server validates the user before checking the password. If the
- password contains "funny" characters and hence is sent as a
- literal, then if the user is invalid an error would occur before
- the password is parsed.
-
- No such synchronization protection is provided for literals sent
- from the server to the client, for performance reasons. Any
- synchronization problems in this direction would be due to a bug
- in the client or server and not for some operational problem.
-
-Sample IMAP3 session
-
- The following is a transcript of an actual IMAP3 session. Server
- output is identified by "S:" and client output by "U:". In cases
- where lines were too long to fit within the boundaries of this
- document, the line was continued on the next line preceded by a tab.
-
- S: * OK SUMEX-AIM.Stanford.EDU Interactive Mail Access Protocol
- III Service 6.1(349) at Mon, 14 May 90 14:58:30 PDT
- U: a001 SUPPORTED.VERSIONS
- S: * SUPPORTED.VERSIONS ((2 0 ) (3 0 EIGHT.BIT.TRANSPARENT
- AUTO.SET.SEEN TAGGED.SOLICITED))
-
-
-
-Rice [Page 32]
-
-RFC 1203 IMAP3 February 1991
-
-
- S: A001 Supported Versions returned.
- U: a002 SELECT.VERSION (3 0)
- S: a002 OK Version 3.0 Selected.
- U: a003 SELECT.FEATURES TAGGED.SOLICITED
- S: a003 OK Features selected.
- U: a004 login crispin secret
- S: a004 OK User CRISPIN logged in at Thu, 9 Jun 90 14:58:42 PDT,
- job 76
- U: a005 select inbox
- S: a005 FLAGS (Bugs SF Party Skating Meeting Flames Request AI
- Question Note \XXXX \YYYY \Answered \Flagged \Deleted
- \Seen)
- S: a005 16 EXISTS
- S: a005 0 RECENT
- S: a006 OK Select complete
- U: a006 fetch 16 all
- S: a006 16 Fetch (Flags (\Seen) InternalDate " 9-Jun-88 12:55:
- RFC822.Size 637 Envelope ("Sat, 4 Jun 88 13:27:11 PDT"
- "INFO-MAC Mail Message" (("Larry Fagan" NIL "FAGAN"
- "SUMEX-AIM.Stanford.EDU" NIL)) (("Larry Fagan" NIL "FAGAN"
- "SUMEX-AIM.Stanford.EDU" NIL)) (("Larry Fagan" NIL "FAGAN"
- "SUMEX-AIM.Stanford.EDU" NIL)) ((NIL NIL "rindflEISCH"
- "SUMEX-AIM.Stanford.EDU" NIL)) NIL NIL NIL
- "<12403828905.13.FAGAN@SUMEX-AIM.Stanford.EDU>"))
- S: a006 OK Fetch completed
- U: a007 fetch 16 rfc822
- S: a007 16 Fetch (RFC822 {637}
- S: Mail-From: RINDFLEISCH created at 9-Jun-88 12:55:43
- S: Mail-From: FAGAN created at 4-Jun-88 13:27:12
- S: Date: Sat, 4 Jun 88 13:27:11 PDT
- S: From: Larry Fagan <FAGAN@SUMEX-AIM.Stanford.EDU>
- S: To: rindflEISCH@SUMEX-AIM.Stanford.EDU
- S: Subject: INFO-MAC Mail Message
- S: Message-ID: <12403828905.13.FAGAN@SUMEX-AIM.Stanford.EDU>
- S: ReSent-Date: Thu, 9 Jun 88 12:55:43 PDT
- S: ReSent-From: TC Rindfleisch <Rindfleisch@SUMEX-AIM.Stanford.EDU>
- S: ReSent-To: Yeager@SUMEX-AIM.Stanford.EDU,
- Crispin@SUMEX-AIM.Stanford.EDU
- S: ReSent-Message-ID:
- <12405133897.80.RINDFLEISCH@SUMEX-AIM.Stanford.EDU>
- S:
- S: The file is <info-mac>usenetv4-55.arc ...
- S: Larry
- S: -------
- S: )
- S: a007 OK Fetch completed
- U: a008 logout
- S: a008 BYE UNIX IMAP III server terminating connection
-
-
-
-Rice [Page 33]
-
-RFC 1203 IMAP3 February 1991
-
-
- S: a008 OK SUMEX-AIM.Stanford.EDU Interim Mail Access Protocol
- Service logout
-
-Implementation Discussion
-
- As of this writing, SUMEX has completed an IMAP2 client for Xerox
- Lisp machines written in hybrid Interlisp/CommonLisp and is beginning
- distribution of a client for TI Explorer Lisp machines. SUMEX has
- also completed a portable IMAP2 client protocol library module
- written in C. This library, with the addition of a small main
- program (primarily user interface) and a TCP/IP driver, became a
- rudimentary remote system mail-reading program under Unix. The first
- production use of this library is as a part of a MacII client which
- has now been under daily use (by real users) at Stanford for quite
- some time.
-
- As of this writing, SUMEX has completed IMAP2 servers for TOPS-20
- written in DEC-20 assembly language and 4.2/3 BSD Unix written in C.
- The TOPS-20 server is fully compatible with MM-20, the standard
- TOPS-20 mailsystem, and requires no special action or setup on the
- part of the user. The INBOX under TOPS-20 is the user's MAIL.TXT.
- The TOPS-20 server also supports multiple simultaneous access to the
- same mailbox, including simultaneous access between the IMAP3 server
- and MM-20. The 4.2/3 BSD Unix server requires that the user use
- either Unix Mail format or mail.txt format which is compatible with
- SRI MM-32 or Columbia MM-C. The 4.2/3 BSD Unix server allows
- simultaneous read access; write access must be exclusive. There is
- also an experimental IMAP3 server running on the TI Explorer class of
- machine, which uses MM mailbox format and which can communicate over
- both TCP and Chaos.
-
- The Xerox Lisp client and DEC-20 server have been in production use
- for over two years; the Unix server was been in production use for
- over a year. IMAP3 has been used to access mailboxes at remote sites
- from a local workstation via the Internet. For example, from the
- Stanford local network one of the authors has read his mailbox at a
- Milnet site.
-
- A number of IMAP clients have now been developed or are being
- developed. Amongst these are versions that run on the following
- machines:
-
- . Xerox Lisp machines
- . Apple Macintosh
- . NeXT
- . IBM PC
- . TI Explorer Lisp machines
- . "Glass teletype" version that runs under Unix
-
-
-
-Rice [Page 34]
-
-RFC 1203 IMAP3 February 1991
-
-
- . GNU Emacs
- . X Windows
- . NTT ELIS
-
- Each of these client programs is carefully tuned to optimize the
- performance and user interface in a manner that is consistent with
- the the user interface model of the native machine. For example, the
- Macintosh client features a "messy-desk" interface that allows the
- cutting and pasting of text with the use of the clipboard with a menu
- driven interface with keyboard accelerators.
-
- This specification does not make any formal definition of size
- restrictions, but some of the existing servers have the following
- limitations:
-
- DEC-20
- . length of a mailbox: 7,077,888 characters
- . maximum number of messages: 18,432 messages
- . length of a command line: 10,000 characters
- . length of the local host name: 64 characters
- . length of a "short" argument: 39 characters
- . length of a "long" argument: 491,520 characters
- . maximum amount of data output in a single fetch:
- 655,360 characters
-
- TI-Explorer
- . length of a mailbox: limited by the Minimum of the size of the
- virtual address space and the size of the file system
- . maximum number of messages: limited by the the size of the
- virtual address space
- . length of a command line: limited by the the size of the
- virtual address space
- . length of the local host name: limited by the the size of the
- virtual address space
- . length of a "short" argument: limited by the the size of the
- virtual address space
- . length of a "long" argument: limited by the the size of the
- virtual address space
- . maximum amount of data output in a single fetch: not limited
-
- Typical values for these limits are 30Mb for file systems and 128Mb
- for virtual address space.
-
- To date, nobody has run up against any of these limitations, many of
- which are substantially larger than most current user mail reading
- programs.
-
- There are several advantages to the scheme of tags and solicited
-
-
-
-Rice [Page 35]
-
-RFC 1203 IMAP3 February 1991
-
-
- responses and unsolicited data. First, the infamous synchronization
- problems of SMTP and similar protocols do not happen with tagged
- commands; a command is not considered satisfied until a completion
- acknowledgement with the same tag is seen. Tagging allows an
- arbitrary amount of other responses ("solicited" data) to be sent by
- the server with no possibility of the client losing synchronization.
- Compare this with the problems that FTP or SMTP clients have with
- continuation, partial completion, and commentary reply codes.
-
- Another advantage is that a non-lockstep client implementation is
- possible. The client could send a command, and entrust the handling
- of the server responses to a different process which would signal the
- client when the tagged response comes in. Some clients might be
- implemented in a thoroughly asynchronous manner, having, perhaps,
- multiple outstanding commands at any given time. Note: this does
- not require that the server process these commands in anything other
- than a lock-step manner. It simply allows clients to take advantage
- of servers that are able to do such asynchronous operations.
-
- It was observed that synchronization problems can occur with literals
- if the literal is not recognized as such. Fortunately, the cases in
- which this can happen are relatively rare; a mechanism (the special
- "+" tag response) was introduced to handle those few cases which
- could happen. The proper way to address this problem in all cases is
- probably to move towards a record-oriented architecture instead of
- the text stream model provided by TCP.
-
- Unsolicited data needs some discussion. Unlike most protocols, in
- which the server merely does the client's bidding, an IMAP3 server
- has a semi-autonomous role. By means of sending "unsolicited data",
- the server is in effect sending a command to the client -- to update
- and/or extend its (incomplete) model of the mailbox with new
- information from the server. In this viewpoint, although a "fetch"
- command is a request for specific information from the client, the
- server is always at liberty to include more than the desired data as
- "unsolicited". A server acknowledgement to the "fetch" is a
- statement that at least all the requested data has been sent.
-
- In terms of implementation, a simple lock-step client may have a
- local cache of data from the mailbox. This cache is incomplete in
- general, and at select time is empty. A listener on the IMAP
- connection in the client processes all solicited and unsolicited data
- symmetrically, and updates the cache based on this data, i.e., the
- client faults on a cache miss and asks the server to fill that cache
- slot synchronously. If a tagged completion response arrives, the
- listener unblocks the process which sent the tagged request.
-
- Clearly, given this model it is not strictly necessary to distinguish
-
-
-
-Rice [Page 36]
-
-RFC 1203 IMAP3 February 1991
-
-
- most solicited from unsolicited data. Doing so, however, apart from
- being clearer, also allows such simplistic, lock-step client
- implementations that extract the specific value of the response to
- command by trapping the tagged response. This allows the client not
- to have to block on some complex predicate that involves watching to
- see an update in a cache cell.
-
- For example, perhaps as a result of opening a mailbox, solicited data
- from the server arrives. The first piece of data is the number of
- messages. This is used to size the cache; note that, if new mail
- arrives, by sending a new "number of messages" unsolicited data
- message server will cause the cache to be re-sized. If the client
- attempts to access information from the cache, it will encounter
- empty spots which will trigger "fetch" requests. The request would
- be sent, some solicited data including the answer to the fetch will
- flow back, and then the "fetch" response will unblock the client.
-
- People familiar with demand-paged virtual memory design will
- recognize this model as being very similar to page-fault handling on
- a demand-paged system.
-
-Formal Syntax
-
- The following syntax specification uses the augmented Backus-Naur
- Form (BNF) notation as specified in RFC 822 with one exception; the
- delimiter used with the "#" construct is a single space (SP) and not
- a comma.
-
-address ::= "(" addr_name SP addr_adl SP addr_mailbox SP
- addr_host addr_comment ")"
-
-addr_adl ::= nil / string
-
-addr_comment ::= nil / string
-
-addr_host ::= nil / string
-
-addr_mailbox ::= nil / string
-
-addr_name ::= nil / string
-
-bboard ::= "BBOARD" SP bboard_name
-
-bboard_name ::= string
-
-bboard_notify ::= "BBOARD" sp bboard_name
-
-canonical_key ::= "$CC" / "$FROM" / "$SUBJECT" / "$TO"
-
-
-
-Rice [Page 37]
-
-RFC 1203 IMAP3 February 1991
-
-
-check ::= "CHECK"
-
-concrete_key ::= string
-
-copy ::= "COPY" SP sequence SP mailbox
-
-criterion ::= "ALL" / "ANSWERED" /
- "BCC" SP string / "BEFORE" SP string /
- "BODY" SP string / "CC" SP string / "DELETED" /
- "FLAGGED" / "KEYWORD" SP atom / "NEW" / "OLD" /
- "ON" SP string / "RECENT" / "SEEN" /
- "SINCE" SP string / "TEXT" SP string /
- "TO" SP string / "UNANSWERED" / "UNDELETED" /
- "UNFLAGGED" / "UNKEYWORD" / "UNSEEN" / key SP string
-
-criteria ::= 1#criterion
-
-data ::= ("FLAGS" SP flag_list /
- search_notify / bboard_notify / mailbox_notify /
- supported_versions_notify / "READONLY" / "READWRITE" /
- "BYE" SP text_line / "OK" SP text_line /
- "NO" SP text_line / "BAD" SP text_line)
-
-date ::= string in form "dd-mmm-yy hh:mm:ss-zzz"
-
-envelope ::= "(" env_date SP env_subject SP env_from SP
- env_sender SP env_reply-to SP env_to SP
- env_cc SP env_bcc SP env_in-reply-to SP
- env_message-id ")"
-
-env_bcc ::= nil / "(" 1*address ")"
-
-env_cc ::= nil / "(" 1*address ")"
-
-env_date ::= string
-
-env_from ::= nil / "(" 1*address ")"
-
-env_in-reply-to ::= nil / string
-
-env_length ::= NUMBER
-
-env_message-id ::= nil / string
-
-env_reply-to ::= nil / "(" 1*address ")"
-
-env_sender ::= nil / "(" 1*address ")"
-
-
-
-
-Rice [Page 38]
-
-RFC 1203 IMAP3 February 1991
-
-
-env_subject ::= nil / string
-
-env_to ::= nil / "(" 1*address ")"
-
-expunge ::= "EXPUNGE"
-
-feature ::= ATOM
-
-fetch ::= "FETCH" SP sequence SP ("ALL" / "FAST" /
- fetch_att / "(" 1#fetch_att ")")
-
-fetch_att ::= "ENVELOPE" / "FLAGS" / "INTERNALDATE" /
- "RFC822" / "RFC822.HEADER" / "RFC822.SIZE" /
- "RFC822.TEXT" / key
-
-find ::= "FIND" ("BBOARDS" / "MAILBOXES") pattern
-
-flag_list ::= ATOM / "(" 1#ATOM ")"
-
-flags ::= "FLAGS"
-
-generic_key ::= "BCC" / "BODY" / "CC" / "FROM" / "HEADER" / "SIZE" /
- "SUBJECT" / "TEXT" / "TO"
-
-key ::= generic_key / canonical_key / concrete_key
-
-literal ::= "{" NUMBER "}" CRLF ASCII-STRING
-
-login ::= "LOGIN" SP userid SP password
-
-logout ::= "LOGOUT"
-
-mailbox ::= "INBOX" / string
-
-mailbox_notify ::= MAILBOX non_inbox_mailbox_name
-
-msg_copy ::= "COPY"
-
-msg_data ::= (msg_exists / msg_recent / msg_expunge /
- msg_fetch / msg_copy)
-
-msg_exists ::= "EXISTS"
-
-msg_expunge ::= "EXPUNGE"
-
-msg_fetch ::= ("FETCH" / "STORE") SP "(" 1#("ENVELOPE" SP
- env_length envelope / "FLAGS" SP "(" 1#(recent_flag
- flag_list) ")" / "INTERNALDATE" SP date /
-
-
-
-Rice [Page 39]
-
-RFC 1203 IMAP3 February 1991
-
-
- "RFC822" SP string / "RFC822.HEADER" SP string /
- "RFC822.SIZE" SP NUMBER / "RFC822.TEXT" SP
- string / key SP string_list) ")"
-
-msg_recent ::= "RECENT"
-
-msg_num ::= NUMBER
-
-nil ::= "NIL"
-
-non_inbox_mailbox_name ::= string
-
-noop ::= "NOOP"
-
-numbers ::= 1#NUMBER
-
-password ::= string
-
-pattern ::= string
-
-recent_flag ::= "\RECENT"
-
-read_only ::= "READONLY"
-
-read_write ::= "READWRITE"
-
-ready ::= "+" SP text_line
-
-request ::= tag SP (noop / login / logout / select / check /
- expunge / copy / fetch / store / search /
- select_version / select_features /
- supported_versions / bboard / find /
- read_only / read_write / flags / set_flags ) CRLF
-
-response ::= tag SP ("OK" / "NO" / "BAD") SP text_line CRLF
-
-search ::= "SEARCH" SP criteria
-
-search_notify ::= "SEARCH" SP (numbers) SP (criteria)
-
-select ::= "SELECT" SP mailbox
-
-select_features ::= "SELECT.FEATURES" 1#feature
-
-select_version ::= "SELECT.VERSION" SP "(" NUMBER SP NUMBER ")"
-
-sequence ::= NUMBER / (NUMBER "," sequence) / (NUMBER ":"
- sequence)
-
-
-
-Rice [Page 40]
-
-RFC 1203 IMAP3 February 1991
-
-
-set_flags ::= "SET.FLAGS" SP flag_list
-
-solicited ::= tag SP (msg_num SP msg_data / data /
- solicited_only) CRLF
-
-solicited_only ::= {None currently defined}
-
-store ::= "STORE" SP sequence SP store_att
-
-store_att ::= ("+FLAGS" SP flag_list / "-FLAGS" SP flag_list /
- "FLAGS" SP flag_list / RFC822.TEXT SP string
- / RFC822.HEADER SP string / key SP string)
-
-string ::= atom / """" 1*character """" / literal
-
-string_list ::= string / ("(" 1#string ")")
-
-supported_versions ::= "SUPPORTED.VERSIONS"
-
-supported_versions_notify ::= "SUPPORTED.VERSIONS" "(" 1#version_spec
- ")"
-
-system_flags ::= "\ANSWERED" SP "\FLAGGED" SP "\DELETED" SP
- "\SEEN"
-
-tag ::= atom
-
-unsolicited ::= "*" SP (msg_num SP msg_data / data) CRLF
-
-userid ::= string
-
-version_spec ::= "(" NUMBER SP NUMBER SP 1#feature ")"
-
-Appendix: Features.
-
- In this section we outline the standard features that are supported
- by all IMAP3 servers and identify those features which are
- recommended or experimental. For each of these features the default
- setting is specified. This means that it is required of any server
- that supports a given feature to make the default enabledness of that
- feature as is specified below. It is required that for each feature
- supported by a server the inverse feature should also be supported.
- The inverse feature name shall always be defined as the feature name
- preceded by the "~" character. Thus, the AUTO.SET.SEEN feature is
- disabled by the ~AUTO.SET.SEEN feature.
-
-
-
-
-
-
-Rice [Page 41]
-
-RFC 1203 IMAP3 February 1991
-
-
- Required Features:
-
- AUTO.SET.SEEN - When this features is enabled (default is disabled),
- the \\SEEN flag is set for all appropriate messages as a side
- effect of any of the following:
- FETCH of RFC822
- FETCH of RFC822.TEXT
- COPY
- Justification: This feature is provided for the use of clients
- that are unable to pipeline their commands effectively and
- communicate over high latency connections. When disabled,
- the server will not perform any such side effects. This feature
- is also provided so as to smooth the transition from IMAP2 to
- IMAP3.
-
-
- TAGGED.SOLICITED - When this feature is enabled (default is enabled
- for IMAP3, disabled for IMAP2 mode), solicited responses from
- the server will have the tag specified by the client.
- When this feature is disabled, solicited responses from the
- server will have the IMAP2 compatible tag "*", not the
- tag specified by the client.
- Justification: This feature is provided so as to smooth the
- transition from IMAP2 to IMAP3.
-
- Recommended Features.
-
- EIGHT.BIT.TRANSPARENT - When this feature is enabled
- (default is disabled), the server allows the transparent
- transmission of eight bit characters. When this feature is
- disabled, the value of any bit other than the least significant
- 7 bits transmitted by the server is unspecified. If this
- feature is enabled, the characters that compose all command
- keywords specified in the IMAP3 grammar and all feature names
- use only their 7 least significant bits.
- Justification: This feature is provided for the purpose of
- supporting national character sets within messages, encoded
- languages such as Japanese Kanji characters and also of binary
- data, such as programs, graphics and sound.
-
-
- NEW.MAIL.NOTIFY - When this feature is enabled (default is
- disabled for compatibility with the majority of existing
- IMAP2 servers), the server will notify the client of the
- arrival of new mail in the currently selected mailbox
- using the appropriate RECENT and EXISTS unsolicited messages
- without the client needing to send periodic CHECK commands.
- Justification: This feature is provided to allow clients to
-
-
-
-Rice [Page 42]
-
-RFC 1203 IMAP3 February 1991
-
-
- switch off any periodic polling strategy that they may use
- to look for new mail. Such polling unnecessarily uses bandwidth
- and can cause the interactive performance to degrade because
- the user can be kept waiting while some background process
- is doing a CHECK.
-
-
- SEND - When this feature is enabled (default is disabled) a new
- "SEND" command becomes available to the client. The SEND
- command instructs the server to send a message, rather
- than requiring the client to use its own, local message
- sending capability, for example. An example of of the
- send command might be as follows:
- tag42 SEND RFC822 {2083}
- From: James Rice <Rice@Sumex-Aim.Stanford.Edu>
- To:.....
- If the server is unable to parse the message being sent then
- it is required to issue a suitable NO notification to the client.
- If the message cannot be delivered for some reason then the
- server should send a suitable message to the FROM: address
- of the message detailing the delivery failure.
- When the SEND feature is enabled, the "send" production in
- the grammar is added and as defined below. The "send"
- request is added to the list of requests in the request
- production also as shown below:
-
- message_format ::= RFC822
-
- request ::= tag SP (noop / login / logout / select / check /
- expunge / copy / fetch / store / search /
- select_version / select_features /
- supported_versions / bboard / find /
- read_only / read_write / flags /
- set_flags / send) CRLF
-
- send ::= SEND SP message_format SP string
-
- Justification: This feature is provided so that mail can be
- sent by the same reliable server that is used for the storage
- of mail. This has, amongst others, the following benefits:
- - Single process clients need not be delayed by mail
- transmission.
- - Mail sent by the client will have the server named as the
- message's sender. This can be important because there are
- a lot of mailers that erroneously cause reply mail to be
- sent to the Sender, not the From or Reply-To address. Since
- the client in general is not listening for mail being sent
- to it directly this can cause mail to be lost.
-
-
-
-Rice [Page 43]
-
-RFC 1203 IMAP3 February 1991
-
-
- - Clients can be written that do not have any native message
- sending capability.
-
-
- ADD.MESSAGE - When this feature is enabled (default is disabled)
- a new "ADD.MESSAGE" command becomes available to the client.
- The ADD.MESSAGE command instructs the server to add the
- specified message to the designated mailbox. This command
- can be thought of as being like a COPY command except in
- this case the message that is put in the designated mailbox
- is specified as a string, rather than as a message number to
- be copied from the currently selected mailbox. An example
- use of this command might be as follows:
- tag42 ADD.MESSAGE OUTGOING-MAIL RFC822 {2083}
- From: James Rice <Rice@Sumex-Aim.Stanford.Edu>
- To:.....
- This will have the effect of adding the message to the mailbox
- called OUTGOING-MAIL.
- If the server is unable to parse the message being added then
- it is required to issue a suitable NO notification to the client.
- When the ADD.MESSAGE feature is enabled, the "add_message"
- production in the grammar is added and as defined below.
- The "add_message" request is added to the list of requests
- in the request production also as shown below:
-
- add_message ::= ADD.MESSAGE SP mailbox SP format SP string
-
- message_format ::= RFC822
-
- request ::= tag SP (noop / login / logout / select / check /
- expunge / copy / fetch / store / search /
- select_version / select_features /
- supported_versions / bboard / find /
- read_only / read_write / flags / set_flags /
- add_message) CRLF
-
- Justification: This feature is provided so that clients can
- easily add mail to specific mailboxes. This allows clients
- to implement such behavior as outgoing mail storage (BCC)
- without the need to resort to mailing to special BCC mailboxes.
-
-
- RENUMBER - When this feature is enabled (default is disabled)
- the RENUMBER command becomes available to the client.
- The RENUMBER command will reorder the assignment of message
- numbers to the messages in the mailbox. If this results in a
- change to the association of any message number with any
- message then the server is required to send solicited RESET
-
-
-
-Rice [Page 44]
-
-RFC 1203 IMAP3 February 1991
-
-
- responses to the client. The intent of this command is
- to allow users to view mailboxes in user-meaningful order
- efficiently. While the client could do the ordering,
- it would be less efficient in general. Note that the
- server may or may not change the actual storage of the
- messages and the ordering may or may not remain in effect
- after another mailbox is selected or the IMAP session is
- terminated. Informally, the syntax for the RENUMBER
- command is:
-
- tag RENUMBER field_name ordering_type
-
- this has the effect of changing the IMAP grammar to be
- as follows:
-
- ordering_type ::= DATE / NUMERIC / ALPHA
-
- renumber ::= RENUMBER SP field_name SP ordering_type
-
- request ::= tag SP (noop / login / logout / select / check /
- expunge / copy / fetch / store / search /
- select_version / select_features /
- supported_versions / bboard / find /
- read_only / read_write / flags / set_flags /
- renumber) CRLF
-
- For example:
- tag42 RENUMBER FROM ALPHA
- ;;;RENUMBER alphabetically by the from field
- tag42 RESET 10:20,49
- ;;;Messages 10 to 20 and 49 have changed
- tag42 OK RENUMBER finished. Sequence has changed
- tag43 FETCH ALL 10:20,49
- ;;;Client chooses to fetch the changed msgs.
-
- To support this the RESET message is defined as follows:
-
- */tag RESET message_sequence
- This solicited of unsolicited message from the server informs the
- client that it should flush any information that it has
- retained for the specified messages.
-
- Justification: This feature is provided so that clients can
- view mailboxes in an order that is convenient to the user.
- This is particularly important in the context of mailboxes
- that the user copies messages to from other mailboxes. This
- user-controlled filing process often does not happen in any
- well-defined order. Because messages in a mailbox are
-
-
-
-Rice [Page 45]
-
-RFC 1203 IMAP3 February 1991
-
-
- implicitly ordered (usually by arrival date, though this is
- not a required ordering predicate), the user can be confused
- by the apparent order of messages in the mailbox. The
- addition of the RENUMBER command makes it unnecessary
- for the user to leave IMAP and use some other mail system to
- sort mailboxes.
-
-
- ENCODING - When this feature is enabled (default is disabled) a new
- generic key named ENCODING is defined. The value associated
- with the generic ENCODING key is a list of (tag encoding-type
- options...) lists that represent the ordered, possibly encoded
- body of the message. Each such list represents a segment of
- the body of the message and the way in which it is encoded.
- Any options that follow the encoding_type are further
- qualifiers that describe the format of the segment. Each tag
- is created by the server and is unique with respect to the
- other tags allocated for the other elements in the ENCODING
- list. The client may use the tags returned by the server as
- concrete keys to access a field which is encoded using the
- encoding type and options mentioned in the appropriate list.
- Thus:
-
- tag41 FETCH 196 ENCODING ; Client asks for encoding field of msg 196.
- tag41 FETCH ENCODING NIL ; Server replies. This message is not encoded.
- tag41 OK Fetch completed.
- tag42 FETCH 197 ENCODING ; Client asks for encoding field of msg 197.
- tag42 FETCH ENCODING ((G001 UUENCODE) (G002 HEX)) ; Server replies.
- tag42 OK Fetch completed.
- tag43 FETCH 197 G002 ; Client asks for field named G002
- tag43 FETCH G002 "A0 00 FF 13 42......." ; Server sends value of field.
- tag43 OK Fetch completed.
-
- or
-
- tag44 STORE 197 G002 "0A 00 FF 31 24......."
- ; Store back the segment with nibbles swapped
-
- Note: As a side-effect of enabling this feature, the generic key
- TEXT will be redefined so as to return only those body parts of a
- message that are of type TEXT. The concrete key RFC822.TEXT, on
- the other hand, would still return everything in the body of the
- message, even if it was full of strange, binary character
- sequences.
-
- When the client STOREs to a field denoted by one of the above tags
- the server will interpret the value being passed as being in the
- same format as is currently specified in the ENCODING field. The
-
-
-
-Rice [Page 46]
-
-RFC 1203 IMAP3 February 1991
-
-
- server is not required to be able to reformat the data associated
- with the ENCODING tags if the client STOREs a new value for the
- ENCODING field. The interpretability of a message in the context
- of its ENCODING field is undefined if the client side-effects that
- ENCODING field, unless the client also STOREs new, reformatted
- values for the fields that have had their encoding changed.
-
- If the client stores a new value for the ENCODING field then the
- tags in the new value will be used to index the parts of the body.
- All tags in a client-STOREd ENCODING that are the same as those
- originally generated by the server in response to a FETCH ENCODING
- command are said still to denote the fields that they originally
- denoted, though possibly reordered. Any tags not originally
- defined by the server will denote new message parts, in the
- appropriate format, in the relative position specified. The
- exclusion of any tags that the server originally defined in a
- FETCH of the ENCODING field will indicate the deletion of that
- part of the message. Newly created message parts are undefined by
- default, so if the client fails to follow the STOREing of the
- ENCODING field with suitable STORE commands for the values
- associated with any newly created tags, these fields will contain
- the null value NIL.
-
- Justification: This feature is supplied so as to allow support
- for emergent multi-part and multi-media mail standards.
-
- INDEXABLE.FIELDS - When this feature is enabled (default is
- disabled) the grammar of fetch commands is changed to allow the
- client to select a specific subsequence from the field in
- question. For example:
-
- tag42 FETCH 197 BODY 2000:3999
-
- would fetch the second two thousand bytes of the body of message
- 197. This feature allows resource limited clients to access
- small parts of large messages. The formal syntax for this is:
-
- fetch_att ::= "ENVELOPE" / "FLAGS" / "INTERNALDATE" /
- fetch_key / (fetch_key SP NUMBER ":" NUMBER)
-
- fetch_key ::= "RFC822" / "RFC822.HEADER" / "RFC822.SIZE" /
- "RFC822.TEXT" / key
-
- If the lower bound number (the number to the left of the colon)
- exceeds the maximum size of the field then the empty string is
- returned. If the upper bound exceeds the maximum size of the
- field but the lower bound does not then the server will return the
- remaining substring of the field after the lower bound. The
-
-
-
-Rice [Page 47]
-
-RFC 1203 IMAP3 February 1991
-
-
- bounds specified are zero indexed into the fields and the bounds
- index fields by 8-bit bytes.
-
- Justification: This feature is provided so as to allow resource-
- limited clients to read very large messages and also to allow
- clients to improve interactive response for the reading of large
- messages by fetching the first "screen full" of data to display
- immediately and fetching the rest of the message in the
- background.
-
- SET.EOL - When enabled (default is disabled), this feature
- allows the new command SET.EOL to be available, changing the
- grammar as follows:
-
- character ::= "CR" / "LF" / number
-
- request ::= tag SP (noop / login / logout / select / check /
- expunge / copy / fetch / store / search /
- select_version / select_features /
- supported_versions / bboard / find /
- read_only / read_write / flags / set_flags /
- set_eol) CRLF
-
- set_eol ::= "SET.EOL" 1#character
-
- This has the effect of changing the end of line character sequence
- generated by the server for newlines within strings to the
- sequence of characters specified. The characters in the sequence
- can be either the specified symbolically named characters or a
- numerical value, specifying the decimal value of the character to
- use. Thus, if the client would like newlines in strings to be
- indicated by a carriage return followed by a control-d, the client
- would issue the following command:
-
- tag42 SET.EOL CR 4
-
- If the server is unable to support the combination of characters
- requested by the client as its end-of-line pattern it will reply
- with a NO response. This might be the case, for example, if a
- server is only able to generate its own native line feed pattern
- and the CRLF required by IMAP by default.
-
- The server is required to change any length denoting values, such
- as envelope byte counts for all future transactions to reflect the
- new eol setting. This change in reported sizes should apply to
- all generic size fetching keys, but not to concrete ones such as
- RFC822.SIZE, which by their very nature require a size measurement
- in RFC822 format, i.e., with CRLF as the end-of-line convention.
-
-
-
-Rice [Page 48]
-
-RFC 1203 IMAP3 February 1991
-
-
- Justification: This feature is provided because frequently clients
- and servers might have end-of-line conventions other than the CRLF
- specified by RFC822. It is undesirable that the IMAP be linked
- too closely to RFC822 and selecting a different convention might
- allow substantial performance improvements in both clients and
- servers by saving either client, server or both from having to
- shuffle text around so as to add or remove non-local end-of-line
- sequences.
-
-Acknowledgements:
-
- This text is based on RFC 1064 by Mark Crispin.
-
- The following have made major contributions to this proposed update
- to the IMAP2 protocol:
-
- James Rice <Rice@sumex-aim.stanford.edu>
- Richard Acuff <acuff@sumex-aim.stanford.edu>
- Bill Yeager <yeager@sumex-aim.stanford.edu>
- Christopher Lane <lane@sumex-aim.stanford.edu>
- Bjorn Victor <Bjorn.Victor@docs.uu.se>
-
- Additional input was also received from:
-
- Andrew Sweer <sweer@sumex-aim.stanford.edu>
- Tom Gruber <Gruber@sumex-aim.stanford.edu>
- Kevin Brock <Brock@Sumex-Aim.Stanford.Edu>
- Mark Crispin <MRC@cac.washington.edu>
-
-Security Considerations
-
- Security issues are not discussed in this memo.
-
-Author's Address
-
- James Rice
- Stanford University
- Knowledge Systems Laboratory
- 701 Welch Road
- Building C
- Palo Alto, CA 94304
-
- Phone: (415) 723-8405
- EMail: RICE@SUMEX-AIM.STANFORD.EDU
-
-
-
-
-
-
-
-Rice [Page 49]
- \ No newline at end of file