Commit | Line | Data |
---|---|---|
906fdf05 | 1 | .\" |
906fdf05 | 2 | .\" Copyright (c) 1983 Eric P. Allman |
2c57334f KB |
3 | .\" Copyright (c) 1988 The Regents of the University of California. |
4 | .\" All rights reserved. | |
906fdf05 | 5 | .\" |
2c57334f KB |
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. | |
906fdf05 | 17 | .\" |
d754edf0 | 18 | .\" @(#)intro.me 6.4 (Berkeley) %G% |
906fdf05 | 19 | .\" |
13c6ffb1 | 20 | .\" pic -Pxx intro.me | ditroff -me -Pxx |
bc431e5e KD |
21 | .eh 'SMM:16-%''SENDMAIL \*- An Internetwork Mail Router' |
22 | .oh 'SENDMAIL \*- An Internetwork Mail Router''SMM:16-%' | |
7f667328 | 23 | .nr si 3n |
74b6e641 | 24 | .if n .ls 2 |
64dbe651 EA |
25 | .+c |
26 | .(l C | |
d5bda243 | 27 | .sz 14 |
fbbba053 | 28 | SENDMAIL \*- An Internetwork Mail Router |
64dbe651 EA |
29 | .sz |
30 | .sp | |
fe65cf0c | 31 | Eric Allman\(dg |
d5bda243 | 32 | .sp 0.5 |
64dbe651 | 33 | .i |
d754edf0 EA |
34 | University of California, Berkeley |
35 | Mammoth Project | |
64dbe651 | 36 | .)l |
fbbba053 EA |
37 | .sp |
38 | .(l F | |
39 | .ce | |
40 | ABSTRACT | |
1c9783dc | 41 | .sp \n(psu |
fbbba053 EA |
42 | Routing mail through a heterogenous internet presents many new |
43 | problems. Among the worst of these is that of address mapping. | |
37a260a5 EA |
44 | Historically, this has been handled on an |
45 | .i "ad hoc" | |
46 | basis. However, | |
fbbba053 | 47 | this approach has become unmanageable as internets grow. |
1c9783dc | 48 | .sp \n(psu |
fbbba053 EA |
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 | |
37a260a5 EA |
52 | .i "ad hoc" |
53 | addresses. | |
1c9783dc | 54 | The production system is powerful |
fbbba053 EA |
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. | |
1c9783dc | 58 | Sendmail also implements an SMTP server, message |
fbbba053 | 59 | queueing, and aliasing. |
fbbba053 | 60 | .)l |
d5bda243 | 61 | .sp 2 |
64dbe651 | 62 | .(f |
1c9783dc EA |
63 | \(dgA considerable part of this work |
64 | was done while under the employ | |
65 | of the INGRES Project | |
d754edf0 EA |
66 | at the University of California at Berkeley |
67 | and at Britton Lee. | |
fe65cf0c | 68 | .)f |
64dbe651 EA |
69 | .pp |
70 | .i Sendmail | |
d5bda243 EA |
71 | implements a general internetwork mail routing facility, |
72 | featuring aliasing and forwarding, | |
64dbe651 EA |
73 | automatic routing to network gateways, |
74 | and flexible configuration. | |
75 | .pp | |
fbbba053 EA |
76 | In a simple network, |
77 | each node has an address, | |
78 | and resources can be identified | |
7fa298c9 EA |
79 | with a host-resource pair; |
80 | in particular, | |
fbbba053 | 81 | the mail system can refer to users |
7fa298c9 | 82 | using a host-username pair. |
fbbba053 EA |
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, | |
1c9783dc EA |
87 | multiple networks with different characterstics |
88 | and managements | |
dccb3105 | 89 | must communicate. |
fbbba053 EA |
90 | In particular, |
91 | the syntax and semantics of resource identification change. | |
92 | Certain special cases can be handled trivially | |
37a260a5 EA |
93 | by |
94 | .i "ad hoc" | |
95 | techniques, | |
fbbba053 EA |
96 | such as |
97 | providing network names that appear local to hosts | |
7fa298c9 | 98 | on other networks, |
01e97e73 | 99 | as with the Ethernet at Xerox PARC. |
fbbba053 EA |
100 | However, the general case is extremely complex. |
101 | For example, | |
102 | some networks require point-to-point routing, | |
7fa298c9 EA |
103 | which simplifies the database update problem |
104 | since only adjacent hosts must be entered | |
105 | into the system tables, | |
fbbba053 EA |
106 | while others use end-to-end addressing. |
107 | Some networks use a left-associative syntax | |
108 | and others use a right-associative syntax, | |
1c9783dc | 109 | causing ambiguity in mixed addresses. |
7fa298c9 | 110 | .pp |
1c9783dc | 111 | Internet standards seek to eliminate these problems. |
fbbba053 | 112 | Initially, these proposed expanding the address pairs |
7fa298c9 | 113 | to address triples, |
fbbba053 EA |
114 | consisting of |
115 | {network, host, resource} | |
116 | triples. | |
1c9783dc | 117 | Network numbers must be universally agreed upon, |
fbbba053 | 118 | and hosts can be assigned locally |
7fa298c9 | 119 | on each network. |
37a260a5 | 120 | The user-level presentation was quickly expanded |
fbbba053 EA |
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 "eric@a.cc.berkeley.arpa" | |
130 | describes only the logical | |
1c9783dc | 131 | organization of the address space. |
7fa298c9 EA |
132 | .pp |
133 | .i Sendmail | |
134 | is intended to help bridge the gap | |
37a260a5 EA |
135 | between the totally |
136 | .i "ad hoc" | |
137 | world | |
7fa298c9 EA |
138 | of networks that know nothing of each other |
139 | and the clean, tightly-coupled world | |
140 | of unique network numbers. | |
fbbba053 EA |
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. | |
7fa298c9 EA |
145 | It helps guide the conversion of message formats |
146 | between disparate networks. | |
147 | In short, | |
148 | .i sendmail | |
fbbba053 EA |
149 | is designed to assist a graceful transition |
150 | to consistent internetwork addressing schemes. | |
7fa298c9 EA |
151 | .sp |
152 | .pp | |
64dbe651 EA |
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. | |
fbbba053 | 158 | Section 4 compares |
64dbe651 EA |
159 | .i sendmail |
160 | to other internet mail routers, | |
161 | and an evaluation of | |
162 | .i sendmail | |
fbbba053 | 163 | is given in section 5, |
64dbe651 EA |
164 | including future plans. |
165 | .sh 1 "DESIGN GOALS" | |
166 | .pp | |
64dbe651 | 167 | Design goals for |
fbbba053 EA |
168 | .i sendmail |
169 | include: | |
64dbe651 | 170 | .np |
37a260a5 | 171 | Compatibility with the existing mail programs, |
64dbe651 | 172 | including Bell version 6 mail, |
d5bda243 | 173 | Bell version 7 mail |
01e97e73 | 174 | [UNIX83], |
d5bda243 EA |
175 | Berkeley |
176 | .i Mail | |
0e2142c8 | 177 | [Shoens79], |
48cec4c6 | 178 | BerkNet mail |
ce4c8997 | 179 | [Schmidt79], |
48cec4c6 | 180 | and hopefully UUCP mail |
7f667328 | 181 | [Nowitz78a, Nowitz78b]. |
48cec4c6 | 182 | ARPANET mail |
7f667328 | 183 | [Crocker77a, Postel77] |
b7e67727 | 184 | was also required. |
64dbe651 | 185 | .np |
b7e67727 EA |
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. | |
37a260a5 | 191 | This goal was considered essential |
64dbe651 | 192 | because of the emphasis on mail in our environment. |
37a260a5 | 193 | It has turned out to be one of the hardest goals to satisfy, |
64dbe651 EA |
194 | especially in the face of the many anomalous message formats |
195 | produced by various ARPANET sites. | |
196 | For example, | |
37a260a5 EA |
197 | certain sites generate improperly formated addresses, |
198 | occasionally | |
199 | causing error-message loops. | |
b7e67727 | 200 | Some hosts use blanks in names, |
37a260a5 | 201 | causing problems with |
b7e67727 | 202 | UNIX mail programs that assume that an address |
64dbe651 | 203 | is one word. |
fbbba053 EA |
204 | The semantics of some fields |
205 | are interpreted slightly differently | |
206 | by different sites. | |
64dbe651 | 207 | In summary, |
37a260a5 | 208 | the obscure features of the ARPANET mail protocol |
d5bda243 EA |
209 | really |
210 | .i are | |
211 | used and | |
64dbe651 EA |
212 | are difficult to support, |
213 | but must be supported. | |
d5bda243 EA |
214 | .np |
215 | Existing software to do actual delivery | |
216 | should be used whenever possible. | |
37a260a5 | 217 | This goal derives as much from political and practical considerations |
d5bda243 | 218 | as technical. |
64dbe651 | 219 | .np |
1c9783dc EA |
220 | Easy expansion to |
221 | fairly complex environments, | |
64dbe651 | 222 | including multiple |
48cec4c6 | 223 | connections to a single network type |
d5bda243 | 224 | (such as with multiple UUCP or Ether nets |
1c9783dc | 225 | [Metcalfe76]). |
37a260a5 EA |
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. | |
b7e67727 | 229 | For example, |
fbbba053 EA |
230 | the ARPANET is bringing up the |
231 | TCP protocol to replace the old NCP protocol. | |
b7e67727 EA |
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. | |
64dbe651 EA |
236 | .np |
237 | Configuration should not be compiled into the code. | |
37a260a5 EA |
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). | |
48cec4c6 | 240 | We have found this seemingly unimportant goal |
64dbe651 | 241 | to be critical in real life. |
48cec4c6 EA |
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. | |
64dbe651 | 247 | .np |
fbbba053 | 248 | .i Sendmail |
64dbe651 | 249 | must be able to let various groups maintain their own mailing lists, |
b7e67727 | 250 | and let individuals specify their own forwarding, |
37a260a5 | 251 | without modifying the system alias file. |
64dbe651 | 252 | .np |
37a260a5 EA |
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 | |
48cec4c6 | 257 | without changing the system, |
37a260a5 | 258 | and facilitates specialized functions |
48cec4c6 EA |
259 | (such as returning an |
260 | .q "I am on vacation" | |
261 | message). | |
64dbe651 EA |
262 | .np |
263 | Network traffic should be minimized | |
264 | by batching addresses to a single host where possible, | |
37a260a5 | 265 | without assistance from the user. |
fbbba053 | 266 | .pp |
37a260a5 | 267 | These goals motivated the architecture illustrated in figure 1. |
fbbba053 EA |
268 | .(z |
269 | .hl | |
270 | .ie t \ | |
13c6ffb1 EA |
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 \ | |
fbbba053 | 307 | . sp 18 |
13c6ffb1 | 308 | .\} |
fbbba053 EA |
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. | |
64dbe651 EA |
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 | |
48cec4c6 | 352 | generated by a user interface program (UIP) |
7f667328 | 353 | such as Berkeley |
d5bda243 | 354 | .i Mail , |
7f667328 EA |
355 | MS |
356 | [Crocker77b], | |
357 | or MH | |
0e2142c8 | 358 | [Borden79], |
d5bda243 | 359 | edits the message as required by the destination network, |
64dbe651 | 360 | and calls appropriate mailers |
b7e67727 EA |
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 | |
64dbe651 EA |
368 | This discipline allows the insertion of new mailers |
369 | at minimum cost. | |
d5bda243 EA |
370 | In this sense |
371 | .i sendmail | |
372 | resembles the Message Processing Module (MPM) | |
7f667328 | 373 | of [Postel79b]. |
fbbba053 EA |
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. | |
37a260a5 EA |
388 | A list of recipients is sent in the argument vector, |
389 | and the message body is sent on the standard input. | |
fbbba053 | 390 | Anything that the mailer prints |
37a260a5 | 391 | is simply collected and sent back to the sender |
fbbba053 EA |
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, | |
37a260a5 | 403 | but no recipient addresses are passed to the mailer |
dccb3105 | 404 | via the argument list. |
fbbba053 EA |
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 | |
37a260a5 | 412 | This technique is similar to the previous technique, |
fbbba053 | 413 | except that it uses a 4.2bsd IPC channel |
01e97e73 | 414 | [UNIX83]. |
fbbba053 EA |
415 | This method is exceptionally flexible |
416 | in that the mailer need not reside | |
417 | on the same machine. | |
37a260a5 | 418 | It is normally used to connect to a sendmail process |
fbbba053 | 419 | on another machine. |
64dbe651 | 420 | .sh 2 "Operational Description" |
b7e67727 | 421 | .pp |
37a260a5 | 422 | When a sender wants to send a message, |
fbbba053 EA |
423 | it issues a request to |
424 | .i sendmail | |
425 | using one of the three methods described above. | |
b7e67727 | 426 | .i Sendmail |
fbbba053 EA |
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. | |
37a260a5 EA |
432 | If there were errors during processing |
433 | during the second phase, | |
fbbba053 EA |
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. | |
64dbe651 EA |
438 | .sh 3 "Argument processing and address parsing" |
439 | .pp | |
fbbba053 | 440 | If |
fe65cf0c | 441 | .i sendmail |
fbbba053 EA |
442 | is called using one of the two subprocess techniques, |
443 | the arguments | |
dccb3105 | 444 | are first scanned |
37a260a5 | 445 | and option specifications are processed. |
fbbba053 EA |
446 | Recipient addresses are then collected, |
447 | either from the command line | |
448 | or from the SMTP | |
449 | RCPT command, | |
64dbe651 | 450 | and a list of recipients is created. |
37a260a5 EA |
451 | Aliases are expanded at this step, |
452 | including mailing lists. | |
fe65cf0c | 453 | As much validation as possible of the addresses |
d5bda243 EA |
454 | is done at this step: |
455 | syntax is checked, and local addresses are verified, | |
64dbe651 | 456 | but detailed checking of host names and addresses |
d5bda243 EA |
457 | is deferred until delivery. |
458 | Forwarding is also performed | |
64dbe651 EA |
459 | as the local addresses are verified. |
460 | .pp | |
d5bda243 EA |
461 | .i Sendmail |
462 | appends each address | |
463 | to the recipient list after parsing. | |
64dbe651 | 464 | When a name is aliased or forwarded, |
d5bda243 | 465 | the old name is retained in the list, |
fbbba053 | 466 | and a flag is set that tells the delivery phase |
d5bda243 | 467 | to ignore this recipient. |
37a260a5 | 468 | This list is kept free from duplicates, |
64dbe651 | 469 | preventing alias loops |
37a260a5 EA |
470 | and duplicate messages deliverd to the same recipient, |
471 | as might occur if a person is in two groups. | |
64dbe651 EA |
472 | .sh 3 "Message collection" |
473 | .pp | |
d5bda243 | 474 | .i Sendmail |
fbbba053 EA |
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, | |
64dbe651 | 481 | and the body of the message is saved |
48cec4c6 | 482 | in a temporary file. |
64dbe651 | 483 | .pp |
37a260a5 EA |
484 | To simplify the program interface, |
485 | the message is collected even if no addresses were valid. | |
64dbe651 EA |
486 | The message will be returned with an error. |
487 | .sh 3 "Message delivery" | |
488 | .pp | |
37a260a5 | 489 | For each unique mailer and host in the recipient list, |
d5bda243 EA |
490 | .i sendmail |
491 | calls the appropriate mailer. | |
b7e67727 | 492 | Each mailer invocation sends to all users receiving the message on one host. |
37a260a5 | 493 | Mailers that only accept one recipient at a time |
64dbe651 EA |
494 | are handled properly. |
495 | .pp | |
d5bda243 | 496 | The message is sent to the mailer |
fbbba053 EA |
497 | using one of the same three interfaces |
498 | used to submit a message to sendmail. | |
37a260a5 | 499 | Each copy of the message is |
64dbe651 | 500 | prepended by a customized header. |
fbbba053 | 501 | The mailer status code is caught and checked, |
64dbe651 EA |
502 | and a suitable error message given as appropriate. |
503 | The exit code must conform to a system standard | |
37a260a5 | 504 | or a generic message |
64dbe651 EA |
505 | (\c |
506 | .q "Service unavailable" ) | |
507 | is given. | |
fe65cf0c EA |
508 | .sh 3 "Queueing for retransmission" |
509 | .pp | |
fbbba053 | 510 | If the mailer returned an status that |
fe65cf0c EA |
511 | indicated that it might be able to handle the mail later, |
512 | .i sendmail | |
513 | will queue the mail and try again later. | |
64dbe651 EA |
514 | .sh 3 "Return to sender" |
515 | .pp | |
37a260a5 | 516 | If errors occur during processing, |
d5bda243 EA |
517 | .i sendmail |
518 | returns the message to the sender for retransmission. | |
64dbe651 EA |
519 | The letter can be mailed back |
520 | or written in the file | |
521 | .q dead.letter | |
48cec4c6 EA |
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 | |
1c9783dc EA |
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. | |
64dbe651 EA |
544 | .sh 2 "Configuration File" |
545 | .pp | |
546 | Almost all configuration information is read at runtime | |
d5bda243 EA |
547 | from an ASCII file, |
548 | encoding | |
b7e67727 EA |
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 | |
1c9783dc | 559 | which is used to parse and rewrite the addresses). |
2fb78b49 EA |
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. | |
48cec4c6 | 566 | .sh 1 "USAGE AND IMPLEMENTATION" |
64dbe651 EA |
567 | .sh 2 "Arguments" |
568 | .pp | |
7f667328 | 569 | Arguments may be flags and addresses. |
fbbba053 | 570 | Flags set various processing options. |
64dbe651 | 571 | Following flag arguments, |
fe65cf0c EA |
572 | address arguments may be given, |
573 | unless we are running in SMTP mode. | |
37a260a5 | 574 | Addresses follow the syntax in RFC822 |
fbbba053 | 575 | [Crocker82] |
64dbe651 EA |
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 | |
b7e67727 | 583 | Anything in angle brackets (\c |
74b6e641 | 584 | .q "<\|>" ) |
b7e67727 | 585 | is preferred |
64dbe651 | 586 | over anything else. |
37a260a5 | 587 | This rule implements the ARPANET standard that addresses of the form |
b7e67727 | 588 | .(b |
fbbba053 | 589 | user name <machine-address> |
b7e67727 EA |
590 | .)b |
591 | will send to the electronic | |
592 | .q machine-address | |
593 | rather than the human | |
fbbba053 | 594 | .q "user name." |
64dbe651 EA |
595 | .np |
596 | Double quotes | |
597 | (\ "\ ) | |
598 | quote phrases; | |
599 | backslashes quote characters. | |
fe65cf0c EA |
600 | Backslashes are more powerful |
601 | in that they will cause otherwise equivalent phrases | |
602 | to compare differently \*- for example, | |
64dbe651 EA |
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. | |
64dbe651 | 612 | .pp |
64dbe651 EA |
613 | Parentheses, angle brackets, and double quotes |
614 | must be properly balanced and nested. | |
1c9783dc EA |
615 | The rewriting rules control remaining parsing\**. |
616 | .(f | |
37a260a5 | 617 | \**Disclaimer: Some special processing is done |
1c9783dc EA |
618 | after rewriting local names; see below. |
619 | .)f | |
7f667328 EA |
620 | .sh 2 "Mail to Files and Programs" |
621 | .pp | |
d5bda243 EA |
622 | Files and programs are legitimate message recipients. |
623 | Files provide archival storage of messages, | |
7f667328 EA |
624 | useful for project administration and history. |
625 | Programs are useful as recipients in a variety of situations, | |
626 | for example, | |
37a260a5 | 627 | to maintain a public repository of systems messages |
7f667328 EA |
628 | (such as the Berkeley |
629 | .i msgs | |
630 | program, | |
631 | or the MARS system | |
632 | [Sattley78]). | |
633 | .pp | |
d5bda243 | 634 | Any address passing through the initial parsing algorithm |
7f667328 | 635 | as a local address |
d5bda243 | 636 | (i.e, not appearing to be a valid address for another mailer) |
7f667328 | 637 | is scanned for two special cases. |
d5bda243 | 638 | If prefixed by a vertical bar (\c |
7f667328 EA |
639 | .q \^|\^ ) |
640 | the rest of the address is processed as a shell command. | |
a56399d5 | 641 | If the user name begins with a slash mark (\c |
7f667328 EA |
642 | .q /\^ ) |
643 | the name is used as a file name, | |
644 | instead of a login name. | |
0e2142c8 EA |
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. | |
64dbe651 EA |
651 | .sh 2 "Aliasing, Forwarding, Inclusion" |
652 | .pp | |
653 | .i Sendmail | |
d5bda243 | 654 | reroutes mail three ways. |
64dbe651 EA |
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, | |
d5bda243 | 661 | and is normally used |
64dbe651 EA |
662 | in conjunction with aliasing. |
663 | .sh 3 "Aliasing" | |
664 | .pp | |
d5bda243 | 665 | Aliasing maps names to address lists using a system-wide file. |
37a260a5 | 666 | This file is indexed to speed access. |
d5bda243 | 667 | Only names that parse as local |
64dbe651 | 668 | are allowed as aliases; |
37a260a5 EA |
669 | this guarantees a unique key |
670 | (since there are no nicknames for the local host). | |
64dbe651 EA |
671 | .sh 3 "Forwarding" |
672 | .pp | |
673 | After aliasing, | |
37a260a5 | 674 | recipients that are local and valid |
64dbe651 EA |
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. | |
37a260a5 EA |
683 | Often |
684 | this list will contain only one address, | |
685 | and the feature will be used for network mail forwarding. | |
64dbe651 EA |
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 | |
fbbba053 | 696 | Inclusion is specified in RFC 733 [Crocker77a] syntax: |
64dbe651 EA |
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 | |
2fb78b49 | 717 | It is not necessary to rebuild the index on the alias database |
64dbe651 | 718 | when a :include: list is changed. |
fbbba053 EA |
719 | .sh 2 "Message Collection" |
720 | .pp | |
37a260a5 | 721 | Once all recipient addresses are parsed and verified, |
1c9783dc | 722 | the message is collected. |
fbbba053 EA |
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 | |
37a260a5 | 730 | field-name: field-value |
fbbba053 EA |
731 | .)b |
732 | Field-value can be split across lines by starting the following | |
733 | lines with a space or a tab. | |
37a260a5 | 734 | Some header fields have special internal meaning, |
fbbba053 EA |
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. | |
1c9783dc | 745 | This extra dot is stripped by the receiver. |
0e2142c8 EA |
746 | .sh 2 "Message Delivery" |
747 | .pp | |
fbbba053 EA |
748 | The send queue is ordered by receiving host |
749 | before transmission | |
750 | to implement message batching. | |
37a260a5 EA |
751 | Each address is marked as it is sent |
752 | so rescanning the list is safe. | |
0e2142c8 EA |
753 | An argument list is built as the scan proceeds. |
754 | Mail to files is detected during the scan of the send list. | |
fbbba053 EA |
755 | The interface to the mailer |
756 | is performed using one of the techniques | |
1c9783dc | 757 | described in section 2.2. |
0e2142c8 | 758 | .pp |
37a260a5 | 759 | After a connection is established, |
0e2142c8 | 760 | .i sendmail |
fbbba053 EA |
761 | makes the per-mailer changes to the header |
762 | and sends the result to the mailer. | |
0e2142c8 EA |
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. | |
fe65cf0c EA |
766 | .sh 2 "Queued Messages" |
767 | .pp | |
37a260a5 | 768 | If the mailer returns a |
fe65cf0c EA |
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. | |
fbbba053 EA |
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. | |
fbbba053 | 783 | .sh 2 "Configuration" |
64dbe651 | 784 | .pp |
fbbba053 EA |
785 | Configuration is controlled primarily by a configuration file |
786 | read at startup. | |
64dbe651 EA |
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 | |
b7e67727 EA |
793 | To remove or insert the DBM |
794 | (UNIX database) | |
795 | library. | |
64dbe651 EA |
796 | .np |
797 | To change ARPANET reply codes. | |
798 | .np | |
37a260a5 | 799 | To add headers fields requiring special processing. |
64dbe651 | 800 | .lp |
b7e67727 EA |
801 | Adding mailers or changing parsing |
802 | (i.e., rewriting) | |
803 | or routing information | |
64dbe651 EA |
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. | |
37a260a5 | 812 | The primary use of this feature is to add header lines. |
dccb3105 EA |
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; | |
37a260a5 | 866 | this vector is macro-expanded before use. |
dccb3105 EA |
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 | tef@ucsfcgl.UUCP | |
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 | |
37a260a5 | 903 | There are several options that can be set |
dccb3105 EA |
904 | from the configuration file. |
905 | These include the pathnames of various support files, | |
906 | timeouts, | |
907 | default modes, | |
908 | etc. | |
64dbe651 EA |
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. | |
37a260a5 | 918 | This change simplifies many of the problems |
64dbe651 EA |
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: | |
d5bda243 | 933 | features eliminate the requirement that the system alias file |
64dbe651 EA |
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. | |
2fb78b49 EA |
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. | |
64dbe651 EA |
958 | .sh 2 "MMDF" |
959 | .pp | |
7f667328 EA |
960 | MMDF |
961 | [Crocker79] | |
fe65cf0c | 962 | spans a wider problem set than |
64dbe651 EA |
963 | .i sendmail . |
964 | For example, | |
5296a55f | 965 | the domain of |
64dbe651 EA |
966 | MMDF includes a |
967 | .q "phone network" | |
968 | mailer, whereas | |
969 | .i sendmail | |
970 | calls on preexisting mailers in most cases. | |
64dbe651 EA |
971 | .pp |
972 | MMDF and | |
973 | .i sendmail | |
974 | both support aliasing, | |
975 | customized mailers, | |
976 | message batching, | |
fe65cf0c EA |
977 | automatic forwarding to gateways, |
978 | queueing, | |
979 | and retransmission. | |
5296a55f EA |
980 | MMDF supports two-stage timeout, |
981 | which | |
982 | .i sendmail | |
2fb78b49 | 983 | does not support. |
fbbba053 EA |
984 | .pp |
985 | The configuration for MMDF | |
2fb78b49 | 986 | is compiled into the code\**. |
fbbba053 EA |
987 | .(f |
988 | \**Dynamic configuration tables are currently being considered | |
989 | for MMDF; | |
37a260a5 | 990 | allowing the installer to select either compiled |
fbbba053 EA |
991 | or dynamic tables. |
992 | .)f | |
1c9783dc | 993 | .pp |
fbbba053 EA |
994 | Since MMDF does not consider backwards compatibility |
995 | as a design goal, | |
2fb78b49 | 996 | the address parsing is simpler but much less flexible. |
1c9783dc | 997 | .pp |
2fb78b49 | 998 | It is somewhat harder to integrate a new channel\** |
1c9783dc EA |
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. | |
2fb78b49 EA |
1009 | This allows MMDF to do additional verification |
1010 | (such as verifying host names) | |
1011 | at submission time. | |
fbbba053 EA |
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. | |
64dbe651 EA |
1019 | .sh 2 "Message Processing Module" |
1020 | .pp | |
1021 | The Message Processing Module (MPM) | |
7f667328 | 1022 | discussed by Postel [Postel79b] |
64dbe651 EA |
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, | |
37a260a5 EA |
1032 | as does MMDF, |
1033 | thus allowing simpler handling of errors | |
64dbe651 | 1034 | by the mailer |
37a260a5 EA |
1035 | than is possible in |
1036 | .i sendmail . | |
1037 | When a message queued by | |
64dbe651 EA |
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 | |
37a260a5 | 1046 | MPM prefers passing the message as a structured object, |
2fb78b49 EA |
1047 | with type-length-value tuples\**. |
1048 | .(f | |
1049 | \**This is similar to the NBS standard. | |
1050 | .)f | |
37a260a5 EA |
1051 | Such a convention requires a much higher degree of cooperation |
1052 | between mailers than is required by | |
64dbe651 EA |
1053 | .i sendmail . |
1054 | MPM also assumes a universally agreed upon internet name space | |
37a260a5 | 1055 | (with each address in the form of a net-host-user tuple), |
64dbe651 EA |
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. | |
2fb78b49 | 1063 | Every attempt is made to avoid imposing unnecessary constraints |
64dbe651 EA |
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, | |
7f667328 EA |
1068 | as postulated in [Postel79a] |
1069 | and [Postel79b]. | |
64dbe651 | 1070 | .pp |
37a260a5 | 1071 | A nonuniform address space implies that a path will be specified |
64dbe651 EA |
1072 | in all addresses, |
1073 | either explicitly (as part of the address) | |
1074 | or implicitly | |
1075 | (as with implied forwarding to gateways). | |
37a260a5 | 1076 | This restriction has the unpleasant effect of making replying to messages |
64dbe651 EA |
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 | |
64dbe651 EA |
1089 | .i Sendmail |
1090 | has knowledge of a few difficult environments | |
1091 | built in. | |
fbbba053 | 1092 | It generates ARPANET FTP/SMTP compatible error messages |
64dbe651 | 1093 | (prepended with three-digit numbers |
fbbba053 | 1094 | [Neigus73, Postel74, Postel82]) |
64dbe651 EA |
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. | |
64dbe651 EA |
1100 | Also, |
1101 | error handling has an option customized for BerkNet. | |
1102 | .pp | |
fbbba053 EA |
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. | |
37a260a5 EA |
1116 | This feeling is not born out by |
1117 | our experience; | |
1c9783dc | 1118 | on the contrary, |
fbbba053 EA |
1119 | the location and format of mailboxes seems to vary widely |
1120 | from system to system. | |
64dbe651 EA |
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. | |
37a260a5 EA |
1132 | A program could be written to do standard tasks correctly, |
1133 | but this would solve the general case. | |
1134 | .pp | |
64dbe651 | 1135 | It might be desirable to implement some form of load limiting. |
48cec4c6 EA |
1136 | I am unaware of any mail system that addresses this problem, |
1137 | nor am I aware of any reasonable solution at this time. | |
64dbe651 | 1138 | .pp |
64dbe651 EA |
1139 | The configuration file is currently practically inscrutable; |
1140 | considerable convenience could be realized | |
1141 | with a higher-level format. | |
64dbe651 | 1142 | .pp |
7f667328 EA |
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 | |
1c9783dc | 1146 | (e.g., [NBS80]) |
7f667328 EA |
1147 | or to the body of the message itself |
1148 | (such as for multimedia messages | |
1149 | [Postel80]). | |
fbbba053 EA |
1150 | Experience indicates that |
1151 | these changes should be relatively trivial to integrate | |
7f667328 EA |
1152 | into the existing system. |
1153 | .pp | |
7f667328 | 1154 | In tightly coupled environments, |
2fb78b49 EA |
1155 | it would be nice to have a name server |
1156 | such as Grapvine | |
1157 | [Birrell82] | |
1158 | integrated into the mail system. | |
1c9783dc | 1159 | This would allow a site such as |
fbbba053 | 1160 | .q Berkeley |
1c9783dc | 1161 | to appear as a single host, |
fbbba053 EA |
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. | |
37a260a5 EA |
1165 | Such a facility |
1166 | would require an automatically updated database | |
7f667328 | 1167 | and some method of resolving conflicts. |
37a260a5 EA |
1168 | Ideally this would be effective even without |
1169 | all hosts being under | |
1170 | a single management. | |
fbbba053 | 1171 | However, |
37a260a5 EA |
1172 | it is not clear whether this feature |
1173 | should be integrated into the | |
1174 | aliasing facility | |
fbbba053 EA |
1175 | or should be considered a |
1176 | .q "value added" | |
1177 | feature outside | |
1178 | .i sendmail | |
1179 | itself. | |
37a260a5 EA |
1180 | .pp |
1181 | As a more interesting case, | |
1182 | the CSNET name server | |
01e97e73 | 1183 | [Solomon81] |
37a260a5 EA |
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. | |
d5bda243 | 1189 | .sh 0 "ACKNOWLEDGEMENTS" |
7f667328 | 1190 | .pp |
0e2142c8 | 1191 | Thanks are due to Kurt Shoens for his continual cheerful |
7f667328 EA |
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 | |
37a260a5 EA |
1226 | Kurt, |
1227 | Mark, | |
1228 | Kirk McKusick, | |
1229 | Marvin Solomon, | |
1230 | and many others have reviewed this paper, | |
7f667328 EA |
1231 | giving considerable useful advice. |
1232 | .pp | |
1c9783dc EA |
1233 | Special thanks are reserved for Mike Stonebraker at Berkeley |
1234 | and Bob Epstein at Britton-Lee, | |
fbbba053 | 1235 | who both knowingly allowed me to put so much work into this |
37a260a5 | 1236 | project |
7f667328 EA |
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 | |
2fb78b49 EA |
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. | |
fe65cf0c EA |
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. | |
7f667328 EA |
1265 | .ip [Crocker77a] |
1266 | Crocker, D. H., | |
1267 | Vittal, J. J., | |
1268 | Pogran, K. T., | |
1269 | and | |
1270 | Henderson, D. A. Jr., | |
1271 | .ul | |
d5bda243 | 1272 | Standard for the Format of ARPA Network Text Messages. |
7f667328 EA |
1273 | RFC 733, |
1274 | NIC 41952. | |
1275 | In [Feinler78]. | |
1276 | November 1977. | |
1277 | .ip [Crocker77b] | |
1278 | Crocker, D. H., | |
1279 | .ul | |
d5bda243 | 1280 | Framework and Functions of the MS Personal Message System. |
7f667328 EA |
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 | |
d5bda243 | 1291 | An Internetwork Memo Distribution Facility \*- MMDF. |
7f667328 EA |
1292 | 6th Data Communication Symposium, |
1293 | Asilomar. | |
1294 | November 1979. | |
fbbba053 EA |
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. | |
31a22de8 EA |
1304 | .ip [Metcalfe76] |
1305 | Metcalfe, R., | |
1306 | and | |
7f667328 | 1307 | Boggs, D., |
31a22de8 | 1308 | .q "Ethernet: Distributed Packet Switching for Local Computer Networks" , |
7f667328 | 1309 | .ul |
31a22de8 EA |
1310 | Communications of the ACM 19, |
1311 | 7. | |
1312 | July 1976. | |
7f667328 EA |
1313 | .ip [Feinler78] |
1314 | Feinler, E., | |
1315 | and | |
1316 | Postel, J. | |
1317 | (eds.), | |
1318 | .ul | |
d5bda243 | 1319 | ARPANET Protocol Handbook. |
7f667328 EA |
1320 | NIC 7104, |
1321 | Network Information Center, | |
1322 | SRI International, | |
1323 | Menlo Park, California. | |
1324 | 1978. | |
7f667328 EA |
1325 | .ip [NBS80] |
1326 | National Bureau of Standards, | |
1327 | .ul | |
d5bda243 EA |
1328 | Specification of a Draft Message Format Standard. |
1329 | Report No. ICST/CBOS 80-2. | |
7f667328 | 1330 | October 1980. |
ce4c8997 | 1331 | .ip [Neigus73] |
7f667328 EA |
1332 | Neigus, N., |
1333 | .ul | |
d5bda243 | 1334 | File Transfer Protocol for the ARPA Network. |
ce4c8997 | 1335 | RFC 542, NIC 17759. |
d5bda243 | 1336 | In [Feinler78]. |
ce4c8997 | 1337 | August, 1973. |
7f667328 EA |
1338 | .ip [Nowitz78a] |
1339 | Nowitz, D. A., | |
1340 | and | |
1341 | Lesk, M. E., | |
1342 | .ul | |
d5bda243 | 1343 | A Dial-Up Network of UNIX Systems. |
7f667328 | 1344 | Bell Laboratories. |
7f667328 EA |
1345 | In |
1346 | UNIX Programmer's Manual, Seventh Edition, | |
1347 | Volume 2. | |
d5bda243 | 1348 | August, 1978. |
7f667328 EA |
1349 | .ip [Nowitz78b] |
1350 | Nowitz, D. A., | |
1351 | .ul | |
d5bda243 | 1352 | Uucp Implementation Description. |
7f667328 | 1353 | Bell Laboratories. |
7f667328 EA |
1354 | In |
1355 | UNIX Programmer's Manual, Seventh Edition, | |
1356 | Volume 2. | |
d5bda243 | 1357 | October, 1978. |
ce4c8997 EA |
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. | |
7f667328 EA |
1366 | .ip [Postel77] |
1367 | Postel, J., | |
1368 | .ul | |
d5bda243 | 1369 | Mail Protocol. |
7f667328 EA |
1370 | NIC 29588. |
1371 | In [Feinler78]. | |
1372 | November 1977. | |
1373 | .ip [Postel79a] | |
1374 | Postel, J., | |
1375 | .ul | |
d5bda243 | 1376 | Internet Message Protocol. |
7f667328 EA |
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 | |
d5bda243 | 1386 | An Internetwork Message Structure. |
ce4c8997 EA |
1387 | In |
1388 | .ul | |
1389 | Proceedings of the Sixth Data Communications Symposium, | |
1390 | IEEE. | |
1391 | New York. | |
1392 | November 1979. | |
7f667328 EA |
1393 | .ip [Postel80] |
1394 | Postel, J. B., | |
1395 | .ul | |
1396 | A Structured Format for Transmission of Multi-Media Documents. | |
d5bda243 | 1397 | RFC 767. |
7f667328 EA |
1398 | Network Information Center, |
1399 | SRI International, | |
1400 | Menlo Park, California. | |
1401 | August 1980. | |
fbbba053 | 1402 | .ip [Postel82] |
fe65cf0c EA |
1403 | Postel, J. B., |
1404 | .ul | |
1405 | Simple Mail Transfer Protocol. | |
fbbba053 EA |
1406 | RFC821 |
1407 | (obsoleting RFC788). | |
fe65cf0c EA |
1408 | Network Information Center, |
1409 | SRI International, | |
1410 | Menlo Park, California. | |
fbbba053 | 1411 | August 1982. |
ce4c8997 | 1412 | .ip [Schmidt79] |
7f667328 EA |
1413 | Schmidt, E., |
1414 | .ul | |
ce4c8997 | 1415 | An Introduction to the Berkeley Network. |
7f667328 | 1416 | University of California, Berkeley California. |
ce4c8997 | 1417 | 1979. |
0e2142c8 EA |
1418 | .ip [Shoens79] |
1419 | Shoens, K., | |
7f667328 | 1420 | .ul |
d5bda243 EA |
1421 | Mail Reference Manual. |
1422 | University of California, Berkeley. | |
1423 | In UNIX Programmer's Manual, | |
7f667328 EA |
1424 | Seventh Edition, |
1425 | Volume 2C. | |
7f667328 EA |
1426 | December 1979. |
1427 | .ip [Sluizer81] | |
1428 | Sluizer, S., | |
1429 | and | |
1430 | Postel, J. B., | |
1431 | .ul | |
d5bda243 EA |
1432 | Mail Transfer Protocol. |
1433 | RFC 780. | |
7f667328 EA |
1434 | Network Information Center, |
1435 | SRI International, | |
1436 | Menlo Park, California. | |
1437 | May 1981. | |
01e97e73 EA |
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. | |
fbbba053 EA |
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. | |
01e97e73 | 1455 | .ip [UNIX83] |
7f667328 EA |
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, | |
01e97e73 EA |
1462 | Berkeley, California. |
1463 | March, 1983. |