|
|
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)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.