I've worked on
sendmail for many years,
and many employers have been remarkably patient
about letting me work on a large project
that was not part of my official job.
This includes time on the INGRES Project at
the University of California at Berkeley,
at Britton Lee,
and again on the Mammoth and Titan Projects at Berkeley.
Much of the second wave of improvements
resulting in version 8.1
should be credited to Bryan Costales of the
International Computer Science Institute.
As he passed me drafts of his book on
sendmail I was inspired to start working on things again.
Bryan was also available to bounce ideas off of.
Gregory Neil Shapiro
of Worcester Polytechnic Institute
has become instrumental in all phases of
sendmail support and development,
and was largely responsible for getting versions 8.8 and 8.9
out the door.
Many, many people contributed chunks of code and ideas to
sendmail. It has proven to be a group network effort.
Version 8 in particular was a group project.
The following people and organizations made notable contributions:
I apologize for anyone I have omitted, misspelled, misattributed, or
At this point, I suspect that at least a hundred people
have contributed code,
and many more have contributed ideas, comments, and encouragement.
I've tried to list them in the RELEASE_NOTES in the distribution directory.
I appreciate their contribution as well.
- Claus Assmann
John Beck, Hewlett-Packard & Sun Microsystems
Keith Bostic, CSRG, University of California, Berkeley
Andrew Cheng, Sun Microsystems
Michael J. Corrigan, University of California, San Diego
Bryan Costales, International Computer Science Institute & InfoBeat
Pär (Pell) Emanuelsson
Craig Everhart, Transarc Corporation
Per Hedeland, Ericsson
Tom Ivar Helbekkmo, Norwegian School of Economics
Kari Hurtta, Finnish Meteorological Institute
Allan E. Johannesen, WPI
Jonathan Kamens, OpenVision Technologies, Inc.
Takahiro Kanbe, Fuji Xerox Information Systems Co., Ltd.
Brian Kantor, University of California, San Diego
John Kennedy, Cal State University, Chico
Murray S. Kucherawy, HookUp Communication Corp.
Bruce Lilly, Sony U.S.
Motonori Nakamura, Ritsumeikan University & Kyoto University
John Gardiner Myers, Carnegie Mellon University
Neil Rickert, Northern Illinois University
Gregory Neil Shapiro, WPI
Eric Schnoebelen, Convex Computer Corp.
Eric Wassenaar, National Institute for Nuclear and High Energy Physics, Amsterdam
Randall Winchester, University of Maryland
Christophe Wolfhugel, Pasteur Institute & Herve Schauer Consultants (Paris)
Special thanks are reserved for Michael Corrigan and Christophe Wolfhugel,
who besides being wonderful guinea pigs and contributors
have also consented to be added to the ``sendmail@Sendmail.ORG'' list
and, by answering the bulk of the questions sent to that list,
have freed me up to do other work.
Arguments must be presented with flags before addresses.
The flags are:
- Set operation mode to
x. Operation modes are:
m Deliver mail (default)
s Speak SMTP on input side
a* ``Arpanet'' mode (get envelope sender information from header)
d Run as a daemon in background
D Run as a daemon in foreground
t Run in test mode
v Just verify addresses, don't collect or deliver
i Initialize the alias database
p Print the mail queue
h Print the persistent host status database
H Purge expired entries from the persistent host status database
- Indicate body type.
- Use a different configuration file.
Sendmail runs as the invoking user (rather than root)
when this flag is specified.
- Set debugging level.
- -f addr
- The envelope sender address is set to
addr. This address may also be used in the From: header
if that header is missing during initial submission.
The envelope sender address is used as the recipient
for delivery status notifications
and may also appear in a Return-Path: header.
- Sets the full name of this user to
- When accepting messages via the command line,
indicate that they are for relay (gateway) submission.
sendmail may complain about syntactically invalid messages,
e.g., unqualified host names,
rather than fixing them when this flag is set.
sendmail will not do any canonicalization in this mode.
- -h cnt
- Sets the
hop count to
cnt. This represents the number of times this message has been processed
sendmail (to the extent that it is supported by the underlying networks).
Cnt is incremented during processing,
and if it reaches
sendmail throws away the message with an error.
- -L tag
- Sets the identifier used for syslog.
Note that this identifier is set
as early as possible.
sendmail may be used
if problems arise
before the command line arguments
- Don't do aliasing or forwarding.
- -N notifications
- Tag all addresses being sent as wanting the indicated
notifications, which consists of the word
NEVER or a comma-separated list of
DELAY for successful delivery,
and a message that is stuck in a queue somewhere.
The default is
- -r addr
- An obsolete form of
- Set option
x to the specified
value. These options are described in Section 5.6.
option to the specified
value (for long form option names).
These options are described in Section 5.6.
- Set macro
x to the specified
- Set the sending protocol.
Programs are encouraged to set this.
The protocol field can be in the form
host to set both the sending protocol and sending host.
-pUUCP:uunet sets the sending protocol to UUCP
and the sending host to uunet.
(Some existing programs use -oM to set the r and s macros;
this is equivalent to using -p.)
- Try to process the queued up mail.
If the time is given,
sendmail will run through the queue at the specified interval
to deliver queued mail;
otherwise, it only runs once.
- Run the queue once,
limiting the jobs to those matching
Xstring. The key letter
X can be
I to limit based on queue identifier,
R to limit based on recipient,
S to limit based on sender.
A particular queued job is accepted if one of the corresponding addresses
contains the indicated
-qX flags are permitted,
with items with the same key letter
or'ed together, and items with different key letters
- -R ret
- What information you want returned if the message bounces;
ret can be
HDRS for headers only or
FULL for headers plus body.
This is a request only;
the other end is not required to honor the parameter.
HDRS is specified local bounces also return only the headers.
- Read the header for
Bcc: lines, and send to everyone listed in those lists.
Bcc: line will be deleted before sending.
Any addresses in the argument vector will be deleted
from the send list.
- Indicate that this is an initial User Agent submission.
This flag is deprecated.
Future releases will ignore this flag and
assume all submissions from the command line are
- -V envid
- The indicated
envid is passed with the envelope of the message
and returned if the message bounces.
- -X logfile
- Log all traffic in and out of
sendmail in the indicated
logfile for debugging mailer problems.
This produces a lot of data very quickly and should be used sparingly.
There are a number of options that may be specified as
These are the e, i, m, and v options.
the f option
may be specified as the
The DSN related options
-V have no effects on
sendmail running as daemon.
This appendix describes the format of the queue files.
These files live in the directory defined by the
Q option in the
sendmail.cf file, usually
/usr/spool/mqueue. The individual qf, df, and xf files
may be stored in separate
if they are present in the queue directory.
To use multiple queues,
supply a value ending with an asterisk.
/var/spool/mqueue/q* will use all of the directories or symbolic links to directories
beginning with `q' in
/var/spool/mqueue as queue directories.
New messages will be randomly placed
into one of the queues.
Do not change the queue directory structure
while sendmail is running.
All queue files have the name
YMDhmsNPPPPP is the
id for this message
x is a type.
The individual letters in the
- Encoded year
- Encoded month
- Encoded day
- Encoded hour
- Encoded minute
- Encoded second
- Envelope number
- First five digits of the process ID
All files with the same id collectively define one message.
If memory-buffered files are available,
some of these files may never appear
The types are:
- The data file.
The message body (excluding the header) is kept in this file.
- The queue control file.
This file contains the information necessary to process the job.
- A temporary file.
These are an image of the
qf file when it is being rebuilt.
It should be renamed to a
qf file very quickly.
- A transcript file,
existing during the life of a session
showing everything that happens
during that session.
qf file is structured as a series of lines
each beginning with a code letter.
The lines are as follows:
- The version number of the queue file format,
used to allow new
sendmail binaries to read queue files created by older versions.
Defaults to version zero.
Must be the first line of the file if present.
For 8.10 the version number is 3.
- A header definition.
There may be any number of these lines.
The order is important:
they represent the order in the final message.
These use the same syntax
as header definitions in the configuration file.
- The controlling address.
The syntax is
localuser:aliasname. Recipient addresses following this line
will be flagged so that deliveries will be run as the
localuser (a user name from the /etc/passwd file);
aliasname is the name of the alias that expanded to this address
(used for printing messages).
- The ``original recipient'',
specified by the ORCPT= field in an ESMTP transaction.
Used exclusively for Delivery Status Notifications.
It applies only to the immediately following `R' line.
- A recipient address.
This will normally be completely aliased,
but is actually realiased when the job is processed.
There will be one line
for each recipient.
Version 1 qf files
also include a leading colon-terminated list of flags,
which can be
`S' to return a message on successful final delivery,
`F' to return a message on failure,
`D' to return a message if the message is delayed,
`B' to indicate that the body should be returned,
`N' to suppress returning the body,
`P' to declare this as a ``primary'' (command line or SMTP-session) address.
- The sender address.
There may only be one of these lines.
- The job creation time.
This is used to compute when to time out the job.
- The current message priority.
This is used to order the queue.
Higher numbers mean lower priorities.
The priority changes
as the message sits in the queue.
The initial priority depends on the message class
and the size of the message.
- A message.
This line is printed by the
and is generally used to store status information.
It can contain any text.
- Flag bits, represented as one letter per flag.
Defined flag bits are
r indicating that this is a response message
w indicating that a warning message has been sent
announcing that the mail has been delayed.
- The total number of delivery attempts.
- The time (as seconds since January 1, 1970)
of the last delivery attempt.
- The i-number of the data file;
this can be used to recover your mail queue
after a disastrous disk crash.
- A macro definition.
The values of certain macros
(as of this writing, only
$s) are passed through to the queue run phase.
- The body type.
The remainder of the line is a text string defining the body type.
If this field is missing,
the body type is assumed to be
undefined and no special processing is attempted.
Legal values are
- The original envelope id (from the ESMTP transaction).
For Deliver Status Notifications only.
As an example,
the following is a queue file sent to
the person who sent the message,
the submission time
(in seconds since January 1, 1970),
the message priority,
the message class,
and the headers for the message.
HReceived: by vangogh.CS.Berkeley.EDU (5.108/2.7) id AAA06703;
Fri, 17 Jul 1992 00:28:55 -0700
HReceived: from mail.CS.Berkeley.EDU by vangogh.CS.Berkeley.EDU (5.108/2.7)
id AAA06698; Fri, 17 Jul 1992 00:28:54 -0700
HReceived: from [220.127.116.11] by mail.CS.Berkeley.EDU (5.96/2.5)
id AA22777; Fri, 17 Jul 1992 03:29:14 -0400
HReceived: by foo.bar.baz.de (5.57/Ultrix3.0-C)
id AA22757; Fri, 17 Jul 1992 09:31:25 GMT
H?F?From: email@example.com (Eric Allman)
H?x?Full-name: Eric Allman
HSubject: this is an example message
This is a summary of the support files
sendmail creates or generates.
Many of these can be changed by editing the sendmail.cf file;
check there to find the actual pathnames.
- The binary of
- A link to /usr/sbin/sendmail;
causes the alias database to be rebuilt.
Running this program is completely equivalent to giving
- Prints a listing of the mail queue.
This program is equivalent to using the
-bp flag to
- The configuration file,
in textual form.
- The SMTP help file.
- A statistics file; need not be present.
- Created in daemon mode;
it contains the process id of the current SMTP daemon.
If you use this in scripts;
use ``head -1'' to get just the first line;
the second line contains the command line used to invoke the daemon,
and later versions of
sendmail may add more information to subsequent lines.
- The textual version of the alias file.
- The alias file in
- The alias file in
- The directory in which the mail queue(s)
and temporary files reside.
- Control (queue) files for messages.
- Data files.
- Temporary versions of the qf files,
used during queue file rebuild.
- A transcript of the current session.
TABLE OF CONTENTS
[Contents] [Previous] [Next]
This document was translated by troff2html v0.21 on March 7, 2000.
Please send comments to:
<ca at sendmail.org>