home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pine / imap_archive / text0141.txt < prev    next >
Encoding:
Text File  |  1993-07-02  |  46.6 KB  |  1,242 lines

  1. Here is the latest draft of the IMSP spec.  I would like to stress the
  2. "highly experimental" state of this specification.  In particular, the
  3. format of the unsolicited BBOARD and MAILBOX replies are subject to
  4. radical change, depending on the resolution of the grammar for the
  5. corresponding IMAP unsolicited replies.
  6.  
  7.  
  8. -*- text -*-
  9.  
  10. *DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*
  11.  
  12. Network Working Group                                        J. G. Myers
  13. Request for Comments: ????                               Carnegie Mellon
  14.                                                               June 1993
  15.  
  16.           IMSP -- Interactive Mail Support Protocol
  17.  
  18. Status of this memo
  19.  
  20.    This document suggests a proposed protocol for the Internet
  21.    community, and requests discussion and suggestions for
  22.    improvements.  Distribution of this memo is unlimited.
  23.  
  24.    The protocol discussed in this document is experimental and subject
  25.    to change.  Persons planning on either implementing or using this
  26.    protocol are STRONGLY URGED to get in touch with the author before
  27.    embarking on such a project.
  28.  
  29. Introduction
  30.  
  31.    The intent of the Interactive Mail Support Protocol (IMSP) is to
  32.    support the provision of mail in a medium to large scale operation.
  33.    It is intended to be used as a companion to the IMAP2bis protocol
  34.    [RFC-1176] [IMAP2bis], providing services which are either outside
  35.    the scope of mail access or which pertain to environments which
  36.    must run more than one IMAP2 server in the same mail domain.
  37.  
  38. The protocol
  39.  
  40.    The IMSP protocol consists of a sequence of client commands and
  41.    server responses, with server data interspersed between the
  42.    responses. To simplify the implementation of clients, the IMSP
  43.    protocol has a command structure similar to the IMAP protocol.
  44.    Many of the IMSP commands and responses have the same or similar
  45.    syntax and semantics of their IMAP2 counterparts.
  46.    Like the IMAP2 protocol, commands and responses
  47.    are tagged.  That is, a command begins with a unique identifier
  48.    (typically a short alphanumeric sequence such as a Lisp "gensym"
  49.    function would generate e.g., A0001, A0002, etc.), called a tag.  The
  50.    response to this command is given the same tag from the server.
  51.    Additionally, the server may send an arbitrary amount of "unsolicited
  52.    data", which is identified by the special reserved tag of "*".  There
  53.    is another special reserved tag, "+", discussed below.
  54.  
  55.    The server must be listening for a connection on TCP port 406.
  56.    When a connection is opened the server sends an unsolicited OK or
  57.    PREAUTH response as a greeting message and then waits for commands.
  58.  
  59.    The client opens a connection and waits for the greeting.  The
  60.    client must not send any commands until it has received the
  61.    greeting from the server.
  62.  
  63.    Once the greeting has been received, the client may begin sending
  64.    commands and is not under any obligation to wait for a server
  65.    response to this command before sending another command, within the
  66.    constraints of TCP flow control.  When commands are received the
  67.    server acts on them and responds with command responses, often
  68.    interspersed with data.  The effect of a command can not be
  69.    considered complete until a command response with a tag matching the
  70.    command is received from the server.
  71.  
  72.    Although all known IMSP servers at the time of this writing process
  73.    commands to completion before processing the next command, it is not
  74.    required that a server do so.  However, many commands can affect the
  75.    results of other commands, creating processing-order dependencies
  76.    (or, for FIND and GETACL, ambiguities about which data is associated
  77.    with which command).  All implementations that operate in a non-
  78.    lockstep fashion must recognize such dependencies and defer or
  79.    synchronize execution as necessary.
  80.  
  81.    Generally, the first command from the client is a LOGIN command
  82.    with user name and password arguments to establish identity and
  83.    access authorization, unless this has already been accomplished
  84.    through other means, e.g. connecting via the BSD "RSH" protocol.
  85.    Until identity and access authorization have been established, no
  86.    operations other than LOGIN or LOGOUT are permitted.
  87.  
  88.    The client terminates the session with the LOGOUT command.  The
  89.    server returns a "BYE" followed by an "OK".
  90.  
  91.    A Typical Scenario
  92.  
  93.            Client                          Server
  94.            ------                          ------
  95.                                        {Wait for Connection}
  96.        {Open Connection}        -->
  97.                                    <-- * OK IMSP Server Ready
  98.                                        {Wait for command}
  99.        A001 LOGIN Fred Secret   -->
  100.                                    <-- A001 OK User Fred logged in
  101.                                        {Wait for command}
  102.        A002 FIND ALL.MAILBOXES INBOX        -->
  103.                                    <-- * MAILBOX INBOX (imap3.do.main)
  104.                                    <-- A0002 OK Find complete
  105.                                        {Wait for command}
  106.        A003 SUBSCRIBE BBOARD comp.mail.mime      -->
  107.                                    <-- A003 OK Subscribe complete
  108.                                        {Wait for command}
  109.        A004 LOGOUT              -->
  110.                                    <-- * BYE IMSP server quitting
  111.                                    <-- A004 OK Logout complete
  112.        {Close Connection}       --><-- {Close connection}
  113.                                        {Go back to start}
  114.  
  115. Base functionality
  116.  
  117.    Commands
  118.  
  119.    tag NOOP
  120.  
  121.       The NOOP command returns an OK to the client.  By itself, it does
  122.       nothing, but certain things may happen as side effects.
  123.  
  124.    Responses
  125.  
  126.    tag OK text
  127.  
  128.       This response identifies successful completion of the command with
  129.       that tag.  The text is a line of human-readable text that may be
  130.       useful in a protocol telemetry log for debugging purposes.
  131.  
  132.    tag NO text
  133.  
  134.       This response identifies unsuccessful completion of the command
  135.       with that tag.  The text is a line of human-readable text that
  136.       probably should be displayed to the user in an error report by the
  137.       client.
  138.  
  139.    tag BAD text
  140.  
  141.       This response identifies faulty protocol received from the client;
  142.       The text is a line of human-readable text that should be recorded
  143.       in any telemetry as part of a bug report to the maintainer of the
  144.       client.
  145.  
  146.    * BYE text
  147.  
  148.       This response identifies that the server is about to close the
  149.       connection.  The text is a line of human-readable text that should
  150.       be displayed to the user in a status report by the client.  This
  151.       may be sent as part of a normal logout sequence, or as a panic
  152.       shutdown announcement by the server.  It is also used by some
  153.       servers as an announcement of an inactivity autologout.
  154.  
  155.    * OK text
  156.  
  157.       This response identifies normal operation on the server.  No
  158.       special action by the client is called for, however, the text
  159.       should be displayed to the user in some fashion.  This is
  160.       currently only used by servers at startup as a greeting message to
  161.       show they are ready to accept the first command.
  162.  
  163.    * NO text
  164.  
  165.       This response identifies a warning from the server that does not
  166.       affect the overall results of any particular request.  The text is
  167.       a line of human-readable text that should be presented to the user
  168.       as a warning of improper operation.
  169.  
  170.    * BAD text
  171.  
  172.       This response identifies a serious error at the server; it may
  173.       also indicate faulty protocol from the client in which a tag could
  174.       not be parsed.  The text is a line of human-readable text that
  175.       should be presented to the user as a serious or possibly fatal
  176.       error.  It should also be recorded in any telemetry as part of a
  177.       bug report to the maintainer of the client and server.
  178.  
  179.    + text
  180.  
  181.       This response identifies that the server is ready to accept the
  182.       text of a literal from the client.  Normally, a command from the
  183.       client is a single text line.  If the server detects an error in
  184.       the command, it can simply discard the remainder of the line.  It
  185.       cannot do this for commands that contain literals, since a literal
  186.       can be an arbitrarily long amount of text, and the server may not
  187.       even be expecting a literal.  This mechanism is provided so the
  188.       client knows not to send a literal until the server expects it,
  189.       preserving client/server synchronization.
  190.  
  191.       In practice, this condition is rarely encountered.  In the current
  192.       protocol, the only client command likely to contain a literal is
  193.       the LOGIN command.  Consider a server that validates the user
  194.       before checking the password.  If the password contains "funny"
  195.       characters and hence is sent as a literal, then if the user is
  196.       invalid an error would occur before the password is parsed.
  197.  
  198.       No such synchronization protection is provided for literals sent
  199.       from the server to the client, for performance reasons.  Any
  200.       synchronization problems in this direction would be caused by a
  201.       bug in the client or server.
  202.  
  203. Identification and Authorization
  204.  
  205.    Commands
  206.  
  207.    tag LOGIN user password
  208.  
  209.       The LOGIN command identifies the user to the server and carries
  210.       the password authenticating this user.  This information is used
  211.       by the server to control access to commands.
  212.  
  213.       EXAMPLE:  A001 LOGIN SMITH SESAME
  214.       logs in as user SMITH with password SESAME.
  215.  
  216.    tag LOGOUT
  217.  
  218.       The LOGOUT command informs the server that the client is done with
  219.       the session.  The server should send an unsolicited BYE response
  220.       before the (tagged) OK response, and then close the network
  221.       connection.
  222.  
  223.    Responses
  224.  
  225.    * PREAUTH
  226.  
  227.       A pre-authenticated IMSP server should recognize that
  228.       authentication has already happened, and enter the post-login
  229.       state.  In its greeting message, it should use the unsolicited
  230.       reply "PREAUTH" instead of "OK" to indicate that external
  231.       authentication has taken place.
  232.  
  233. Server location and new message information
  234.  
  235.    Commands
  236.  
  237.    tag FIND MAILBOXES pattern
  238.  
  239.       The FIND MAILBOXES command accepts as an argument a pattern
  240.       (including wildcards) that specifies some set of mailbox names
  241.       that are usable by connecting to an IMAP2 server and using the SELECT
  242.       command.  The format of mailboxes is implementation dependent.
  243.       Only those mailboxes that the user has declared as being
  244.       "subscribed" are returned.
  245.  
  246.       Two wildcard characters are defined; "*" specifies any number
  247.       (including zero) characters may match at this position and "%"
  248.       specifies a single character may match at this position.  For
  249.       example, FOO*BAR will match FOOBAR, FOOD.ON.THE.BAR and FOO.BAR,
  250.       whereas FOO%BAR will match only FOO.BAR.  "*" will match all
  251.       mailboxes.
  252.  
  253.       The FIND MAILBOXES command will return some set of unsolicited
  254.       MAILBOX replies that have as their value a single mailbox name,
  255.       a list of mailbox attributes, and a list of hosts on which the
  256.       mailbox resides.
  257.  
  258.       EXAMPLE:  A002 FIND MAILBOXES *
  259.                 * MAILBOX INBOX (\SUBSCRIBED) (imap3.do.main)
  260.                 * MAILBOX FOOBAR (\SUBSCRIBED \UNSEEN) (imap3.do.main)
  261.                 * MAILBOX GENERAL (\SUBSCRIBED \UNSEEN) (imap12.do.main)
  262.                 A002 OK Find completed
  263.  
  264.       Although the use of explicit file or path names for mailboxes is
  265.       discouraged by this standard, it may be unavoidable.  It is
  266.       important that the value returned in the MAILBOX unsolicited
  267.       reply be usable in a SELECT command given to an IMAP server
  268.       running on each of the returned hosts without remembering any
  269.       path specification that may have been used in the FIND MAILBOXES
  270.       pattern.
  271.  
  272.       The SUBSCRIBE MAILBOX and UNSUBSCRIBE MAILBOX commands
  273.       manipulate the list returned by this command.
  274.  
  275.    tag FIND ALL.MAILBOXES pattern
  276.  
  277.       The FIND ALL.MAILBOXES command is similar to FIND MAILBOXES;
  278.       however, it should return a complete list of all mailboxes
  279.       available to the user.  Data is returned as in FIND MAILBOXES.
  280.  
  281.       The exact meaning of this is implementation-dependent, since
  282.       the concept of a bounded or deterministic set of `mailboxes
  283.       available to the user' may not be meaningful for a particular
  284.       server or server implementation.  The command must at least 
  285.       return the set of mailboxes that FIND MAILBOXES does.
  286.  
  287.    tag FIND UNSEEN.MAILBOXES pattern
  288.  
  289.       The FIND UNSEEN.MAILBOXES command is similar to FIND MAILBOXES;
  290.       however, only those "subscribed" mailboxes in which there are
  291.       messages without the \SEEN flag are returned.  Data is returned
  292.       as in FIND MAILBOXES.
  293.  
  294.       Should an implementation be unable to determine which 
  295.       mailboxes have unread messages, it should return the same
  296.       information returned by FIND MAILBOXES.
  297.  
  298.    tag FIND BBOARDS pattern
  299.  
  300.       The FIND BBOARDS command accepts as an argument a pattern that
  301.       specifies some set of bulletin board names that are usable by
  302.       connecting to an IMAP2 server and using the BBOARD command.
  303.       Wildcards are permitted as in FIND MAILBOXES.  Only those
  304.       bboards that the user has declared as being "subscribed" are
  305.       returned.
  306.  
  307.       The FIND BBOARDS command will return some set of unsolicited
  308.       BBOARD replies that have as their value a single bulletin board
  309.       name, a list of attributes, and a list of hosts on which the
  310.       bboard resides.
  311.  
  312.       EXAMPLE:  A002 FIND BBOARDS *
  313.                 * BBOARD comp.mail.mime (\SUBSCRIBED \UNSEEN) (imap2.do.main)
  314.                 * BBOARD GENERAL (\SUBSCRIBED) (imap7.do.main imap8.do.main)
  315.                 A002 OK Find completed
  316.  
  317.    tag FIND ALL.BBOARDS pattern
  318.  
  319.       The FIND ALL.BBOARDS command is similar to FIND BBOARDS;
  320.       however, it should return a complete list of all bulletin
  321.       boards available to the user.  Data is returned as in
  322.       FIND BBOARDS.
  323.  
  324.       The exact meaning of this is implementation-dependent, since
  325.       the concept of a bounded or deterministic set of `bboards
  326.       available to the user' may not be meaningful for a particular
  327.       server or server implementation.  The command must at least
  328.       return the set of bboards that FIND BBOARDS does.
  329.  
  330.    tag FIND UNSEEN.BBOARDS pattern
  331.  
  332.       The FIND UNSEEN.BBOARDS command is similar to FIND BBOARDS;
  333.       however, only those "subscribed" bboards for which there are
  334.       messages without the \SEEN flag are returned.  Data is returned as
  335.       in FIND BBOARDS.
  336.  
  337.       Should an implementation be unable to determine which 
  338.       bboards have unread messages, it should return the same
  339.       information returned by FIND BBOARDS.
  340.  
  341.    Responses
  342.  
  343.    * MAILBOX string attributes server_list
  344.  
  345.       This response occurs as a result of a FIND MAILBOXES, FIND
  346.       ALL.MAILBOXES, or FIND UNSEEN.MAILBOXES command.  The
  347.       string is a mailbox name that matches the pattern in the command.
  348.       attributes is an S-expression list of mailbox attributes.
  349.       server_list is an S-expression list of the fully qualified
  350.       domain names of the hosts on which the mailbox resides.
  351.  
  352.       The defined mailbox attributes are:
  353.  
  354.       \SUBSCRIBED    FIND MAILBOXES command will return mailbox
  355.       \UNSEEN        FIND UNSEEN.MAILBOXES command will return mailbox
  356.  
  357.       An IMSP client must be able to accept attributes it does not
  358.       understand.
  359.  
  360.       Should the server_list contain more than one host name, the
  361.       client should access the mailbox by attempting to connect to
  362.       each server until one connection succeeds.  The client should
  363.       attempt each possible host in the sequence listed unless it has
  364.       good reason to do otherwise (such as an already-open connection
  365.       or geographic information).
  366.  
  367.    * BBOARD string attributes server_list
  368.  
  369.       This response occurs as a result of a FIND BBOARDS, FIND
  370.       ALL.BBOARDS, or FIND UNSEEN.BBOARDS command.  The
  371.       string is a bboard name that matches the pattern in the command.
  372.       attributes is an S-expression list of mailbox attributes.
  373.       server_list is an S-expression list of the fully qualified
  374.       domain names of the hosts on which the bboard resides.
  375.  
  376.       The defined bboard attributes are:
  377.  
  378.       \SUBSCRIBED    FIND BBOARDS command will return bboard
  379.       \UNSEEN        FIND UNSEEN.BBOARDS command will return bboard
  380.  
  381.       An IMSP client must be able to accept attributes it does not
  382.       understand.
  383.  
  384.       Should the server_list contain more than one host name, the
  385.       client should access the bboard by attempting to connect to each
  386.       server until one connection succeeds.  The client should attempt
  387.       each possible host in the sequence listed unless it has good
  388.       reason to do otherwise (such as an already-open connection or
  389.       geographic information).
  390.  
  391.    Discussion
  392.  
  393.       When a user asks a client to read a bboard by name, the client
  394.       should issue a "FIND ALL.BBOARDS" command to the IMSP server in
  395.       order to determine which server it is on.
  396.  
  397.       The attribute list corrects a minor design flaw in IMAP2bis:
  398.       without it the MAILBOX/BBOARD unsolicited response has an
  399.       ambiguous meaning--one can only tell if the folder is subscribed
  400.       or not by figuring out whether it is a response to a FIND foo or
  401.       a FIND ALL.foo command.
  402.  
  403.       The following is a possible implementation of the FIND
  404.       UNSEEN.MAILBOXES and FIND UNSEEN.BBOARDS commands:
  405.  
  406.       When a message is appended to a folder, the IMAP server notifies
  407.       the IMSP server of some unique (within the folder) attribute of
  408.       the message.  Possibile attributes include the message-id and the
  409.       internaldate.  This could be done using an IMSP extension:
  410.  
  411.       tag LAST MAILBOX mailbox attribute user
  412.       tag LAST BBOARD bboard attribute
  413.  
  414.       When a user switches folders or closes a connection and has seen
  415.       all messages in that folder, the IMAP server notifies the IMSP
  416.       server that the user has read all of the messages, including the
  417.       attribute of the last message.  This too could be done using an
  418.       IMSP extension:
  419.  
  420.       tag SEEN MAILBOX mailbox attribute user
  421.       tag SEEN BBOARD bboard attribute user
  422.  
  423.       When asked for folders with messages unseen by the user, the
  424.       IMSP server can check the attribute of the message last reported
  425.       for the user against the attribute of the message last appended
  426.       to the folder.
  427.  
  428.       In the interest of having the IMAP server/IMSP server
  429.       communications be the same across implementation, it might be
  430.       worthwhile to propose this method of implementing FIND
  431.       UNSEEN.MAILBOXES and FIND UNSEEN.BBOARDS as a standard.
  432.  
  433. Subscription management
  434.  
  435.    tag SUBSCRIBE MAILBOX mailbox
  436.  
  437.       The SUBSCRIBE MAILBOX command adds the specified mailbox name to
  438.       the list of "active" or "subscribed" mailboxes as returned by
  439.       the FIND MAILBOXES command.  This command returns an OK response
  440.       only if the subscription is successful.
  441.  
  442.       Subscriptions should be preserved between sessions.
  443.  
  444.    tag UNSUBSCRIBE MAILBOX mailbox
  445.  
  446.       The UNSUBSCRIBE MAILBOX command removes the specified mailbox name
  447.       from the list of "active" or "subscribed" mailboxes as returned by
  448.       the FIND MAILBOXES command.  This command returns an OK response
  449.       only if the unsubscription is successful.
  450.  
  451.       Unsubscriptions should be preserved between sessions.
  452.  
  453.    tag SUBSCRIBE BBOARD bboard
  454.  
  455.       The SUBSCRIBE BBOARD command adds the specified mailbox name to
  456.       the list of "active" or "subscribed" bulletin boards as returned
  457.       by the FIND BBOARDS command.  This command returns an OK response
  458.       only if the subscription is successful.
  459.  
  460.       Subscriptions should be preserved between sessions.
  461.  
  462.    tag UNSUBSCRIBE BBOARD bboard
  463.  
  464.       The UNSUBSCRIBE BBOARD command removes the specified mailbox name
  465.       from the list of "active" or "subscribed" bulletin boards as
  466.       returned by the FIND BBOARDS command.  This command returns an OK
  467.       response only if the unsubscription is successful.
  468.  
  469.       Unsubscriptions should be preserved between sessions.
  470.  
  471. Mailbox and BBoard management
  472.  
  473.    tag CREATE mailbox
  474.    tag CREATE mailbox server_partition_list
  475.  
  476.       The CREATE command creates a mailbox with the given name.  This
  477.       command returns an OK response only if a new mailbox with that
  478.       name has been created.  It is an error to attempt to create a
  479.       mailbox with a name that refers to an extant mailbox.  Any error
  480.       in creation will return a NO response.
  481.  
  482.       Creating INBOX is not permitted.  If there is a primary or
  483.       default mailbox for this user, it MUST exist and be called
  484.       INBOX; hence it may not be created.  Otherwise, the name INBOX
  485.       can not be used; see section VI, "INBOX Requirement Loosened",
  486.       of IMAP2bis [IMAP2bis] for more details.
  487.  
  488.       If server_partition_list is specified, it indicates the server
  489.       or set of servers on which the mailbox is to be created.  Each 
  490.       hostname in the list may be followed by a slash character and
  491.       an atom.  The atom specifies in an implementation-dependent
  492.       manner where to store the mailbox on the server.
  493.  
  494.       EXAMPLE:  A002 CREATE FOOBAR (imap2.do.main/a imap4.do.main)
  495.             A002 OK Create completed
  496.  
  497.       If server_partition_list is not specified, the placement of the
  498.       mailbox is up to the implementation.
  499.  
  500.    tag DELETE mailbox
  501.    tag DELETE mailbox hostname
  502.  
  503.       The DELETE command deletes a mailbox with the given name.  This
  504.       command returns an OK response only if a mailbox with that name
  505.       has been deleted.  It is an error to attempt to delete a mailbox
  506.       name that does not exist.  Any error in deletion will return a
  507.       NO response.
  508.  
  509.       A server SHOULD NOT attempt to test that a mailbox is empty prior
  510.       to permitting deletion; this would prevent the deletion of a mailbox
  511.       which for some reason can not be opened or expunged, leaving to
  512.       possible denial of service problems.  Any such checking should be
  513.       left to the discretion of the client.
  514.  
  515.       Deleting INBOX is not permitted.
  516.  
  517.       If hostname is specified, the mailbox is deleted on that host.
  518.       If it is not specified, the mailbox is deleted on all hosts
  519.       on which the mailbox resides.
  520.  
  521.    tag RENAME oldmailbox newmailbox
  522.  
  523.       The RENAME command changes the name of a mailbox.  This command
  524.       returns an OK response only if a mailbox with the old name exists
  525.       and has been successfully renamed to the new name.  It is an error
  526.       to attempt to rename with an old mailbox name that does not exist
  527.       or a new mailbox name which already exists.  Any error in renaming
  528.       will return a NO response.
  529.  
  530.       Should any users be subscribed to the mailbox, their
  531.       subscriptions should be updated appropriately.
  532.  
  533.       Renaming INBOX is permitted.  A new, empty INBOX is created in its
  534.       place.  Should users be subscribed to the INBOX, they should
  535.       remain subscribed to the new, empty INBOX.
  536.  
  537.    tag MOVE mailbox hostname server_partition_list
  538.  
  539.       The MOVE command moves a mailbox between servers and/or
  540.       replicates a mailbox.  Hostname specifies where the move is to
  541.       be made from and server_partition_list specifies where the move
  542.       is to be made to.  The interpretation of server_partition_list is
  543.       the same as for the CREATE command.
  544.  
  545.    tag CREATE.BBOARD bboard
  546.    tag CREATE.BBOARD bboard server_partition_list
  547.  
  548.       The CREATE.BBOARD command creates a bboard with the given name.
  549.       This command returns an OK response only if a new bboard with
  550.       that name has been created.  It is an error to attempt to create
  551.       a bboard with a name that refers to an extant bboard.  Any error
  552.       in creation will return a NO response.
  553.  
  554.       If server_partition_list is specified, it indicates the server
  555.       or set of servers on which the bboard is to be created.  Each 
  556.       hostname in the list may be followed by a slash character and
  557.       an atom.  The atom specifies in an implementation-dependent
  558.       manner where to store the bboard on the server.
  559.  
  560.       EXAMPLE:  A002 CREATE.BBOARD FOOBAR (imap2.do.main/a map4.do.main)
  561.             A002 OK Create completed
  562.  
  563.       If server_partition_list is not specified, the placement of the
  564.       bboard is up to the implementation.
  565.  
  566.    tag DELETE.BBOARD bboard
  567.    tag DELETE.BBOARD bboard hostname
  568.  
  569.       The DELETE.BBOARD command deletes a bboard with the given name.
  570.       This command returns an OK response only if a bboard with that
  571.       name has been deleted.  It is an error to attempt to delete a
  572.       bboard name that does not exist.  Any error in deletion will
  573.       return a NO response.
  574.  
  575.       If hostname is specified, the bboard is deleted on that host.
  576.       If it is not specified, the bboard is deleted on all hosts
  577.       on which the bboard resides.
  578.  
  579.    tag RENAME.BBOARD oldbboard newbboard
  580.  
  581.       The RENAME.BBOARD command changes the name of a bboard.  This command
  582.       returns an OK response only if a bboard with the old name exists
  583.       and has been successfully renamed to the new name.  It is an error
  584.       to attempt to rename with an old bboard name that does not exist
  585.       or a new bboard name which already exists.  Any error in renaming
  586.       will return a NO response.
  587.  
  588.       Should any users be subscribed to the bboard, their
  589.       subscriptions should be updated appropriately.
  590.  
  591.    tag MOVE.BBOARD bboard hostname server_partition_list
  592.  
  593.       The MOVE.BBOARD command moves a bboard between servers and/or
  594.       replicates a bboard.  Hostname specifies where the move is to be
  595.       made from and server_partition_list specifies where the move is
  596.       to be made to.  The interpretation of server_partition_list is the
  597.       same as for the CREATE command.
  598.  
  599.    tag ALIAS.BBOARD oldbboard newbboard
  600.  
  601.       After "oldbboard" gets subsequently deleted, all users that are
  602.       subscribed to "oldbboard" will be subscribed to newbboard.
  603.  
  604.       [Call this RESUBSCRIBE?  Put in Subscription management?
  605.       Actually perform the deletion?  Provide ALIAS command for mailboxes?]
  606.  
  607.    Discussion
  608.  
  609.       Of course, local administrative policy may restrict use of these
  610.       commands.  Implementations may use this as justification for
  611.       not implementing partitions, multiple locations for
  612.       mailboxes/bboards, or the MOVE and MOVE.BBOARD commands.
  613.  
  614.       MOVE and MOVE.BBOARD cannot be implemented without some
  615.       non-IMAP2 communication with the IMAP servers.  Replication
  616.       requires some communication between IMAP servers.
  617.       CREATE.BBOARD, DELETE.BBOARD, and RENAME.BBOARD, and partitions
  618.       require IMAP protocol extensions.  Everything else can be
  619.       implemented through the use of IMAP2bis commands.
  620.  
  621. User configuration information
  622.  
  623.    Commands
  624.  
  625.    tag GET pattern
  626.  
  627.       The GET command accepts as an argument a pattern 
  628.       that specifies some set of configuration options.  Wildcards are
  629.       permitted as in FIND MAILBOXES.  Option names are case-insensitive.
  630.  
  631.       The GET command will return some set of unsolicited OPTION
  632.       replies, giving the names and values of matching options.
  633.  
  634.       Example:  A002 GET SENT*
  635.                 * OPTION SENT.MAILBOX SENT-MAIL [READ-WRITE]
  636.         A002 OK Get completed
  637.  
  638.    tag SET option value
  639.  
  640.       The SET command accepts as arguments the name of an option and
  641.       a string value.  The value of the option is set to the specified
  642.       string.  If the option with that name does not already exist, it
  643.       is created.
  644.  
  645.       Option names are case-insensitive atoms.
  646.  
  647.       SET is not allowed if the named option is read-only.
  648.  
  649.    tag UNSET option
  650.  
  651.       The UNSET command accepts as an argument the name of an option.
  652.       Depending on the implementation, the option is either removed or
  653.       its value reverts to the implementation-defined default.
  654.  
  655.       UNSET is not allowed if the named option is read-only.
  656.  
  657.    Responses
  658.  
  659.    * OPTION atom string string
  660.    
  661.       This response occurs as a result of a GET command.  The first
  662.       string is an option name that matches the pattern in the
  663.       command.  The second string is the value of the option.  The
  664.       third string is either [READ-WRITE] if the user may change the
  665.       option or [READ-ONLY] if the user may not.
  666.  
  667.    Discussion
  668.  
  669.       Options can be site wide or per-user.  Possible uses include:
  670.  
  671.       User preferences (e.g. mailbox to store copies of outgoing mail)
  672.       Site configuration information (e.g. names of SMTP servers)
  673.       Per-user configuration information (e.g. contents of From: header)
  674.  
  675.       The option namespace could be split into a section for standard
  676.       options and sections for client-specific options.
  677.  
  678.       Possible standard options include:
  679.  
  680.       DATE        (current time, in rfc822 format)
  681.       DOMAIN        (local mail domain)
  682.       FROM        (string to use for From: header)
  683.       DELIVERY.HOSTS    (list of smtp hosts for mail submission)
  684.       SENT.MAILBOX    (mailbox to store copies of outgoing mail)
  685.  
  686. Address book
  687.  
  688.    Commands
  689.  
  690.    tag SEARCHADDRESS addressbook lookup_criteria
  691.  
  692.       The SEARCHADDRESS command searches the specified address book
  693.       for entries that express the intersection (AND function) of all
  694.       of the specified criteria.  The aliases matching the criteria
  695.       are provided by a series of unsolicited SEARCHADDRESS replies.
  696.       If no criterea are specified, all aliases in the address book
  697.       are provided.
  698.  
  699.       The lookup_criteria is a sequence of "field pattern" pairs, each
  700.       specifying entries where the value of field matches the
  701.       specified pattern in a case-independent manner.  The pattern may
  702.       optionally be an RFC-1342 format multinational character string.
  703.  
  704.       EXAMPLE: A0340 SEARCHADDRESS Fred name "* Rubble" email "*@bedrock"
  705.            * SEARCHADDRESS barney
  706.            A0340 OK Searchaddress completed
  707.  
  708.    tag FETCHADDRESS addressbook aliases
  709.  
  710.       Fetches the contents of the entries in the specified address
  711.       book for the specified aliases.  The entries are returned in a
  712.       series of unsolicited FETCHADDRESS replies.
  713.  
  714.       EXAMPLE: A0341 FETCHADDRESS Fred barney
  715.            * FETCHADDRESS Fred barney name "Barney Rubble" email
  716.               "barney@bedrock"
  717.            A0341 OK Fetchaddress completed
  718.  
  719.    tag STOREADDRESS addressbook alias field_data
  720.  
  721.       Creates or modifies the entry in the specified addressbook for
  722.       the specified alias.  Fields not specified in the command are
  723.       not changed.  Setting the value of a field to the null string
  724.       removes the field.
  725.  
  726.       EXAMPLE: A0342 STOREADDRESS Fred barney phone "555" email "" 
  727.            * FETCHADDRESS Fred barney name "Barney Rubble" phone "555"
  728.            A0342 OK Storeaddress completed
  729.  
  730.    tag DELETEADDRESS addressbook alias
  731.  
  732.       Removes the entry in the specified addressbook for the
  733.       specified alias.
  734.  
  735.  
  736.    Responses
  737.  
  738.    * SEARCHADDRESS addressbook <1#alias>
  739.  
  740.       This response occurs as a result of a SEARCHADDRESS command.
  741.       The alias(es) refer to those address book entries that match the
  742.       search criteria.
  743.  
  744.    * FETCHADDRESS addressbook alias field_data
  745.  
  746.       This is the means by which address book entries are returned to
  747.       the client.  The entry for alias in addressbook contains
  748.       field_data.
  749.  
  750.    Discussion   
  751.  
  752.       Address books provide a way for users to store and search
  753.       typed information.  They are primarily intended to be used
  754.       for storing information about entities with which the user
  755.       communicates.
  756.  
  757.       The addressbook field to the various commands allows users to
  758.       access address books belonging to other users, should they have
  759.       the appropriate access.  Servers are expected to at least allow
  760.       the client to manipulate the address book with the same name as
  761.       the "user" specified in the LOGIN command.  Servers may accept
  762.       "addressbook" values that do not correspond to users that may
  763.       LOGIN.
  764.  
  765.       Each addres book contains some number of entries.  Each entry
  766.       is named by an alias and has any number of fields.  Each field
  767.       has an atom name and a string value.
  768.  
  769.       The standard fields are:
  770.  
  771.       NAME    A full name
  772.       EMAIL    CRLF-separated list of electronic mail addresses
  773.       PHONE    CRLF-separated list of phone numbers
  774.       ADDRESS    Postal address
  775.  
  776.       An entry may also have additional, user-defined fields.  Clients
  777.       are expected to allow the user to view and modify all fields of
  778.       an entry, even if they do not recognize some field names.
  779.  
  780.  
  781. Access control lists
  782.  
  783.    Commands
  784.  
  785.    tag SETACL MAILBOX mailbox identifier rights
  786.  
  787.       Changes the access control list on the specified mailbox so that
  788.       the specified identifier is granted the permissions enumerated
  789.       in rights.
  790.  
  791.       Identifier has implementation-defined semantics.  Possible
  792.       variations of identifier interpretation include:
  793.  
  794.       * User names, as specified in the LOGIN command.
  795.  
  796.       * Named groups of users, presumably managed by some
  797.         authorization service.
  798.  
  799.       * Only allowing identifiers supported by the operating system
  800.     (e.g. ``user'', ``group'', and ``other'' for the Unix filesystem)
  801.  
  802.       * Whether rights granted to other mailboxes in an
  803.         implementation-defined hierarchy are inherited
  804.  
  805.       * A portion of the identifier specifying an "authentication
  806.         type".
  807.  
  808.     As an example, an implementation may control posting to a group
  809.         based on the contents of the From: header:
  810.  
  811.         from$user        p
  812.  
  813.       * Whether the union of rights for matching identifiers are granted
  814.         to a user or whether the rights for the most specific matching
  815.         identifier is granted.
  816.  
  817.     As an example, for a mailbox with the following ACL:
  818.  
  819.     user            lrsa
  820.         group-user-is-in    lrsw
  821.  
  822.     One implementation may grant the user 'lrswa' rights, another
  823.         may only grant the user 'lrsa'.
  824.  
  825.       * A prefix to an identifier name specifying the listed rights
  826.     are to be removed from users who match the prefixed identifier.
  827.  
  828.     As an example, for a mailbox with the following ACL:
  829.  
  830.     group-user-is-in    lrsw
  831.     -user            w
  832.  
  833.     An implementation may grant the user 'lrs' rights.
  834.  
  835.  
  836.       Rights is a string listing a (possibly empty) set of alphanumeric
  837.       characters, each character listing a set of operations which is
  838.       being controlled.  Letters [lowercase?] are reserved for
  839.       ``standard'' rights, listed below.  Digits are reserved for
  840.       implementation or site defined rights.  The standard rights are:
  841.  
  842.       l - lookup (folder is visible to FIND commands)
  843.       r - read (SELECT the mailbox, perform CHECK, FETCH, PARTIAL,
  844.           SEARCH, COPY from mailbox)
  845.       s - keep seen/unseen information across sessions (STORE \SEEN flag)
  846.       w - write (STORE flags other than \SEEN and \DELETED)
  847.       i - insert (perform APPEND, COPY into mailbox)
  848.       p - post (send mail to submission address for mailbox, not
  849.           enforced by IMAP2/IMSP itself)
  850.       c - create (CREATE new sub-folders in any implementation-defined
  851.           hierarchy)
  852.       d - delete (STORE \DELETED flag, perform EXPUNGE)
  853.       a - administer (perform SETACL)
  854.  
  855.       An implementation may tie rights together or may force rights to
  856.       always or never be granted.  For example, in an implementation
  857.       that uses unix mode bits, the rights "wisd" are tied.  The "a"
  858.       right is always granted to the owner and is never granted to
  859.       another user.  If rights are tied in an implementation, it
  860.       should be conservative in granting rights in response to SETACL
  861.       commands--unless all rights in a tied set are specified, none
  862.       should be used.  Numeric rights may not be tied.
  863.  
  864.    tag SETACL BBOARD bboard identifier rights
  865.  
  866.       Changes the access control list on the specified bboard so that
  867.       the specified identifier is granted the permissions enumerated
  868.       in rights.
  869.  
  870.       Identifier and rights are as specified for SETACL MAILBOX.      
  871.  
  872.    tag SETACL ADDRESSBOOK addressbook identifier rights
  873.  
  874.       Changes the access control list of the specified addressbook so
  875.       that the specified identifier is granted the permissions
  876.       enumerated in rights.
  877.  
  878.       Identifier and rights are as specified for SETACL MAILBOX.  Not
  879.       all rights specified in SETACL MAILBOX will be meaningful for an
  880.       address book.
  881.  
  882.    tag DELETEACL MAILBOX mailbox identifier
  883.  
  884.       Removes any portion of the access control list for mailbox for
  885.       the specified identifier.
  886.  
  887.    tag DELETEACL BBOARD bboard identifier
  888.  
  889.       Removes any portion of the access control list for bboard for
  890.       the specified identifier.
  891.  
  892.    tag DELETEACL ADDRESSBOOK addressbook identifier
  893.  
  894.       Removes any portion of the access control list for the specified
  895.       addressbook for the specified identifier.
  896.  
  897.    tag GETACL MAILBOX mailbox
  898.  
  899.       Returns the access control list for mailbox in some set of
  900.       unsolicited ACL replies.  There may not be more than one ACL
  901.       reply specifying any given identifier.
  902.  
  903.       EXAMPLE:  A002 GETACL MAILBOX INBOX
  904.                 * ACL MAILBOX INBOX Fred rwipslda
  905.         A002 Ok Getacl complete
  906.  
  907.    tag GETACL BBOARD bboard
  908.  
  909.       Returns the access control list for bboard in some set of
  910.       unsolicited ACL replies.
  911.  
  912.       EXAMPLE:  A002 GETACL BBOARD comp.mail.mime
  913.                 * ACL BBOARD comp.mail.mime anybody-else rpsl
  914.         * ACL BBOARD comp.mail.mime news rwipcsld
  915.         A002 Ok Getacl complete
  916.  
  917.    tag GETACL ADDRESSBOOK addressbook
  918.  
  919.       Returns the access control list for the specified addressbook in
  920.       some set of unsolicited ACL replies.
  921.  
  922.       EXAMPLE:  A002 GETACL ADDRESSBOOK Fred
  923.                 * ACL ADDRESSBOOK Fred anybody-else r
  924.         * ACL ADDRESSBOOK Fred Fred rwipd
  925.         A002 Ok Getacl complete
  926.  
  927.    tag MYACL MAILBOX mailbox
  928.  
  929.       Returns the set of rights that the user has to mailbox in an
  930.       unsolicited MYACL reply.
  931.  
  932.  
  933.    tag MYACL BBOARD mailbox
  934.  
  935.       Returns the set of rights that the user has to bboard in an
  936.       unsolicited MYACL reply.
  937.  
  938.    tag MYACL ADDRESSBOOK addressbook
  939.  
  940.       Returns the set of rights that the user has to the specified
  941.       addressbook in an unsolicited MYACL reply.
  942.  
  943.    Responses
  944.  
  945.    * ACL MAILBOX string string string
  946.  
  947.       This response occurs as a result of a GETACL MAILBOX command.
  948.       The first string is the mailbox name for which this ACL entry
  949.       applies.  The second string is the identifier for which this
  950.       entry applies.  The third string is the set of rights that the
  951.       identifier has.
  952.  
  953.    * ACL BBOARD string string string
  954.  
  955.       This response occurs as a result of a GETACL BBOARD command.
  956.       The first string is the bboard name for which this ACL entry
  957.       applies.  The second string is the identifier for which this
  958.       entry applies.  The third string is the set of rights that the
  959.       identifier has.
  960.  
  961.    * ACL ADDRESSBOOK string string string
  962.  
  963.       This response occurs as a result of a GETACL ADDRESSBOOK
  964.       command.  The first string is the addressbook for which this ACL
  965.       entry applies.  The second string is the identifier for which
  966.       this entry applies.  The third string is the set of rights that
  967.       the identifier has.
  968.  
  969.    * MYACL MAILBOX string string
  970.  
  971.       This response occurs as a result of a MYACL MAILBOX command.
  972.       The first string is the mailbox name for which this ACL entry
  973.       applies.  The third string is the set of rights that the client
  974.       has.
  975.  
  976.    * MYACL BBOARD string string
  977.  
  978.       This response occurs as a result of a MYACL BBOARD command.
  979.       The first string is the bboard name for which this ACL entry
  980.       applies.  The third string is the set of rights that the client
  981.       has.
  982.  
  983.    * MYACL ADDRESSBOOK string string
  984.  
  985.       This response occurs as a result of a MYACL ADDRESSBOOK command.
  986.       The first string is the addressbook for which this ACL entry
  987.       applies.  The second string is the set of rights that the client
  988.       has.
  989.  
  990.    Discussion
  991.  
  992.       The assignment of letters to rights is AFS-centric.
  993.       Alternatively we could change i->a, l->v, a->what?.  The set of
  994.       rights should make some sense in other messaging domains,
  995.       particularly NNTP.
  996.  
  997.       The IMSP and NNTP ACL specifications should be similar.  The
  998.       IMSP author will work with the author of the NNTP ACL extension
  999.       in order to resolve this.
  1000.  
  1001.       It is not resolved whether address book ACLs should be
  1002.       per-addressbook (as specified here) or per-entry.
  1003.  
  1004. Unresolved issues
  1005.  
  1006.    The following mail support issues have been raised, but not
  1007.    resolved in IMSP.
  1008.  
  1009.    * User forwarding address
  1010.  
  1011.       Deferred.  This probably belongs in a separate user directory
  1012.       service.
  1013.  
  1014.    * Mail filing control (e.g. ``vacation'', delivery of mail to
  1015.      folders other than INBOX based on subject, sender)
  1016.  
  1017.       Deferred.  This probably belongs in a separate service, quite
  1018.       possibly a user directory service.
  1019.  
  1020.    * Administrative issues:
  1021.      Purge rates for bboards (not necessarily age related)
  1022.      Quotas for users or bboards (not necessarily megabyte related)
  1023.  
  1024.    * Notification issues
  1025.      Current use of quota
  1026.      Exhaustion of quota
  1027.      Renamed/deleted folders/bboards
  1028.  
  1029.       [ Use unsolicited OK/NO messages? ]
  1030.  
  1031.       For renamed/deleted folders/bboards, server should notify, then
  1032.       change or delete subscription as necessary.
  1033.  
  1034. Minimal conformance
  1035.  
  1036.    Implementation of the following commands is mandatory:
  1037.  
  1038.    NOOP
  1039.    LOGIN
  1040.    LOGOUT
  1041.    FIND MAILBOXES
  1042.    FIND ALL.MAILBOXES
  1043.    FIND UNSEEN.MAILBOXES   
  1044.    FIND BBOARDS
  1045.    FIND ALL.BBOARDS
  1046.    FIND UNSEEN.BBOARDS
  1047.    SUBSCRIBE MAILBOX
  1048.    SUBSCRIBE BBOARD
  1049.    UNSUBSCRIBE MAILBOX
  1050.    UNSUBSCRIBE BBOARD
  1051.    CREATE        (server_partition_list argument is optional)
  1052.    DELETE
  1053.    RENAME
  1054.    GET
  1055.    SET
  1056.    SEARCHADDRESS
  1057.    FETCHADDRESS
  1058.    STOREADDRESS
  1059.    DELETEADDRESS
  1060.  
  1061. Backwards compatibility
  1062.  
  1063.    When a client is directed by a user or an initial configuration to
  1064.    contact a server, it should first attempt to reach the IMSP
  1065.    service.  If that fails with connection refused, it should fall
  1066.    back to the IMAP2 protocol.
  1067.  
  1068. Conventions
  1069.  
  1070.    The following terms are used in a meta-sense in the syntax
  1071.    specification below:
  1072.  
  1073.       An ASCII-STRING is a sequence of arbitrary ASCII characters.
  1074.  
  1075.       A CHARACTER is any ASCII character except """", CR, or LF.
  1076.  
  1077.       An ATOM is a sequence of CHARACTERs delimited by SP or CRLF.  An
  1078.       ATOM may not start with a "{".
  1079.  
  1080.       A CRLF is an ASCII carriage-return character followed immediately
  1081.       by an ASCII linefeed character.
  1082.  
  1083.       A NUMBER is a sequence of the ASCII characters that represent
  1084.       decimal numerals ("0" through "9"), delimited by SP, CRLF, ",", or
  1085.       ":".
  1086.  
  1087.       A SP is the ASCII space character.
  1088.  
  1089.       A TEXT_LINE is a human-readable sequence of ASCII characters up to
  1090.       but not including a terminating CRLF.
  1091.  
  1092.    A common field in the IMSP protocol is a STRING, which may be an
  1093.    ATOM, QUOTED-STRING (a sequence of CHARACTERs inside
  1094.    double-quotes), or a LITERAL.  A literal consists of an open brace
  1095.    ("{"), a number, a close brace ("}"), a CRLF, and then an
  1096.    ASCII-STRING of n characters, where n is the value of the number
  1097.    inside the brace.  In general, a string should be represented as an
  1098.    ATOM or QUOTED-STRING if at all possible.  Literals are most often
  1099.    sent from the server to the client; in the rare case of a client to
  1100.    server literal there is a special consideration (see the "+ text"
  1101.    response above).
  1102.  
  1103.    Note the set of allowable CHARACTERs is larger than specified for IMAP2.
  1104.  
  1105. Formal syntax
  1106.  
  1107.    The following syntax specification uses the augmented Backus-Naur
  1108.    Form (BNF) notation as specified in RFC 822 with one exception; the
  1109.    delimiter used with the "#" construct is a single space (SP) and not
  1110.    a comma.
  1111.  
  1112.    acl_reply       ::= "ACL" acl_option SP string SP string SP string
  1113.  
  1114.    acl_option        ::= "MAILBOX" / "BBOARD" / "ADDRESSBOOK"
  1115.  
  1116.    alias_bboard       ::= "ALIAS.BBOARD" SP string SP string
  1117.  
  1118.    bboard_reply       ::= "BBOARD" SP string SP "(" 0#atom ")" SP
  1119.             "(" 1#hostname ")"
  1120.  
  1121.    create       ::= "CREATE" SP mailbox [ SP server_partition_list ]
  1122.  
  1123.    create_bboard   ::= "CREATE.BBOARD" SP string [ SP server_partition_list ]
  1124.  
  1125.    delete       ::= "DELETE" SP mailbox [ SP hostname ]
  1126.  
  1127.    deleteaddress   ::= "DELETEADDRESS" SP userid SP atom
  1128.  
  1129.    delete_bboard   ::= "DELETE.BBOARD" SP string [ SP hostname ]
  1130.  
  1131.    fetchaddress    ::= "FETCHADDRESS" SP userid 1#( SP atom )
  1132.  
  1133.    fetchaddress_r  ::= "FETCHADDRESS" SP userid SP atom field_data
  1134.  
  1135.    field_data      ::= 1#key_value
  1136.  
  1137.    find            ::= "FIND" SP find_option SP string
  1138.  
  1139.    find_option     ::= "MAILBOXES" / "ALL.MAILBOXES" / "UNSEEN.MAILBOXES /
  1140.                "BBOARDS" / "ALL.BBOARDS" / "UNSEEN.BBOARDS"
  1141.  
  1142.    get           ::= "GET" SP string
  1143.  
  1144.    getacl       ::= "GETACL" SP acl_option SP string
  1145.  
  1146.    hostname       ::= atom    ; Fully qualified domain name
  1147.  
  1148.    key_value       ::= SP atom SP string
  1149.  
  1150.    literal         ::= "{" NUMBER "}" CRLF ASCII-STRING
  1151.  
  1152.    login           ::= "LOGIN" SP userid SP password
  1153.  
  1154.    logout          ::= "LOGOUT"
  1155.  
  1156.    lookup_criterea ::= 0#( SP key SP pattern )
  1157.  
  1158.    mailbox         ::= "INBOX" / string
  1159.  
  1160.    mailbox_reply   ::= "MAILBOX" SP string SP "(" 0#atom ")" SP
  1161.                "(" 1#hostname ")"
  1162.  
  1163.    move           ::= "MOVE" SP mailbox SP hostname SP server_partition_list
  1164.  
  1165.    move_bboard       ::= "MOVE.BBOARD" SP string SP hostname SP
  1166.                server_partition_list
  1167.  
  1168.    myacl       ::= "MYACL" SP acl_option SP string
  1169.  
  1170.    myacl_reply       ::= "MYACL" acl_option SP string SP string
  1171.  
  1172.    noop            ::= "NOOP"
  1173.  
  1174.    option_reply       ::= "OPTION" SP atom SP string SP
  1175.             ("[READ-ONLY]" / "[READ-WRITE]")
  1176.  
  1177.    rename       ::= "RENAME" SP mailbox SP string
  1178.  
  1179.    rename_bboard   ::= "RENAME.BBOARD" SP string SP string
  1180.  
  1181.    request       ::= tag SP (noop / login / logout / find /
  1182.                    subscribe / unsubscribe / create /
  1183.                    delete / rename / move / create_bboard /
  1184.                    delete_bboard / rename_bboard /
  1185.                    move_bboard / alias_bboard /
  1186.                    get / set / searchaddress /
  1187.                    fetchaddress / storeaddress /
  1188.                   deleteaddress / getacl / setacl / myacl) CRLF
  1189.  
  1190.    response        ::= tag SP ("OK" / "NO" / "BAD") SP text_line CRLF
  1191.  
  1192.    searchaddress   ::= "SEARCHADDRESS" SP userid lookup_criteria
  1193.  
  1194.    searchaddress_r ::= "SEARCHADDRESS" SP userid 1#( SP atom )
  1195.  
  1196.    server_partition ::= hostname [ "/" atom ]
  1197.  
  1198.    server_partition_list ::= "(" 1#server_partition ")"
  1199.  
  1200.    set           ::= "SET" SP atom SP string
  1201.  
  1202.    setacl       ::= "SETACL" SP acl_option SP string SP string
  1203.             SP atom
  1204.  
  1205.    storeaddress       ::= "STOREADDRESS" SP userid SP atom field_data
  1206.  
  1207.    string          ::= atom / """" 1*character """" / literal
  1208.  
  1209.    subscribe       ::= "SUBSCRIBE" SP subscribe_opt SP string
  1210.  
  1211.    subscribe_opt   ::= "MAILBOX" / "BBOARD"
  1212.  
  1213.    unsolicited     ::= "*" SP (mailbox_reply / bboard_reply / option_reply /
  1214.                    searchaddress_r / fetchaddress_r /
  1215.                    acl_reply / myacl_reply)
  1216.                    CRLF
  1217.  
  1218.    unsubscribe     ::= "UNSUBSCRIBE" SP subscribe_opt SP string
  1219.  
  1220.    userid       ::= string
  1221.  
  1222.  
  1223. References
  1224.  
  1225.    [RFC-1176] Crispin, Mark R.  Interactive Mail Access Protocol -
  1226.    Version 2.  August 1990.  RFC-1176.
  1227.  
  1228.    [IMAP2bis] Crispin, Mark R.  IMAP2bis - Extensions to the IMAP2
  1229.    Protocol, December 1992
  1230.  
  1231. Author's Address
  1232.  
  1233.    John G. Myers
  1234.    Carnegie-Mellon University
  1235.    5000 Forbes Ave.
  1236.    Pittsburgh PA, 15213-3890
  1237.  
  1238.    Email: jgm+@cmu.edu
  1239.  
  1240.  
  1241.  
  1242.