Annotation of 43BSD/contrib/mh/support/pop/pop.txt, revision 1.1

1.1     ! root        1: Request For Comments:  draft
        !             2: 
        !             3: 
        !             4: 
        !             5: 
        !             6: 
        !             7: 
        !             8: 
        !             9: 
        !            10: 
        !            11: 
        !            12: 
        !            13: 
        !            14:                      Post Office Protocol (revised)
        !            15: 
        !            16: 
        !            17:                         Sun Oct 28 19:40:26 1984
        !            18: 
        !            19:                              Last Revision
        !            20:                         Wed Oct 23 20:54:26 1985
        !            21: 
        !            22:                             Marshall T. Rose
        !            23: 
        !            24:             Department of Computer and Information Sciences
        !            25:                          University of Delaware
        !            26:                             Newark, DE 19716
        !            27: 
        !            28:                                MRose@UDel
        !            29: 
        !            30: 
        !            31: 
        !            32: 
        !            33:     This memo suggests a simple method for workstations to dynamically
        !            34:     access mail from a mailbox server.  This RFC specifies a proposed
        !            35:     protocol for the ARPA Internet community, and requests discussion
        !            36:     and suggestions for improvements.
        !            37: 
        !            38: 
        !            39:                           Acknowledgements
        !            40: 
        !            41:     This memo is based on RFC918.  Although similar in form to the
        !            42:     original POP proposed for the ARPA Internet community, the protocol
        !            43:     discussed in this memo is similar in spirit to the ideas
        !            44:     investigated by the MZnet project at the University of California,
        !            45:     Irvine.
        !            46: 
        !            47: Request For Comments:  draft                                    M. Rose
        !            48: Post Office Protocol (revised)                                     UDel
        !            49: 
        !            50: 
        !            51: 
        !            52:                             Introduction
        !            53: 
        !            54:     On certain types of smaller nodes in the ARPA Internet it is often
        !            55:     impractical to maintain a message transport system(MTS).  For
        !            56:     example, a workstation may not have sufficient resources (cycles,
        !            57:     disk space) in order to permit a SMTP server and associated local
        !            58:     mail delivery system to be kept resident and continuously running.
        !            59:     Similarly, it may be expensive (or impossible) to keep a personal
        !            60:     computer interconnected to an IP-style network for long amounts of
        !            61:     time (the node is lacking the resource known as "connectivity").
        !            62: 
        !            63:     Despite this, it is often very useful to be able to manage mail on
        !            64:     these smaller nodes, and they often support a user agent(UA) to aid
        !            65:     the tasks of mail handling.  To solve this problem, a node which
        !            66:     can support an MTS entity offers a maildrop service to these less
        !            67:     endowned nodes. The Post Office Protocol (POP) is intended to
        !            68:     permit a workstation to dynamically access a maildrop on a server
        !            69:     host in a useful fashion. Usually, this means that the POP is used
        !            70:     to allow a workstation to retrieve mail that the server is holding
        !            71:     for it.
        !            72: 
        !            73:     For the remainder of this memo, the term "client host" refers to a
        !            74:     host making use of the POP service, while the term "server host"
        !            75:     refers to a host which offers the POP service.
        !            76: 
        !            77:     The status of this protocol is experimental.
        !            78: 
        !            79: 
        !            80: 
        !            81:                          A Short Digression
        !            82: 
        !            83:     This memo does not specify how a client host enters mail into the
        !            84:     transport system, although a method consistent with the philosophy
        !            85:     of this memo is presented here:
        !            86: 
        !            87:         When the user agent on a client host wishes to enter a message
        !            88:         into the transport system, it establishes an SMTP connection
        !            89:         to its relay host (this relay host could be, but need not be,
        !            90:         the POP server host for the client host).
        !            91: 
        !            92:     If this method is followed, then the client host appears to the MTS
        !            93:     as a user agent, and should NOT be regarded as a "trusted" MTS
        !            94:     entity in any sense whatsoever.  This concept, along with the role
        !            95:     of the POP as a part of a split-UA model is discussed later in this
        !            96:     memo.
        !            97: 
        !            98:                              The Protocol
        !            99: 
        !           100:     Initially the server host starts the POP service by listening on
        !           101:     TCP port 109.  When a client host wishes to make use of the service
        !           102:     it establishes a TCP connection with the server host.  When the
        !           103:     connection is established, the POP server sends a greeting.  The
        !           104:     client and POP server then exchange commands and responses
        !           105:     (respectively) until the connection is closed or aborted.
        !           106: 
        !           107:     Commands in the POP consist of a keyword possibly followed by an
        !           108:     argument.  All commands are terminated by a CRLF pair.
        !           109: 
        !           110:     Responses in the POP consist of a success indicator and a keyword
        !           111:     possibly followed by additional information.  All responses are
        !           112:     terminated by a CRLF pair.  There are currently two success
        !           113:     indicators: positive ("+OK") and negative ("-ERR").
        !           114: 
        !           115:     Responses to certain commands are multi-line.  In these cases,
        !           116:     which are clearly indicated below, after sending the first line of
        !           117:     the response and a CRLF, any additional lines are sent, each
        !           118:     terminated by a CRLF pair.  When all lines of the response have
        !           119:     been sent, a final line is sent, consisting of a termination octet
        !           120:     (octal code 056, ".") and a CRLF pair. If any line of the
        !           121:     multi-line response begins with the termination octet, the line is
        !           122:     "bit-stuffed" by pre-pending the termination octet to that line of
        !           123:     the response.  Hence a multi-line response is terminated with the
        !           124:     five octets "CRLF.CRLF".  When examining a multi-line response, the
        !           125:     client checks to see if the line begins with the termination
        !           126:     octet. If so and if octets other than CRLF follow, the the first
        !           127:     octet of the line (the termination octet) is stripped away.  If so
        !           128:     and if CRLF immediately follows the termination character, then the
        !           129:     response from the POP server is ended and the line containing
        !           130:     ".CRLF" is not considered part of the multi-line response.
        !           131: 
        !           132:     A POP session progresses through a number of states during its
        !           133:     lifetime.  Once the TCP connection has been opened and the POP
        !           134:     server has sent the greeting, the session enters the AUTHORIZATION
        !           135:     state.  In this state, the client must identify itself to the POP
        !           136:     server.  Once the client has successfully done this, the server
        !           137:     acquires resources associated with the client's maildrop, and the
        !           138:     session enters the TRANSACTION state.  In this state, the client
        !           139:     requests actions on the part of the POP server.  When the client
        !           140:     has finished its transactions, the session enters the UPDATE state.
        !           141:     In this state, the POP server releases any resources acquired
        !           142:     during the TRANSACTION state and says goodbye.  The TCP connection
        !           143:     is then closed.
        !           144: 
        !           145:                        The AUTHORIZATION State
        !           146: 
        !           147:     Once the TCP connection has been opened by a POP client, the POP
        !           148:     server issues a one line greeting.  This can be any string
        !           149:     terminated by CRLF.  An example might be:
        !           150: 
        !           151:        S:    +OK dewey POP server ready (Comments to: PostMaster@UDel)
        !           152: 
        !           153:     Note that this greeting is a POP reply.  The POP server should always
        !           154:     give a positive response as the greeting.
        !           155: 
        !           156:     The POP session is now in the AUTHORIZATION state.  The client must
        !           157:     now issue the USER command.  If the POP server responds with a
        !           158:     positive success indicator ("+OK"), then the client may issue
        !           159:     either the PASS command to complete the authorization, or the QUIT
        !           160:     command to terminate the POP session.  If the POP server responds
        !           161:     with a negative success indicator ("-ERR") to the USER command,
        !           162:     then the client may either issue a new USER command or may issue
        !           163:     the QUIT command.
        !           164: 
        !           165:     When the client issues the PASS command, the POP server uses the
        !           166:     argument pair from the USER and PASS commands to determine if the
        !           167:     client should be given access to the appropriate maildrop.  If so,
        !           168:     the POP server then acquires an exclusive-access lock on the
        !           169:     maildrop.  If the lock is successfully acquired, the POP server
        !           170:     parses the maildrop into individual messages (read note below) and
        !           171:     responds with a positive success indicator. The POP session now
        !           172:     enters the TRANSACTION state.  If the lock can not be acquired or
        !           173:     the client should is denied access to the appropriate maildrop or
        !           174:     the maildrop can't be parsed for some reason, the POP server
        !           175:     responds with a negative success indicator.  (If a lock was
        !           176:     acquired but the POP server intends to respond with a negative
        !           177:     success indicator, the POP server must release the lock prior to
        !           178:     rejecting the command.) At this point, the client may either issue
        !           179:     a new USER command and start again, or the client may issue the
        !           180:     QUIT command.
        !           181: 
        !           182:              NOTE: Minimal implementations of the POP need only be
        !           183:              able to break a maildrop into its component messages;
        !           184:              they need NOT be able to parse individual messages.  More
        !           185:              advanced implementations may wish to have this
        !           186:              capability, for reasons discussed later.
        !           187: 
        !           188:     After the POP server has parsed the maildrop into individual
        !           189:     messages, it assigns a message-id to each message, and notes the
        !           190:     size of the message in octets.  The first message in the maildrop
        !           191:     is assigned a message-id of "1", the second is assigned "2", and so
        !           192:     on, so that the n'th message in a maildrop is assigned a message-id
        !           193:     of "n".  In POP commands and responses, all message-id's and
        !           194:     message sizes are expressed in base-10.
        !           195: 
        !           196:     Here are summaries for the three POP command discussed thus far:
        !           197: 
        !           198:        USER name
        !           199:            Arguments: a server specific user-id (required)
        !           200:            Restrictions: may only be given in the AUTHORIZATION state
        !           201:                after the POP greeting or after an unsuccessful USER
        !           202:                or PASS command
        !           203:            Possible Responses:
        !           204:                +OK name is welcome here
        !           205:                -ERR never heard of name
        !           206:            Examples:
        !           207:                C:    USER mrose
        !           208:                S:    +OK mrose is a real hoopy frood
        !           209:                  ...
        !           210:                C:    USER frated
        !           211:                S:    -ERR sorry, frated doesn't get his mail here
        !           212: 
        !           213:        PASS string
        !           214:            Arguments: a server/user-id specific password (required)
        !           215:            Restrictions: may only be given in the AUTHORIZATION state
        !           216:                after a successful USER command
        !           217:            Possible Responses:
        !           218:                +OK maildrop locked and ready
        !           219:                -ERR invalid password
        !           220:                -ERR unable to lock maildrop
        !           221:            Examples:
        !           222:                C:    USER mrose
        !           223:                S:    +OK mrose is a real hoopy frood
        !           224:                C:    PASS secret
        !           225:                S:    +OK mrose's maildrop has 2 messages (320 octets)
        !           226:                  ...
        !           227:                C:    USER mrose
        !           228:                S:    +OK mrose is a real hoopy frood
        !           229:                C:    PASS secret
        !           230:                S:    -ERR unable to lock mrose's maildrop, file already locked
        !           231: 
        !           232:        QUIT
        !           233:            Arguments: none
        !           234:            Restrictions: none
        !           235:            Possible Responses:
        !           236:                +OK
        !           237:            Examples:
        !           238:                C:    QUIT
        !           239:                S:    +OK dewey POP server signing off
        !           240: 
        !           241: 
        !           242: 
        !           243:                         The TRANSACTION State
        !           244: 
        !           245:     Once the client has successfully identified itself to the POP
        !           246:     server and the POP server has locked and burst the appropriate
        !           247:     maildrop, the POP session is now in the TRANSACTION state.  The
        !           248:     client may now issue any of the following POP commands repeatedly.
        !           249:     After each command, the POP server issues a response.  Eventually,
        !           250:     the client issues the QUIT command and the POP session enters the
        !           251:     UPDATE state.
        !           252: 
        !           253:     Here are the POP commands valid in the TRANSACTION state:
        !           254: 
        !           255:        STAT
        !           256:            Arguments: none
        !           257:            Restrictions: may only be given in the TRANSACTION state.
        !           258:            Discussion:
        !           259: 
        !           260:              The POP server issues a positive response with a line
        !           261:              containing information for the maildrop.  This line is
        !           262:              called a "drop listing" for that maildrop.
        !           263: 
        !           264:              In order to simplify parsing, all POP servers are
        !           265:              required to use a certain format for drop listings.  The
        !           266:              first octets present must indicate the number of messages
        !           267:              in the maildrop.  Following this is the size of the
        !           268:              maildrop in octets. This memo makes no requirement on
        !           269:              what follows the maildrop size.  Minimal implementations
        !           270:              should just end that line of the response with a CRLF
        !           271:              pair.  More advanced implementations may include other
        !           272:              information.
        !           273: 
        !           274:                   NOTE: This memo STRONGLY discourages implementations
        !           275:                   from supplying additional information in the drop
        !           276:                   listing.  Other, optional, facilities are discussed
        !           277:                   later on which permit the client to parse the
        !           278:                   messages in the maildrop.
        !           279: 
        !           280:              Note that messages marked as deleted are not counted in
        !           281:              either total.
        !           282: 
        !           283:            Possible Responses:
        !           284:                +OK nn mm
        !           285:            Examples:
        !           286:                C:    STAT
        !           287:                S:    +OK 2 320
        !           288: 
        !           289:        LIST [msg]
        !           290:            Arguments: a message-id (optionally)  If a message-id is
        !           291:                given, it may NOT refer to a message marked as deleted.
        !           292:            Restrictions: may only be given in the TRANSACTION state.
        !           293:            Discussion:
        !           294: 
        !           295:              If an argument was given and the POP server issues a
        !           296:              positive response with a line containing information for
        !           297:              that message.  This line is called a "scan listing"
        !           298:              for that message.
        !           299: 
        !           300:              If no argument was given and the POP server issues a
        !           301:              positive response, then the response given is multi-line.
        !           302:              After the initial +OK, for each message in the maildrop,
        !           303:              the POP server responds with a line containing information
        !           304:              for that message.  This line is called a "scan listing"
        !           305:              for that message.
        !           306: 
        !           307:              In order to simplify parsing, all POP servers are required
        !           308:              to use a certain format for scan listings.  The first
        !           309:              octets present must be the message-id of the message.
        !           310:              Following the message-id is the size of the message in
        !           311:              octets.  This memo makes no requirement on what follows
        !           312:              the message size in the scan listing.  Minimal
        !           313:              implementations should just end that line of the response
        !           314:              with a CRLF pair.  More advanced implementations may
        !           315:              include other information, as parsed from the message.
        !           316: 
        !           317:                   NOTE: This memo STRONGLY discourages implementations
        !           318:                   from supplying additional information in the scan
        !           319:                   listing.  Other, optional, facilities are discussed
        !           320:                   later on which permit the client to parse the
        !           321:                   messages in the maildrop.
        !           322: 
        !           323:              Note that messages marked as deleted are not listed.
        !           324: 
        !           325:            Possible Responses:
        !           326:                +OK scan listing follows
        !           327:                -ERR no such message
        !           328:            Examples:
        !           329:                C:    LIST
        !           330:                S:    +OK 2 messages (320 octets)
        !           331:                S:    1 120
        !           332:                S:    2 200
        !           333:                S:    .
        !           334:                  ...
        !           335:                C:    LIST 2
        !           336:                S:    +OK 2 200
        !           337:                  ...
        !           338:                C:    LIST 3
        !           339:                S:    -ERR no such message, only 2 messages in maildrop
        !           340: 
        !           341:        RETR msg
        !           342:            Arguments: a message-id (required)  This message-id may NOT
        !           343:                refer to a message marked as deleted.
        !           344:            Restrictions: may only be given in the TRANSACTION state.
        !           345:            Discussion:
        !           346: 
        !           347:              If the POP server issues a positive response, then the
        !           348:              response given is multi-line.  After the initial +OK, the
        !           349:              POP server sends the message corresponding to the given
        !           350:              message-id, being careful to bit-stuff the termination
        !           351:              character (as with all multi-line responses).
        !           352: 
        !           353:            Possible Responses:
        !           354:                +OK message follows
        !           355:                -ERR no such message
        !           356:            Examples:
        !           357:                C:    RETR 1
        !           358:                S:    +OK 120 octets
        !           359:                S:    <the POP server sends the entire message here>
        !           360:                S:    .
        !           361: 
        !           362:        DELE msg
        !           363:            Arguments: a message-id (required)  This message-id may NOT
        !           364:                refer to a message marked as deleted.
        !           365:            Restrictions: may only be given in the TRANSACTION state.
        !           366:            Discussion:
        !           367: 
        !           368:              The POP server marks the message as deleted.  Any future
        !           369:              reference to the message-id associated with the message
        !           370:              in a POP command generates an error.  The POP server does
        !           371:              not actually delete the message until the POP session
        !           372:              enters the UPDATE state.
        !           373: 
        !           374:            Possible Responses:
        !           375:                +OK message deleted
        !           376:                -ERR no such message
        !           377:            Examples:
        !           378:                C:    DELE 1
        !           379:                S:    +OK message 1 deleted
        !           380:                  ...
        !           381:                C:    DELE 2
        !           382:                S:    -ERR message 2 already deleted
        !           383: 
        !           384:        NOOP
        !           385:            Arguments: none
        !           386:            Restrictions: may only be given in the TRANSACTION state.
        !           387:            Discussion:
        !           388: 
        !           389:              The POP server does nothing, it merely replies with a
        !           390:              positive response.
        !           391: 
        !           392:            Possible Responses:
        !           393:                +OK
        !           394:            Examples:
        !           395:                C:    NOOP
        !           396:                S:    +OK
        !           397: 
        !           398:        RSET
        !           399:            Arguments: none
        !           400:            Restrictions: may only be given in the TRANSACTION state.
        !           401:            Discussion:
        !           402: 
        !           403:              If any messages have been marked as deleted by the POP
        !           404:              server, they are unmarked.  The POP server then replies
        !           405:              with a positive response.
        !           406: 
        !           407:            Possible Responses:
        !           408:                +OK
        !           409:            Examples:
        !           410:                C:    RSET
        !           411:                S:    +OK maildrop has 2 messages (320 octets)
        !           412: 
        !           413: 
        !           414: 
        !           415:                           The UPDATE State
        !           416: 
        !           417:     When the client issues the QUIT command from the TRANSACTION state
        !           418:     the POP session enters the UPDATE state.  (Note that if the client
        !           419:     issues the QUIT command from the AUTHORIZATION state, the POP
        !           420:     session terminates but does NOT enter the UPDATE state).
        !           421: 
        !           422:        QUIT
        !           423:            Arguments: none
        !           424:            Restrictions: none
        !           425:            Discussion:
        !           426: 
        !           427:              The POP server removes all messages marked as deleted
        !           428:              from the maildrop.  It then releases the exclusive-access
        !           429:              lock on the maildrop and replies as to the success of
        !           430:              these operations.  The TCP connection is then closed.
        !           431: 
        !           432:            Possible Responses:
        !           433:                +OK
        !           434:            Examples:
        !           435:                C:    QUIT
        !           436:                S:    +OK dewey POP server signing off (maildrop empty)
        !           437:                  ...
        !           438:                C:    QUIT
        !           439:                S:    +OK dewey POP server signing off (2 messages left)
        !           440:                  ...
        !           441: 
        !           442:                         Optional POP Commands
        !           443: 
        !           444:     The POP commands discussed above must be supported by all minimal
        !           445:     implementations of POP servers.
        !           446: 
        !           447:     The optional POP commands described below permit a POP client
        !           448:     greater freedom in message handling, while preserving a simple POP
        !           449:     server implementation.
        !           450: 
        !           451:              NOTE: This memo STRONGLY encourages implementations to
        !           452:              support these commands in lieu of developing augmented
        !           453:              drop and scan listings.  In short, the philosophy of this
        !           454:              memo is to put intelligence in the part of the POP client
        !           455:              and not the POP server.
        !           456: 
        !           457:        TOP msg n
        !           458:            Arguments: a message-id (required) and a number.  This
        !           459:                message-id may NOT refer to a message marked as deleted.
        !           460:            Restrictions: may only be given in the TRANSACTION state.
        !           461:            Discussion:
        !           462: 
        !           463:              If the POP server issues a positive response, then the
        !           464:              response given is multi-line.  After the initial +OK, the
        !           465:              POP server sends the headers of the message, the blank
        !           466:              line separating the headers from the body, and then the
        !           467:              number of lines indicated message's body, being careful to
        !           468:              bit-stuff the termination character (as with all
        !           469:              multi-line responses).  
        !           470: 
        !           471:              Note that if the number of lines requested by the POP
        !           472:              client is greater than than the number of lines in the
        !           473:              body, then the POP server sends the entire message.
        !           474: 
        !           475:            Possible Responses:
        !           476:                +OK top of message follows
        !           477:                -ERR no such message
        !           478:            Examples:
        !           479:                C:    TOP 10
        !           480:                S:    +OK
        !           481:                S:    <the POP server sends the headers of the message,
        !           482:                       a blank line, and the first 10 lines of the
        !           483:                       body of the message>
        !           484:                S:    .
        !           485:                  ...
        !           486:                C:    TOP 100
        !           487:                S:    -ERR no such message
        !           488: 
        !           489:        RPOP user
        !           490:            Arguments: a client specific user-id (required)
        !           491:            Restrictions: may only be given in the AUTHORIZATION state
        !           492:                after a successful USER command; in addition, may
        !           493:                only be given if the client used a reserved (privileged)
        !           494:                TCP port to connect to the server.
        !           495:            Discussion:
        !           496: 
        !           497:              The RPOP command may be used instead of the PASS command
        !           498:              to authenticate access to the maildrop.  In order for this
        !           499:              command to be successful, the POP client must use a
        !           500:              reserved TCP port (port < 1024) to connect to the server.
        !           501:              The POP server uses the argument pair from the USER and
        !           502:              RPOP commands to determine if the client should be given
        !           503:              access to the appropriate maildrop.  Unlike the PASS
        !           504:              command however, the POP server considers if the remote
        !           505:              user specified by the RPOP command who resides on the POP
        !           506:              client host is allowed to access the maildrop for the user
        !           507:              specified by the USER command (e.g., on Berkeley UNIX, the
        !           508:              .rhosts mechanism is used).  With the exception of this
        !           509:              differing in authentication, this command is identical to
        !           510:              the PASS command.  
        !           511: 
        !           512:            Possible Responses:
        !           513:                +OK maildrop locked and ready
        !           514:                -ERR permission denied
        !           515:            Examples:
        !           516:                C:    USER mrose
        !           517:                S:    +OK mrose is a real hoopy frood
        !           518:                C:    RPOP mrose
        !           519:                S:    +OK mrose's maildrop has 2 messages (320 octets)
        !           520: 
        !           521:                       POP Command/Reply Summary
        !           522: 
        !           523:     Minimal POP Commands:
        !           524:        USER name               valid in the AUTHORIZATION state
        !           525:        PASS string
        !           526:        QUIT
        !           527: 
        !           528:        STAT                    valid in the TRANSACTION state
        !           529:        LIST [msg]
        !           530:        RETR msg
        !           531:        DELE msg
        !           532:        NOOP
        !           533:        RSET
        !           534: 
        !           535:        QUIT                    valid in the UPDATE state
        !           536: 
        !           537:     Optional POP Commands:
        !           538:        RPOP user               valid in the AUTHORIZATION state
        !           539: 
        !           540:        TOP msg n               valid in the TRANSACTION state
        !           541: 
        !           542:     POP Replies:
        !           543:        +OK
        !           544:        -ERR
        !           545: 
        !           546:     Note that with the exception of the STAT command, the reply given
        !           547:     by the POP server to any command is significant only to "+OK" and
        !           548:     "-ERR".  Any text occurring after this reply may be ignored by the
        !           549:     client.
        !           550: 
        !           551:                          Example POP Session
        !           552: 
        !           553:     S: <wait for connection on TCP port 109>
        !           554:        ...
        !           555:     C: <open connection>
        !           556:     S:    +OK dewey POP server ready (Comments to: PostMaster@UDel)
        !           557:     C:    USER mrose
        !           558:     S:   +OK mrose is a real hoopy frood
        !           559:     C:    PASS secret
        !           560:     S:    +OK mrose's maildrop has 2 messages (320 octets)
        !           561:     C:    STAT
        !           562:     S:   +OK 2 320
        !           563:     C:   LIST
        !           564:     S:    +OK 2 messages (320 octets)
        !           565:     S:    1 120
        !           566:     S:    2 200
        !           567:     S:    .
        !           568:     C:    RETR 1
        !           569:     S:    +OK 120 octets
        !           570:     S:    <the POP server sends message 1>
        !           571:     S:   .
        !           572:     C:    DELE 1
        !           573:     S:    +OK message 1 deleted
        !           574:     C:    RETR 2
        !           575:     S:    +OK 200 octets
        !           576:     S:    <the POP server sends message 2>
        !           577:     S:   .
        !           578:     C:    DELE 2
        !           579:     S:    +OK message 2 deleted
        !           580:     C:    QUIT
        !           581:     S:    +OK dewey POP server signing off (maildrop empty)
        !           582:     C:  <close connection>
        !           583:     S:  <wait for next connection>
        !           584: 
        !           585: 
        !           586: 
        !           587:                            Message Format
        !           588: 
        !           589:     All messages transmitted during a POP session are assumed to
        !           590:     conform to the standard for the format of ARPA Internet text
        !           591:     messages [RFC822].
        !           592: 
        !           593:     It is important to note that the byte count for a message on the
        !           594:     server host may differ from the octet count assigned to that
        !           595:     message due to local conventions for designating end-of-line.
        !           596:     Usually, during the AUTHORIZATION state of the POP session, the POP
        !           597:     client can calculate the size of each message in octets when it
        !           598:     parses the maildrop into messages.  For example, if the POP server
        !           599:     host internally represents end-of-line as a single character, then
        !           600:     the POP server simply counts each occurrence of this character in a
        !           601:     message as two octets.  Note that lines in the message which start
        !           602:     with the termination octet need not be counted twice, since the POP
        !           603:     client will remove all bit-stuffed termination characters when it
        !           604:     receives a multi-line response.
        !           605: 
        !           606: 
        !           607: 
        !           608:                    The POP and the Split-UA model
        !           609: 
        !           610:     The underlying paradigm in which the POP functions is that of a
        !           611:     split-UA model.  The POP client host, being a remote PC based
        !           612:     workstation, acts solely as a client to the message transport
        !           613:     system.  It does not provide delivery/authentication services to
        !           614:     others.  Hence, it is acting as a UA, on behalf of the person using
        !           615:     the workstation.  Furthermore, the workstation uses SMTP to enter
        !           616:     mail into the MTS. 
        !           617: 
        !           618:     In this sense we have two UA functions which interface to the
        !           619:     message transport system: Posting (SMTP) and Retrieval (POP). The
        !           620:     entity which supports this type of environment is called a split-UA
        !           621:     (since the user agent is split between two hosts which must
        !           622:     interoperate to provide these functions).  
        !           623: 
        !           624:              ASIDE: Others might term this a remote-UA instead.  There
        !           625:              are arguments supporting the use of both terms.
        !           626: 
        !           627:     This memo has explicitly referenced TCP as the underlying transport
        !           628:     agent for the POP.  This need not be the case.  In the MZnet
        !           629:     split-UA, for example, personal micro-computer systems are used
        !           630:     which do not have IP-style networking capability.  To connect to
        !           631:     the POP server host, a PC establishes a terminal connection using
        !           632:     some simple protocol (PhoneNet).  A program on the PC drives the
        !           633:     connection, first establishing a login session as a normal user.
        !           634:     The login shell for this pseudo-user is a program which drives the
        !           635:     other half of the terminal protocol and communicates with one of
        !           636:     two servers. Although MZnet can support several PCs, a single
        !           637:     pseudo-user login is present on the server host.  The user-id and
        !           638:     password for this pseudo-user login is known to all members of
        !           639:     MZnet. Hence, the first action of the login shell, after starting
        !           640:     the terminal protocol, is to demand a USER/PASS authorization pair
        !           641:     from the PC.  This second level of authorization is used to
        !           642:     ascertain who is interacting with the MTS. Although the server host
        !           643:     is deemed to support a "trusted" MTS entity, PCs in MZnet are not.
        !           644:     Naturally, the USER/PASS authorization pair for a PC is known only
        !           645:     to the owner of the PC (in theory, at least).
        !           646: 
        !           647:     After successfully verifying the identity of the client, a modified
        !           648:     SMTP server is started, and the PC posts mail with the server host.
        !           649:     After the QUIT command is given to the SMTP server and it
        !           650:     terminates, a modified POP server is started, and the PC retrieves
        !           651:     mail from the server host. After the QUIT command is given to the
        !           652:     POP server and it terminates, the login shell for the pseudo-user
        !           653:     terminates the terminal protocol and logs the job out.  The PC then
        !           654:     closes the terminal connection to the server host.
        !           655: 
        !           656:     The SMTP server used by MZnet is modified in the sense that it
        !           657:     knows that it's talking to a user agent and not a "trusted" entity
        !           658:     in the message transport system.  Hence, it does performs the
        !           659:     validation activities normally performed by an entity in the MTS
        !           660:     when it accepts a message from a UA.
        !           661: 
        !           662:     The POP server used by MZnet is modified in the sense that it does
        !           663:     not require a USER/PASS combination before entering the TRANSACTION
        !           664:     state.  The reason for this (of course) is that the PC has already
        !           665:     identified itself during the second-level authorization step
        !           666:     described above.
        !           667: 
        !           668:              NOTE: Truth in advertising laws require that the author
        !           669:              of this memo state that MZnet has not actually been fully
        !           670:              implemented.  The concepts presented and proven by the
        !           671:              project led to the notion of the MZnet split-slot model.
        !           672:              This notion has inspired the split-UA concept described
        !           673:              in this memo, led to the author's interest in the POP,
        !           674:              and heavily influenced the the description of the POP
        !           675:              herein.
        !           676: 
        !           677:     In fact, some UAs present in the ARPA Internet already support the
        !           678:     notion of posting directly to an SMTP server and retreiving mail
        !           679:     directly from a POP server, even if the POP server and client
        !           680:     resided on the same host!  
        !           681: 
        !           682:              ASIDE: this discussion raises an issue which this memo
        !           683:              purposedly avoids: how does SMTP know that it's talking
        !           684:              to a "trusted" MTS entity?
        !           685: 
        !           686:                              References
        !           687: 
        !           688:     [MZnet]    E.A. Stefferud, J.N. Sweet, T.P. Domae.
        !           689:                "MZnet: Mail Service for Personal Micro-Computer
        !           690:                Systems",  Proceedings, IFIP 6.5 International
        !           691:                Conference on Computer Message Systems, Nottingham, U.K.
        !           692:                (May, 1984)
        !           693: 
        !           694:     [RFC821]   J.B. Postel.
        !           695:                "Simple Mail Transfer Protocol", USC/Information Sciences
        !           696:                Institute. (August, 1982)
        !           697: 
        !           698:     [RFC822]   D.H. Crocker.
        !           699:                "Standard for the Format of ARPA Internet Text
        !           700:                Messages", University of Delaware.  (August, 1982)
        !           701: 
        !           702:     [RFC918]    J.K. Reynolds.
        !           703:                "Post Office Protocol", USC/Information Sciences Institute.
        !           704:                (October, 1984)
        !           705: 
        !           706:     [RFC923]    J.K. Reynolds, J.B. Postel.
        !           707:                "Assigned Numbers", USC/Information Sciences Institute.
        !           708:                (October, 1984)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.