|
|
1.1 root 1: .\"
2: .\" Copyright (c) 1983 Eric P. Allman
3: .\" Copyright (c) 1988 The Regents of the University of California.
4: .\" All rights reserved.
5: .\"
6: .\" Redistribution and use in source and binary forms are permitted
7: .\" provided that the above copyright notice and this paragraph are
8: .\" duplicated in all such forms and that any documentation,
9: .\" advertising materials, and other materials related to such
10: .\" distribution and use acknowledge that the software was developed
11: .\" by the University of California, Berkeley. The name of the
12: .\" University may not be used to endorse or promote products derived
13: .\" from this software without specific prior written permission.
14: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
15: .\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
16: .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17: .\"
18: .\" @(#)intro.me 6.4 (Berkeley) 4/23/90
19: .\"
20: .\" pic -Pxx intro.me | ditroff -me -Pxx
21: .eh 'SMM:16-%''SENDMAIL \*- An Internetwork Mail Router'
22: .oh 'SENDMAIL \*- An Internetwork Mail Router''SMM:16-%'
23: .nr si 3n
24: .if n .ls 2
25: .+c
26: .(l C
27: .sz 14
28: SENDMAIL \*- An Internetwork Mail Router
29: .sz
30: .sp
31: Eric Allman\(dg
32: .sp 0.5
33: .i
34: University of California, Berkeley
35: Mammoth Project
36: .)l
37: .sp
38: .(l F
39: .ce
40: ABSTRACT
41: .sp \n(psu
42: Routing mail through a heterogenous internet presents many new
43: problems. Among the worst of these is that of address mapping.
44: Historically, this has been handled on an
45: .i "ad hoc"
46: basis. However,
47: this approach has become unmanageable as internets grow.
48: .sp \n(psu
49: Sendmail acts a unified "post office" to which all mail can be
50: submitted. Address interpretation is controlled by a production
51: system, which can parse both domain-based addressing and old-style
52: .i "ad hoc"
53: addresses.
54: The production system is powerful
55: enough to rewrite addresses in the message header to conform to the
56: standards of a number of common target networks, including old
57: (NCP/RFC733) Arpanet, new (TCP/RFC822) Arpanet, UUCP, and Phonenet.
58: Sendmail also implements an SMTP server, message
59: queueing, and aliasing.
60: .)l
61: .sp 2
62: .(f
63: \(dgA considerable part of this work
64: was done while under the employ
65: of the INGRES Project
66: at the University of California at Berkeley
67: and at Britton Lee.
68: .)f
69: .pp
70: .i Sendmail
71: implements a general internetwork mail routing facility,
72: featuring aliasing and forwarding,
73: automatic routing to network gateways,
74: and flexible configuration.
75: .pp
76: In a simple network,
77: each node has an address,
78: and resources can be identified
79: with a host-resource pair;
80: in particular,
81: the mail system can refer to users
82: using a host-username pair.
83: Host names and numbers have to be administered by a central authority,
84: but usernames can be assigned locally to each host.
85: .pp
86: In an internet,
87: multiple networks with different characterstics
88: and managements
89: must communicate.
90: In particular,
91: the syntax and semantics of resource identification change.
92: Certain special cases can be handled trivially
93: by
94: .i "ad hoc"
95: techniques,
96: such as
97: providing network names that appear local to hosts
98: on other networks,
99: as with the Ethernet at Xerox PARC.
100: However, the general case is extremely complex.
101: For example,
102: some networks require point-to-point routing,
103: which simplifies the database update problem
104: since only adjacent hosts must be entered
105: into the system tables,
106: while others use end-to-end addressing.
107: Some networks use a left-associative syntax
108: and others use a right-associative syntax,
109: causing ambiguity in mixed addresses.
110: .pp
111: Internet standards seek to eliminate these problems.
112: Initially, these proposed expanding the address pairs
113: to address triples,
114: consisting of
115: {network, host, resource}
116: triples.
117: Network numbers must be universally agreed upon,
118: and hosts can be assigned locally
119: on each network.
120: The user-level presentation was quickly expanded
121: to address domains,
122: comprised of a local resource identification
123: and a hierarchical domain specification
124: with a common static root.
125: The domain technique
126: separates the issue of physical versus logical addressing.
127: For example,
128: an address of the form
129: .q "[email protected]"
130: describes only the logical
131: organization of the address space.
132: .pp
133: .i Sendmail
134: is intended to help bridge the gap
135: between the totally
136: .i "ad hoc"
137: world
138: of networks that know nothing of each other
139: and the clean, tightly-coupled world
140: of unique network numbers.
141: It can accept old arbitrary address syntaxes,
142: resolving ambiguities using heuristics
143: specified by the system administrator,
144: as well as domain-based addressing.
145: It helps guide the conversion of message formats
146: between disparate networks.
147: In short,
148: .i sendmail
149: is designed to assist a graceful transition
150: to consistent internetwork addressing schemes.
151: .sp
152: .pp
153: Section 1 discusses the design goals for
154: .i sendmail .
155: Section 2 gives an overview of the basic functions of the system.
156: In section 3,
157: details of usage are discussed.
158: Section 4 compares
159: .i sendmail
160: to other internet mail routers,
161: and an evaluation of
162: .i sendmail
163: is given in section 5,
164: including future plans.
165: .sh 1 "DESIGN GOALS"
166: .pp
167: Design goals for
168: .i sendmail
169: include:
170: .np
171: Compatibility with the existing mail programs,
172: including Bell version 6 mail,
173: Bell version 7 mail
174: [UNIX83],
175: Berkeley
176: .i Mail
177: [Shoens79],
178: BerkNet mail
179: [Schmidt79],
180: and hopefully UUCP mail
181: [Nowitz78a, Nowitz78b].
182: ARPANET mail
183: [Crocker77a, Postel77]
184: was also required.
185: .np
186: Reliability, in the sense of guaranteeing
187: that every message is correctly delivered
188: or at least brought to the attention of a human
189: for correct disposal;
190: no message should ever be completely lost.
191: This goal was considered essential
192: because of the emphasis on mail in our environment.
193: It has turned out to be one of the hardest goals to satisfy,
194: especially in the face of the many anomalous message formats
195: produced by various ARPANET sites.
196: For example,
197: certain sites generate improperly formated addresses,
198: occasionally
199: causing error-message loops.
200: Some hosts use blanks in names,
201: causing problems with
202: UNIX mail programs that assume that an address
203: is one word.
204: The semantics of some fields
205: are interpreted slightly differently
206: by different sites.
207: In summary,
208: the obscure features of the ARPANET mail protocol
209: really
210: .i are
211: used and
212: are difficult to support,
213: but must be supported.
214: .np
215: Existing software to do actual delivery
216: should be used whenever possible.
217: This goal derives as much from political and practical considerations
218: as technical.
219: .np
220: Easy expansion to
221: fairly complex environments,
222: including multiple
223: connections to a single network type
224: (such as with multiple UUCP or Ether nets
225: [Metcalfe76]).
226: This goal requires consideration of the contents of an address
227: as well as its syntax
228: in order to determine which gateway to use.
229: For example,
230: the ARPANET is bringing up the
231: TCP protocol to replace the old NCP protocol.
232: No host at Berkeley runs both TCP and NCP,
233: so it is necessary to look at the ARPANET host name
234: to determine whether to route mail to an NCP gateway
235: or a TCP gateway.
236: .np
237: Configuration should not be compiled into the code.
238: A single compiled program should be able to run as is at any site
239: (barring such basic changes as the CPU type or the operating system).
240: We have found this seemingly unimportant goal
241: to be critical in real life.
242: Besides the simple problems that occur when any program gets recompiled
243: in a different environment,
244: many sites like to
245: .q fiddle
246: with anything that they will be recompiling anyway.
247: .np
248: .i Sendmail
249: must be able to let various groups maintain their own mailing lists,
250: and let individuals specify their own forwarding,
251: without modifying the system alias file.
252: .np
253: Each user should be able to specify which mailer to execute
254: to process mail being delivered for him.
255: This feature allows users who are using specialized mailers
256: that use a different format to build their environment
257: without changing the system,
258: and facilitates specialized functions
259: (such as returning an
260: .q "I am on vacation"
261: message).
262: .np
263: Network traffic should be minimized
264: by batching addresses to a single host where possible,
265: without assistance from the user.
266: .pp
267: These goals motivated the architecture illustrated in figure 1.
268: .(z
269: .hl
270: .ie t \
271: \{\
272: .ie !"\*(.T"" \
273: \{\
274: .PS
275: boxht = 0.5i
276: boxwid = 1.0i
277:
278: down
279: S: [
280: right
281: S1: box "sender1"
282: move
283: box "sender2"
284: move
285: S3: box "sender3"
286: ]
287: arrow
288: SM: box "sendmail" wid 2i ht boxht
289: arrow
290: M: [
291: right
292: M1: box "mailer1"
293: move
294: box "mailer2"
295: move
296: M3: box "mailer3"
297: ]
298:
299: arrow from S.S1.s to 1/2 between SM.nw and SM.n
300: arrow from S.S3.s to 1/2 between SM.n and SM.ne
301:
302: arrow from 1/2 between SM.sw and SM.s to M.M1.n
303: arrow from 1/2 between SM.s and SM.se to M.M3.n
304: .PE
305: .\}
306: .el \
307: . sp 18
308: .\}
309: .el \{\
310: .(c
311: +---------+ +---------+ +---------+
312: | sender1 | | sender2 | | sender3 |
313: +---------+ +---------+ +---------+
314: | | |
315: +----------+ + +----------+
316: | | |
317: v v v
318: +-------------+
319: | sendmail |
320: +-------------+
321: | | |
322: +----------+ + +----------+
323: | | |
324: v v v
325: +---------+ +---------+ +---------+
326: | mailer1 | | mailer2 | | mailer3 |
327: +---------+ +---------+ +---------+
328: .)c
329: .\}
330:
331: .ce
332: Figure 1 \*- Sendmail System Structure.
333: .hl
334: .)z
335: The user interacts with a mail generating and sending program.
336: When the mail is created,
337: the generator calls
338: .i sendmail ,
339: which routes the message to the correct mailer(s).
340: Since some of the senders may be network servers
341: and some of the mailers may be network clients,
342: .i sendmail
343: may be used as an internet mail gateway.
344: .sh 1 "OVERVIEW"
345: .sh 2 "System Organization"
346: .pp
347: .i Sendmail
348: neither interfaces with the user
349: nor does actual mail delivery.
350: Rather,
351: it collects a message
352: generated by a user interface program (UIP)
353: such as Berkeley
354: .i Mail ,
355: MS
356: [Crocker77b],
357: or MH
358: [Borden79],
359: edits the message as required by the destination network,
360: and calls appropriate mailers
361: to do mail delivery or queueing for network transmission\**.
362: .(f
363: \**except when mailing to a file,
364: when
365: .i sendmail
366: does the delivery directly.
367: .)f
368: This discipline allows the insertion of new mailers
369: at minimum cost.
370: In this sense
371: .i sendmail
372: resembles the Message Processing Module (MPM)
373: of [Postel79b].
374: .sh 2 "Interfaces to the Outside World"
375: .pp
376: There are three ways
377: .i sendmail
378: can communicate with the outside world,
379: both in receiving and in sending mail.
380: These are using the conventional UNIX
381: argument vector/return status,
382: speaking SMTP over a pair of UNIX pipes,
383: and speaking SMTP over an interprocess(or) channel.
384: .sh 3 "Argument vector/exit status"
385: .pp
386: This technique is the standard UNIX method
387: for communicating with the process.
388: A list of recipients is sent in the argument vector,
389: and the message body is sent on the standard input.
390: Anything that the mailer prints
391: is simply collected and sent back to the sender
392: if there were any problems.
393: The exit status from the mailer is collected
394: after the message is sent,
395: and a diagnostic is printed if appropriate.
396: .sh 3 "SMTP over pipes"
397: .pp
398: The SMTP protocol
399: [Postel82]
400: can be used to run an interactive lock-step interface
401: with the mailer.
402: A subprocess is still created,
403: but no recipient addresses are passed to the mailer
404: via the argument list.
405: Instead, they are passed one at a time
406: in commands sent to the processes standard input.
407: Anything appearing on the standard output
408: must be a reply code
409: in a special format.
410: .sh 3 "SMTP over an IPC connection"
411: .pp
412: This technique is similar to the previous technique,
413: except that it uses a 4.2bsd IPC channel
414: [UNIX83].
415: This method is exceptionally flexible
416: in that the mailer need not reside
417: on the same machine.
418: It is normally used to connect to a sendmail process
419: on another machine.
420: .sh 2 "Operational Description"
421: .pp
422: When a sender wants to send a message,
423: it issues a request to
424: .i sendmail
425: using one of the three methods described above.
426: .i Sendmail
427: operates in two distinct phases.
428: In the first phase,
429: it collects and stores the message.
430: In the second phase,
431: message delivery occurs.
432: If there were errors during processing
433: during the second phase,
434: .i sendmail
435: creates and returns a new message describing the error
436: and/or returns an status code
437: telling what went wrong.
438: .sh 3 "Argument processing and address parsing"
439: .pp
440: If
441: .i sendmail
442: is called using one of the two subprocess techniques,
443: the arguments
444: are first scanned
445: and option specifications are processed.
446: Recipient addresses are then collected,
447: either from the command line
448: or from the SMTP
449: RCPT command,
450: and a list of recipients is created.
451: Aliases are expanded at this step,
452: including mailing lists.
453: As much validation as possible of the addresses
454: is done at this step:
455: syntax is checked, and local addresses are verified,
456: but detailed checking of host names and addresses
457: is deferred until delivery.
458: Forwarding is also performed
459: as the local addresses are verified.
460: .pp
461: .i Sendmail
462: appends each address
463: to the recipient list after parsing.
464: When a name is aliased or forwarded,
465: the old name is retained in the list,
466: and a flag is set that tells the delivery phase
467: to ignore this recipient.
468: This list is kept free from duplicates,
469: preventing alias loops
470: and duplicate messages deliverd to the same recipient,
471: as might occur if a person is in two groups.
472: .sh 3 "Message collection"
473: .pp
474: .i Sendmail
475: then collects the message.
476: The message should have a header at the beginning.
477: No formatting requirements are imposed on the message
478: except that they must be lines of text
479: (i.e., binary data is not allowed).
480: The header is parsed and stored in memory,
481: and the body of the message is saved
482: in a temporary file.
483: .pp
484: To simplify the program interface,
485: the message is collected even if no addresses were valid.
486: The message will be returned with an error.
487: .sh 3 "Message delivery"
488: .pp
489: For each unique mailer and host in the recipient list,
490: .i sendmail
491: calls the appropriate mailer.
492: Each mailer invocation sends to all users receiving the message on one host.
493: Mailers that only accept one recipient at a time
494: are handled properly.
495: .pp
496: The message is sent to the mailer
497: using one of the same three interfaces
498: used to submit a message to sendmail.
499: Each copy of the message is
500: prepended by a customized header.
501: The mailer status code is caught and checked,
502: and a suitable error message given as appropriate.
503: The exit code must conform to a system standard
504: or a generic message
505: (\c
506: .q "Service unavailable" )
507: is given.
508: .sh 3 "Queueing for retransmission"
509: .pp
510: If the mailer returned an status that
511: indicated that it might be able to handle the mail later,
512: .i sendmail
513: will queue the mail and try again later.
514: .sh 3 "Return to sender"
515: .pp
516: If errors occur during processing,
517: .i sendmail
518: returns the message to the sender for retransmission.
519: The letter can be mailed back
520: or written in the file
521: .q dead.letter
522: in the sender's home directory\**.
523: .(f
524: \**Obviously, if the site giving the error is not the originating
525: site, the only reasonable option is to mail back to the sender.
526: Also, there are many more error disposition options,
527: but they only effect the error message \*- the
528: .q "return to sender"
529: function is always handled in one of these two ways.
530: .)f
531: .sh 2 "Message Header Editing"
532: .pp
533: Certain editing of the message header
534: occurs automatically.
535: Header lines can be inserted
536: under control of the configuration file.
537: Some lines can be merged;
538: for example,
539: a
540: .q From:
541: line and a
542: .q Full-name:
543: line can be merged under certain circumstances.
544: .sh 2 "Configuration File"
545: .pp
546: Almost all configuration information is read at runtime
547: from an ASCII file,
548: encoding
549: macro definitions
550: (defining the value of macros used internally),
551: header declarations
552: (telling sendmail the format of header lines that it will process specially,
553: i.e., lines that it will add or reformat),
554: mailer definitions
555: (giving information such as the location and characteristics
556: of each mailer),
557: and address rewriting rules
558: (a limited production system to rewrite addresses
559: which is used to parse and rewrite the addresses).
560: .pp
561: To improve performance when reading the configuration file,
562: a memory image can be provided.
563: This provides a
564: .q compiled
565: form of the configuration file.
566: .sh 1 "USAGE AND IMPLEMENTATION"
567: .sh 2 "Arguments"
568: .pp
569: Arguments may be flags and addresses.
570: Flags set various processing options.
571: Following flag arguments,
572: address arguments may be given,
573: unless we are running in SMTP mode.
574: Addresses follow the syntax in RFC822
575: [Crocker82]
576: for ARPANET
577: address formats.
578: In brief, the format is:
579: .np
580: Anything in parentheses is thrown away
581: (as a comment).
582: .np
583: Anything in angle brackets (\c
584: .q "<\|>" )
585: is preferred
586: over anything else.
587: This rule implements the ARPANET standard that addresses of the form
588: .(b
589: user name <machine-address>
590: .)b
591: will send to the electronic
592: .q machine-address
593: rather than the human
594: .q "user name."
595: .np
596: Double quotes
597: (\ "\ )
598: quote phrases;
599: backslashes quote characters.
600: Backslashes are more powerful
601: in that they will cause otherwise equivalent phrases
602: to compare differently \*- for example,
603: .i user
604: and
605: .i
606: "user"
607: .r
608: are equivalent,
609: but
610: .i \euser
611: is different from either of them.
612: .pp
613: Parentheses, angle brackets, and double quotes
614: must be properly balanced and nested.
615: The rewriting rules control remaining parsing\**.
616: .(f
617: \**Disclaimer: Some special processing is done
618: after rewriting local names; see below.
619: .)f
620: .sh 2 "Mail to Files and Programs"
621: .pp
622: Files and programs are legitimate message recipients.
623: Files provide archival storage of messages,
624: useful for project administration and history.
625: Programs are useful as recipients in a variety of situations,
626: for example,
627: to maintain a public repository of systems messages
628: (such as the Berkeley
629: .i msgs
630: program,
631: or the MARS system
632: [Sattley78]).
633: .pp
634: Any address passing through the initial parsing algorithm
635: as a local address
636: (i.e, not appearing to be a valid address for another mailer)
637: is scanned for two special cases.
638: If prefixed by a vertical bar (\c
639: .q \^|\^ )
640: the rest of the address is processed as a shell command.
641: If the user name begins with a slash mark (\c
642: .q /\^ )
643: the name is used as a file name,
644: instead of a login name.
645: .pp
646: Files that have setuid or setgid bits set
647: but no execute bits set
648: have those bits honored if
649: .i sendmail
650: is running as root.
651: .sh 2 "Aliasing, Forwarding, Inclusion"
652: .pp
653: .i Sendmail
654: reroutes mail three ways.
655: Aliasing applies system wide.
656: Forwarding allows each user to reroute incoming mail
657: destined for that account.
658: Inclusion directs
659: .i sendmail
660: to read a file for a list of addresses,
661: and is normally used
662: in conjunction with aliasing.
663: .sh 3 "Aliasing"
664: .pp
665: Aliasing maps names to address lists using a system-wide file.
666: This file is indexed to speed access.
667: Only names that parse as local
668: are allowed as aliases;
669: this guarantees a unique key
670: (since there are no nicknames for the local host).
671: .sh 3 "Forwarding"
672: .pp
673: After aliasing,
674: recipients that are local and valid
675: are checked for the existence of a
676: .q .forward
677: file in their home directory.
678: If it exists,
679: the message is
680: .i not
681: sent to that user,
682: but rather to the list of users in that file.
683: Often
684: this list will contain only one address,
685: and the feature will be used for network mail forwarding.
686: .pp
687: Forwarding also permits a user to specify a private incoming mailer.
688: For example,
689: forwarding to:
690: .(b
691: "\^|\|/usr/local/newmail myname"
692: .)b
693: will use a different incoming mailer.
694: .sh 3 "Inclusion"
695: .pp
696: Inclusion is specified in RFC 733 [Crocker77a] syntax:
697: .(b
698: :Include: pathname
699: .)b
700: An address of this form reads the file specified by
701: .i pathname
702: and sends to all users listed in that file.
703: .pp
704: The intent is
705: .i not
706: to support direct use of this feature,
707: but rather to use this as a subset of aliasing.
708: For example,
709: an alias of the form:
710: .(b
711: project: :include:/usr/project/userlist
712: .)b
713: is a method of letting a project maintain a mailing list
714: without interaction with the system administration,
715: even if the alias file is protected.
716: .pp
717: It is not necessary to rebuild the index on the alias database
718: when a :include: list is changed.
719: .sh 2 "Message Collection"
720: .pp
721: Once all recipient addresses are parsed and verified,
722: the message is collected.
723: The message comes in two parts:
724: a message header and a message body,
725: separated by a blank line.
726: .pp
727: The header is formatted as a series of lines
728: of the form
729: .(b
730: field-name: field-value
731: .)b
732: Field-value can be split across lines by starting the following
733: lines with a space or a tab.
734: Some header fields have special internal meaning,
735: and have appropriate special processing.
736: Other headers are simply passed through.
737: Some header fields may be added automatically,
738: such as time stamps.
739: .pp
740: The body is a series of text lines.
741: It is completely uninterpreted and untouched,
742: except that lines beginning with a dot
743: have the dot doubled
744: when transmitted over an SMTP channel.
745: This extra dot is stripped by the receiver.
746: .sh 2 "Message Delivery"
747: .pp
748: The send queue is ordered by receiving host
749: before transmission
750: to implement message batching.
751: Each address is marked as it is sent
752: so rescanning the list is safe.
753: An argument list is built as the scan proceeds.
754: Mail to files is detected during the scan of the send list.
755: The interface to the mailer
756: is performed using one of the techniques
757: described in section 2.2.
758: .pp
759: After a connection is established,
760: .i sendmail
761: makes the per-mailer changes to the header
762: and sends the result to the mailer.
763: If any mail is rejected by the mailer,
764: a flag is set to invoke the return-to-sender function
765: after all delivery completes.
766: .sh 2 "Queued Messages"
767: .pp
768: If the mailer returns a
769: .q "temporary failure"
770: exit status,
771: the message is queued.
772: A control file is used to describe the recipients to be sent to
773: and various other parameters.
774: This control file is formatted as a series of lines,
775: each describing a sender,
776: a recipient,
777: the time of submission,
778: or some other salient parameter of the message.
779: The header of the message is stored
780: in the control file,
781: so that the associated data file in the queue
782: is just the temporary file that was originally collected.
783: .sh 2 "Configuration"
784: .pp
785: Configuration is controlled primarily by a configuration file
786: read at startup.
787: .i Sendmail
788: should not need to be recomplied except
789: .np
790: To change operating systems
791: (V6, V7/32V, 4BSD).
792: .np
793: To remove or insert the DBM
794: (UNIX database)
795: library.
796: .np
797: To change ARPANET reply codes.
798: .np
799: To add headers fields requiring special processing.
800: .lp
801: Adding mailers or changing parsing
802: (i.e., rewriting)
803: or routing information
804: does not require recompilation.
805: .pp
806: If the mail is being sent by a local user,
807: and the file
808: .q .mailcf
809: exists in the sender's home directory,
810: that file is read as a configuration file
811: after the system configuration file.
812: The primary use of this feature is to add header lines.
813: .pp
814: The configuration file encodes macro definitions,
815: header definitions,
816: mailer definitions,
817: rewriting rules,
818: and options.
819: .sh 3 Macros
820: .pp
821: Macros can be used in three ways.
822: Certain macros transmit
823: unstructured textual information
824: into the mail system,
825: such as the name
826: .i sendmail
827: will use to identify itself in error messages.
828: Other macros transmit information from
829: .i sendmail
830: to the configuration file
831: for use in creating other fields
832: (such as argument vectors to mailers);
833: e.g., the name of the sender,
834: and the host and user
835: of the recipient.
836: Other macros are unused internally,
837: and can be used as shorthand in the configuration file.
838: .sh 3 "Header declarations"
839: .pp
840: Header declarations inform
841: .i sendmail
842: of the format of known header lines.
843: Knowledge of a few header lines
844: is built into
845: .i sendmail ,
846: such as the
847: .q From:
848: and
849: .q Date:
850: lines.
851: .pp
852: Most configured headers
853: will be automatically inserted
854: in the outgoing message
855: if they don't exist in the incoming message.
856: Certain headers are suppressed by some mailers.
857: .sh 3 "Mailer declarations"
858: .pp
859: Mailer declarations tell
860: .i sendmail
861: of the various mailers available to it.
862: The definition specifies the internal name of the mailer,
863: the pathname of the program to call,
864: some flags associated with the mailer,
865: and an argument vector to be used on the call;
866: this vector is macro-expanded before use.
867: .sh 3 "Address rewriting rules"
868: .pp
869: The heart of address parsing in
870: .i sendmail
871: is a set of rewriting rules.
872: These are an ordered list of pattern-replacement rules,
873: (somewhat like a production system,
874: except that order is critical),
875: which are applied to each address.
876: The address is rewritten textually until it is either rewritten
877: into a special canonical form
878: (i.e.,
879: a (mailer, host, user)
880: 3-tuple,
881: such as {arpanet, usc-isif, postel}
882: representing the address
883: .q "postel@usc-isif" ),
884: or it falls off the end.
885: When a pattern matches,
886: the rule is reapplied until it fails.
887: .pp
888: The configuration file also supports the editing of addresses
889: into different formats.
890: For example,
891: an address of the form:
892: .(b
893: ucsfcgl!tef
894: .)b
895: might be mapped into:
896: .(b
897: [email protected]
898: .)b
899: to conform to the domain syntax.
900: Translations can also be done in the other direction.
901: .sh 3 "Option setting"
902: .pp
903: There are several options that can be set
904: from the configuration file.
905: These include the pathnames of various support files,
906: timeouts,
907: default modes,
908: etc.
909: .sh 1 "COMPARISON WITH OTHER MAILERS"
910: .sh 2 "Delivermail"
911: .pp
912: .i Sendmail
913: is an outgrowth of
914: .i delivermail .
915: The primary differences are:
916: .np
917: Configuration information is not compiled in.
918: This change simplifies many of the problems
919: of moving to other machines.
920: It also allows easy debugging of new mailers.
921: .np
922: Address parsing is more flexible.
923: For example,
924: .i delivermail
925: only supported one gateway to any network,
926: whereas
927: .i sendmail
928: can be sensitive to host names
929: and reroute to different gateways.
930: .np
931: Forwarding and
932: :include:
933: features eliminate the requirement that the system alias file
934: be writable by any user
935: (or that an update program be written,
936: or that the system administration make all changes).
937: .np
938: .i Sendmail
939: supports message batching across networks
940: when a message is being sent to multiple recipients.
941: .np
942: A mail queue is provided in
943: .i sendmail.
944: Mail that cannot be delivered immediately
945: but can potentially be delivered later
946: is stored in this queue for a later retry.
947: The queue also provides a buffer against system crashes;
948: after the message has been collected
949: it may be reliably redelivered
950: even if the system crashes during the initial delivery.
951: .np
952: .i Sendmail
953: uses the networking support provided by 4.2BSD
954: to provide a direct interface networks such as the ARPANET
955: and/or Ethernet
956: using SMTP (the Simple Mail Transfer Protocol)
957: over a TCP/IP connection.
958: .sh 2 "MMDF"
959: .pp
960: MMDF
961: [Crocker79]
962: spans a wider problem set than
963: .i sendmail .
964: For example,
965: the domain of
966: MMDF includes a
967: .q "phone network"
968: mailer, whereas
969: .i sendmail
970: calls on preexisting mailers in most cases.
971: .pp
972: MMDF and
973: .i sendmail
974: both support aliasing,
975: customized mailers,
976: message batching,
977: automatic forwarding to gateways,
978: queueing,
979: and retransmission.
980: MMDF supports two-stage timeout,
981: which
982: .i sendmail
983: does not support.
984: .pp
985: The configuration for MMDF
986: is compiled into the code\**.
987: .(f
988: \**Dynamic configuration tables are currently being considered
989: for MMDF;
990: allowing the installer to select either compiled
991: or dynamic tables.
992: .)f
993: .pp
994: Since MMDF does not consider backwards compatibility
995: as a design goal,
996: the address parsing is simpler but much less flexible.
997: .pp
998: It is somewhat harder to integrate a new channel\**
999: .(f
1000: \**The MMDF equivalent of a
1001: .i sendmail
1002: .q mailer.
1003: .)f
1004: into MMDF.
1005: In particular,
1006: MMDF must know the location and format
1007: of host tables for all channels,
1008: and the channel must speak a special protocol.
1009: This allows MMDF to do additional verification
1010: (such as verifying host names)
1011: at submission time.
1012: .pp
1013: MMDF strictly separates the submission and delivery phases.
1014: Although
1015: .i sendmail
1016: has the concept of each of these stages,
1017: they are integrated into one program,
1018: whereas in MMDF they are split into two programs.
1019: .sh 2 "Message Processing Module"
1020: .pp
1021: The Message Processing Module (MPM)
1022: discussed by Postel [Postel79b]
1023: matches
1024: .i sendmail
1025: closely in terms of its basic architecture.
1026: However,
1027: like MMDF,
1028: the MPM includes the network interface software
1029: as part of its domain.
1030: .pp
1031: MPM also postulates a duplex channel to the receiver,
1032: as does MMDF,
1033: thus allowing simpler handling of errors
1034: by the mailer
1035: than is possible in
1036: .i sendmail .
1037: When a message queued by
1038: .i sendmail
1039: is sent,
1040: any errors must be returned to the sender
1041: by the mailer itself.
1042: Both MPM and MMDF mailers
1043: can return an immediate error response,
1044: and a single error processor can create an appropriate response.
1045: .pp
1046: MPM prefers passing the message as a structured object,
1047: with type-length-value tuples\**.
1048: .(f
1049: \**This is similar to the NBS standard.
1050: .)f
1051: Such a convention requires a much higher degree of cooperation
1052: between mailers than is required by
1053: .i sendmail .
1054: MPM also assumes a universally agreed upon internet name space
1055: (with each address in the form of a net-host-user tuple),
1056: which
1057: .i sendmail
1058: does not.
1059: .sh 1 "EVALUATIONS AND FUTURE PLANS"
1060: .pp
1061: .i Sendmail
1062: is designed to work in a nonhomogeneous environment.
1063: Every attempt is made to avoid imposing unnecessary constraints
1064: on the underlying mailers.
1065: This goal has driven much of the design.
1066: One of the major problems
1067: has been the lack of a uniform address space,
1068: as postulated in [Postel79a]
1069: and [Postel79b].
1070: .pp
1071: A nonuniform address space implies that a path will be specified
1072: in all addresses,
1073: either explicitly (as part of the address)
1074: or implicitly
1075: (as with implied forwarding to gateways).
1076: This restriction has the unpleasant effect of making replying to messages
1077: exceedingly difficult,
1078: since there is no one
1079: .q address
1080: for any person,
1081: but only a way to get there from wherever you are.
1082: .pp
1083: Interfacing to mail programs
1084: that were not initially intended to be applied
1085: in an internet environment
1086: has been amazingly successful,
1087: and has reduced the job to a manageable task.
1088: .pp
1089: .i Sendmail
1090: has knowledge of a few difficult environments
1091: built in.
1092: It generates ARPANET FTP/SMTP compatible error messages
1093: (prepended with three-digit numbers
1094: [Neigus73, Postel74, Postel82])
1095: as necessary,
1096: optionally generates UNIX-style
1097: .q From
1098: lines on the front of messages for some mailers,
1099: and knows how to parse the same lines on input.
1100: Also,
1101: error handling has an option customized for BerkNet.
1102: .pp
1103: The decision to avoid doing any type of delivery where possible
1104: (even, or perhaps especially, local delivery)
1105: has turned out to be a good idea.
1106: Even with local delivery,
1107: there are issues of the location of the mailbox,
1108: the format of the mailbox,
1109: the locking protocol used,
1110: etc.,
1111: that are best decided by other programs.
1112: One surprisingly major annoyance in many internet mailers
1113: is that the location and format of local mail is built in.
1114: The feeling seems to be that local mail is so common
1115: that it should be efficient.
1116: This feeling is not born out by
1117: our experience;
1118: on the contrary,
1119: the location and format of mailboxes seems to vary widely
1120: from system to system.
1121: .pp
1122: The ability to automatically generate a response to incoming mail
1123: (by forwarding mail to a program)
1124: seems useful
1125: (\c
1126: .q "I am on vacation until late August...." )
1127: but can create problems
1128: such as forwarding loops
1129: (two people on vacation whose programs send notes back and forth,
1130: for instance)
1131: if these programs are not well written.
1132: A program could be written to do standard tasks correctly,
1133: but this would solve the general case.
1134: .pp
1135: It might be desirable to implement some form of load limiting.
1136: I am unaware of any mail system that addresses this problem,
1137: nor am I aware of any reasonable solution at this time.
1138: .pp
1139: The configuration file is currently practically inscrutable;
1140: considerable convenience could be realized
1141: with a higher-level format.
1142: .pp
1143: It seems clear that common protocols will be changing soon
1144: to accommodate changing requirements and environments.
1145: These changes will include modifications to the message header
1146: (e.g., [NBS80])
1147: or to the body of the message itself
1148: (such as for multimedia messages
1149: [Postel80]).
1150: Experience indicates that
1151: these changes should be relatively trivial to integrate
1152: into the existing system.
1153: .pp
1154: In tightly coupled environments,
1155: it would be nice to have a name server
1156: such as Grapvine
1157: [Birrell82]
1158: integrated into the mail system.
1159: This would allow a site such as
1160: .q Berkeley
1161: to appear as a single host,
1162: rather than as a collection of hosts,
1163: and would allow people to move transparently among machines
1164: without having to change their addresses.
1165: Such a facility
1166: would require an automatically updated database
1167: and some method of resolving conflicts.
1168: Ideally this would be effective even without
1169: all hosts being under
1170: a single management.
1171: However,
1172: it is not clear whether this feature
1173: should be integrated into the
1174: aliasing facility
1175: or should be considered a
1176: .q "value added"
1177: feature outside
1178: .i sendmail
1179: itself.
1180: .pp
1181: As a more interesting case,
1182: the CSNET name server
1183: [Solomon81]
1184: provides an facility that goes beyond a single
1185: tightly-coupled environment.
1186: Such a facility would normally exist outside of
1187: .i sendmail
1188: however.
1189: .sh 0 "ACKNOWLEDGEMENTS"
1190: .pp
1191: Thanks are due to Kurt Shoens for his continual cheerful
1192: assistance and good advice,
1193: Bill Joy for pointing me in the correct direction
1194: (over and over),
1195: and Mark Horton for more advice,
1196: prodding,
1197: and many of the good ideas.
1198: Kurt and Eric Schmidt are to be credited
1199: for using
1200: .i delivermail
1201: as a server for their programs
1202: (\c
1203: .i Mail
1204: and BerkNet respectively)
1205: before any sane person should have,
1206: and making the necessary modifications
1207: promptly and happily.
1208: Eric gave me considerable advice about the perils
1209: of network software which saved me an unknown
1210: amount of work and grief.
1211: Mark did the original implementation of the DBM version
1212: of aliasing, installed the VFORK code,
1213: wrote the current version of
1214: .i rmail ,
1215: and was the person who really convinced me
1216: to put the work into
1217: .i delivermail
1218: to turn it into
1219: .i sendmail .
1220: Kurt deserves accolades for using
1221: .i sendmail
1222: when I was myself afraid to take the risk;
1223: how a person can continue to be so enthusiastic
1224: in the face of so much bitter reality is beyond me.
1225: .pp
1226: Kurt,
1227: Mark,
1228: Kirk McKusick,
1229: Marvin Solomon,
1230: and many others have reviewed this paper,
1231: giving considerable useful advice.
1232: .pp
1233: Special thanks are reserved for Mike Stonebraker at Berkeley
1234: and Bob Epstein at Britton-Lee,
1235: who both knowingly allowed me to put so much work into this
1236: project
1237: when there were so many other things I really should
1238: have been working on.
1239: .+c
1240: .ce
1241: REFERENCES
1242: .nr ii 1.5i
1243: .ip [Birrell82]
1244: Birrell, A. D.,
1245: Levin, R.,
1246: Needham, R. M.,
1247: and
1248: Schroeder, M. D.,
1249: .q "Grapevine: An Exercise in Distributed Computing."
1250: In
1251: .ul
1252: Comm. A.C.M. 25,
1253: 4,
1254: April 82.
1255: .ip [Borden79]
1256: Borden, S.,
1257: Gaines, R. S.,
1258: and
1259: Shapiro, N. Z.,
1260: .ul
1261: The MH Message Handling System: Users' Manual.
1262: R-2367-PAF.
1263: Rand Corporation.
1264: October 1979.
1265: .ip [Crocker77a]
1266: Crocker, D. H.,
1267: Vittal, J. J.,
1268: Pogran, K. T.,
1269: and
1270: Henderson, D. A. Jr.,
1271: .ul
1272: Standard for the Format of ARPA Network Text Messages.
1273: RFC 733,
1274: NIC 41952.
1275: In [Feinler78].
1276: November 1977.
1277: .ip [Crocker77b]
1278: Crocker, D. H.,
1279: .ul
1280: Framework and Functions of the MS Personal Message System.
1281: R-2134-ARPA,
1282: Rand Corporation,
1283: Santa Monica, California.
1284: 1977.
1285: .ip [Crocker79]
1286: Crocker, D. H.,
1287: Szurkowski, E. S.,
1288: and
1289: Farber, D. J.,
1290: .ul
1291: An Internetwork Memo Distribution Facility \*- MMDF.
1292: 6th Data Communication Symposium,
1293: Asilomar.
1294: November 1979.
1295: .ip [Crocker82]
1296: Crocker, D. H.,
1297: .ul
1298: Standard for the Format of Arpa Internet Text Messages.
1299: RFC 822.
1300: Network Information Center,
1301: SRI International,
1302: Menlo Park, California.
1303: August 1982.
1304: .ip [Metcalfe76]
1305: Metcalfe, R.,
1306: and
1307: Boggs, D.,
1308: .q "Ethernet: Distributed Packet Switching for Local Computer Networks" ,
1309: .ul
1310: Communications of the ACM 19,
1311: 7.
1312: July 1976.
1313: .ip [Feinler78]
1314: Feinler, E.,
1315: and
1316: Postel, J.
1317: (eds.),
1318: .ul
1319: ARPANET Protocol Handbook.
1320: NIC 7104,
1321: Network Information Center,
1322: SRI International,
1323: Menlo Park, California.
1324: 1978.
1325: .ip [NBS80]
1326: National Bureau of Standards,
1327: .ul
1328: Specification of a Draft Message Format Standard.
1329: Report No. ICST/CBOS 80-2.
1330: October 1980.
1331: .ip [Neigus73]
1332: Neigus, N.,
1333: .ul
1334: File Transfer Protocol for the ARPA Network.
1335: RFC 542, NIC 17759.
1336: In [Feinler78].
1337: August, 1973.
1338: .ip [Nowitz78a]
1339: Nowitz, D. A.,
1340: and
1341: Lesk, M. E.,
1342: .ul
1343: A Dial-Up Network of UNIX Systems.
1344: Bell Laboratories.
1345: In
1346: UNIX Programmer's Manual, Seventh Edition,
1347: Volume 2.
1348: August, 1978.
1349: .ip [Nowitz78b]
1350: Nowitz, D. A.,
1351: .ul
1352: Uucp Implementation Description.
1353: Bell Laboratories.
1354: In
1355: UNIX Programmer's Manual, Seventh Edition,
1356: Volume 2.
1357: October, 1978.
1358: .ip [Postel74]
1359: Postel, J.,
1360: and
1361: Neigus, N.,
1362: Revised FTP Reply Codes.
1363: RFC 640, NIC 30843.
1364: In [Feinler78].
1365: June, 1974.
1366: .ip [Postel77]
1367: Postel, J.,
1368: .ul
1369: Mail Protocol.
1370: NIC 29588.
1371: In [Feinler78].
1372: November 1977.
1373: .ip [Postel79a]
1374: Postel, J.,
1375: .ul
1376: Internet Message Protocol.
1377: RFC 753,
1378: IEN 85.
1379: Network Information Center,
1380: SRI International,
1381: Menlo Park, California.
1382: March 1979.
1383: .ip [Postel79b]
1384: Postel, J. B.,
1385: .ul
1386: An Internetwork Message Structure.
1387: In
1388: .ul
1389: Proceedings of the Sixth Data Communications Symposium,
1390: IEEE.
1391: New York.
1392: November 1979.
1393: .ip [Postel80]
1394: Postel, J. B.,
1395: .ul
1396: A Structured Format for Transmission of Multi-Media Documents.
1397: RFC 767.
1398: Network Information Center,
1399: SRI International,
1400: Menlo Park, California.
1401: August 1980.
1402: .ip [Postel82]
1403: Postel, J. B.,
1404: .ul
1405: Simple Mail Transfer Protocol.
1406: RFC821
1407: (obsoleting RFC788).
1408: Network Information Center,
1409: SRI International,
1410: Menlo Park, California.
1411: August 1982.
1412: .ip [Schmidt79]
1413: Schmidt, E.,
1414: .ul
1415: An Introduction to the Berkeley Network.
1416: University of California, Berkeley California.
1417: 1979.
1418: .ip [Shoens79]
1419: Shoens, K.,
1420: .ul
1421: Mail Reference Manual.
1422: University of California, Berkeley.
1423: In UNIX Programmer's Manual,
1424: Seventh Edition,
1425: Volume 2C.
1426: December 1979.
1427: .ip [Sluizer81]
1428: Sluizer, S.,
1429: and
1430: Postel, J. B.,
1431: .ul
1432: Mail Transfer Protocol.
1433: RFC 780.
1434: Network Information Center,
1435: SRI International,
1436: Menlo Park, California.
1437: May 1981.
1438: .ip [Solomon81]
1439: Solomon, M., Landweber, L., and Neuhengen, D.,
1440: .q "The Design of the CSNET Name Server."
1441: CS-DN-2,
1442: University of Wisconsin, Madison.
1443: November 1981.
1444: .ip [Su82]
1445: Su, Zaw-Sing,
1446: and
1447: Postel, Jon,
1448: .ul
1449: The Domain Naming Convention for Internet User Applications.
1450: RFC819.
1451: Network Information Center,
1452: SRI International,
1453: Menlo Park, California.
1454: August 1982.
1455: .ip [UNIX83]
1456: .ul
1457: The UNIX Programmer's Manual, Seventh Edition,
1458: Virtual VAX-11 Version,
1459: Volume 1.
1460: Bell Laboratories,
1461: modified by the University of California,
1462: Berkeley, California.
1463: March, 1983.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.