Prior to V8 sendmail,
if the list of recipients contained an address that began with
any of the prescanned switches, sendmail would wrongly
view that recipient as a switch during its prescan phase. For
example, mail to joe, bill, -Cool
caused sendmail
to try to use a file named ool
as its configuration file.
Command-line switches must precede recipient addresses. Switches that are mixed in with recipient names are treated as recipient addresses.
Most versions of sendmail (including IDA and some versions of BSD but excluding SunOS and V8) syslog(3) a warning if the frozen configuration file doesn't exist. This can be annoying at sites that intentionally choose not to use a frozen configuration file.
Prior to V8 sendmail, unknown command-line switches
were silently ignored. Therefore sending
mail from a shell script could fail for reasons that were difficult
to find.
For example, specifying the preliminary hop count
wrongly with -j
, instead of correctly with -h
,
caused your presetting of the hop count to be silently ignored.
Some old BSD and SunOS versions of sendmail set the default sender's full
name from the environmental variable NAME even when running
as a daemon or when processing the queue. This can lead to
the superuser's full name occasionally showing up wrongly as a sender's
full name. IDA and V8 sendmail clear the full name in
-bd
and -q
modes but use different methods.
To prevent this problem under other versions of sendmail,
the env(1) program can be used to clean up the environment
passed to sendmail:
%env - /usr/lib/sendmail -bd -q1h
V8 sendmail uses getopt(3) to parse its command-line arguments so that a switch and its argument may have whitespace between them without harm:
-C configfile
But for bizarre historical reasons the -d
switch differs. There
may never be space between the -d
and its arguments:
-d 0.4
If there is space between them, the argument (here, 0.4
) is taken
to be a recipient name.