When
we do a default Linux server installation you will find the default
/etc/mail/sendmail.mc . This file has various macros defined and with
very little explanation. Firstly, preview your default sendmail.mc. Than the below article explains the details for most of the
macros defined in sendmail.mc in the same order. For more information
refer to Sendmail.mc Explained
===============================================================================
divert(-1)
dnl
This is the sendmail macro config file. If you make changes to this
file,
dnl
you need the sendmail-cf rpm installed and then have to generate 
dnl
new /etc/mail/sendmail.cf by running the following command:
dnl
dnl       
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
dnl
 
include('/usr/share/sendmail-cf/m4/cf.m4')
This is a requirement in order to process the macro
file and generate the 
sendmail.cf file. This include the cf.m4 macro files
which contains lots of macro definition for the rest of the file.
 
VERSIONID('linux setup for Red Hat Linux')dnl
     
VERSIONID is a macro that stuffs the version information into the
resulting file.  You could use SCCS, RCS, CVS, something else,
or omit it completely.  This is not the same as the version id
included in SMTP greeting messages -- this is defined in
m4/version.m4.
 
 
OSTYPE('linux')
     
You must specify an OSTYPE to properly configure things such as the
pathname of the help and status files, the flags needed for the local
mailer, and other important things.  If you omit it, you will
get an error when you try to build the configuration.  Look at
the ostype directory for the list of known operating system types.
DOMAIN('CS.Berkeley.EDU')dnl This example is specific to the Computer
Science Division at Berkeley. You can use "DOMAIN('generic')"
to get a sufficiently bland definition that may well work for you, or
you can create a customized domain definition appropriate for your
environment.
 
dnl
define('SMART_HOST','smtp.your.provider')
Uncomment
and edit the following line if your mail needs to be sent out through
an external mail server:
 
define('confDEF_USER_ID',''8:12'')dnl
     
confDEF_USER_ID        
DefaultUser [1:1] Default user id.
 
undefine('UUCP_RELAY')dnl
     
UUCP_RELAY  The host that will accept UUCP-addressed email.
           
If not defined, all UUCP sites must be directly connected.
 
undefine('BITNET_RELAY')dnl
     
BITNET_RELAY      The host that will accept
BITNET-addressed email.
           
If not defined, the .BITNET pseudo-domain won't work.
 
dnl
define('confAUTO_REBUILD')dnl
 
define('confTO_CONNECT',
'1m')dnl
confTO_CONNECT   
Timeout.connect   [0] The timeout waiting for an initial
connect() to complete.  This can only shorten connection
timeouts; the kernel silently enforces an absolute maximum (which
varies depending on the system).
 
define('confTRY_NULL_MX_LIST',true)dnl
     
confTRY_NULL_MX_LIST    TryNullMXList[False] If this
host is the best MX
                             
for a host and other arrangements
                             
haven't been made, try connecting
                             
to the host directly; normally this
                             
would be a config error.
 
 
define('confDONT_PROBE_INTERFACES',true)dnl
     
confDONT_PROBE_INTERFACES  DontProbeInterfaces
                             
[False] If set, sendmail will _not_
                             
insert the names and addresses of any
                             
local interfaces into class {w}
                             
(list of known "equivalent" addresses).
                             
If you set this, you must also include
                             
some support for these addresses (e.g.,
                             
in a mailertable entry) -- otherwise,
                             
mail to addresses in this list will
                             
bounce with a configuration error.
                             
If set to "loopback" (without
                             
quotes), sendmail will skip
                             
loopback interfaces (e.g., "lo0").
     
define('PROCMAIL_MAILER_PATH','/usr/bin/procmail')dnl
     
PROCMAIL_MAILER_PATH    [/usr/local/bin/procmail]
The path to the procmail program.  This is also used by
FEATURE('local_procmail').
 
define('ALIAS_FILE',
'/etc/aliases')dnl
     
ALIAS_FILE       
[/etc/mail/aliases] The location of the text version
                 
of the alias file(s).  It can be a comma-separated
                 
list of names (but be sure you quote values with
                 
commas in them -- for example, use define('ALIAS_FILE', 'a,b')
                 
to get "a" and "b" both listed as alias files;
     
           
otherwise the define() primitive only sees "a").
 
dnl
define('STATUS_FILE', '/etc/mail/statistics')dnl
     
STATUS_FILE      
[/etc/mail/statistics] The file containing status information.
 
define('UUCP_MAILER_MAX',
'2000000')dnl
     
UUCP_MAILER_MAX        
[100000] The maximum size message accepted for transmission by the
UUCP mailers.
 
define('confUSERDB_SPEC',
'/etc/mail/userdb.db')dnl
     
confUSERDB_SPEC        
UserDatabaseSpec
                             
[undefined] User database specification.
 
define('confPRIVACY_FLAGS',
'authwarnings,novrfy,noexpn,restrictqrun')dnl
     
confPRIVACY_FLAGS PrivacyOptions    [authwarnings]
Privacy flags.
 
define('confAUTH_OPTIONS',
'A')dnl
     
confAUTH_OPTIONS  AuthOptions [undefined] If this option is
'A'
                             
then the AUTH= parameter for the
                             
MAIL FROM command is only issued
                             
when authentication succeeded.
                             
Other values (which should be listed
                             
one after the other without any
                             
intervening characters except for
                             
space or comma) are a, c, d, f, p,
                             
and y.  See doc/op/op.me for
                             
details.
 
define('confMAX_MESSAGE_SIZE','100')dnl
     
confMAX_MESSAGE_SIZE    MaxMessageSize   
[infinite] The maximum size of 
messages
that will be accepted (in bytes).
 
 
dnl
TRUST_AUTH_MECH('EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
     
Per default, relaying is allowed for any user who authenticated
via
a "trusted" mechanism, i.e., one that is defined via
TRUST_AUTH_MECH('list of mechanisms')
For
example: TRUST_AUTH_MECH('KERBEROS_V4 DIGEST-MD5')
 
dnl
define('confAUTH_MECHANISMS', 'EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5
LOGIN PLAIN')dnl
     
confAUTH_MECHANISMS     AuthMechanisms   
[GSSAPI KERBEROS_V4 DIGEST-MD5
                             
CRAM-MD5] List of authentication
                             
mechanisms for AUTH (separated by
                             
spaces).  The advertised list of
                             
authentication mechanisms will be the
                             
intersection of this list and the list
                             
of available mechanisms as determined
                             
by the CYRUS SASL library.
 
dnl
define('confCACERT_PATH','/usr/share/ssl/certs')
     
confCACERT_PATH        
CACERTPath  [undefined] Path to directory
                             
with certs of CAs.
 
dnl
define('confCACERT','/usr/share/ssl/certs/ca-bundle.crt')
     
confCACERT        CACERTFile 
[undefined] File containing one CA
                             
cert.
 
dnl
define('confSERVER_CERT','/usr/share/ssl/certs/sendmail.pem')
     
confSERVER_CERT        
ServerCertFile    [undefined] File containing the
                             
cert of the server, i.e., this cert
                             
is used when sendmail acts as
                             
server.
 
dnl
define('confSERVER_KEY','/usr/share/ssl/certs/sendmail.pem')
     
confSERVER_KEY         
ServerKeyFile     [undefined] File containing the
                             
private key belonging to the server
                             
cert.
 
dnl
define('confTO_QUEUEWARN', '4h')dnl
     
confTO_QUEUEWARN  Timeout.queuewarn
                             
[4h] The timeout before a warning
                             
message is sent to the sender telling
                             
them that the message has been
                             
deferred.
 
dnl
define('confTO_QUEUERETURN', '5d')dnl
     
confTO_QUEUERETURN     
Timeout.queuereturn
                             
[5d] The timeout before a message is
                             
returned as undeliverable.
 
dnl
define('confQUEUE_LA', '12')dnl
confQUEUE_LA           
QueueLA          
[varies] Load average at which
                             
queue-only function kicks in.
                             
Default values is (8 * numproc)
                             
where numproc is the number of
                             
processors online (if that can be
                             
determined).
 
dnl
define('confREFUSE_LA', '18')dnl
confREFUSE_LA          
RefuseLA    [varies] Load average at which
                             
incoming SMTP connections are
                             
refused.  Default values is (12 *
                             
numproc) where numproc is the
                             
number of processors online (if
                             
that can be determined).
 
define('confTO_IDENT',
'0')dnl
     
confTO_IDENT           
Timeout.ident     [5s] The timeout waiting for a
                             
response to an IDENT query.
 
dnl
FEATURE(delay_checks)dnl
     
delay_checks      The rulesets
check_mail and check_relay will not be called
           
when a client connects or issues a MAIL command, respectively.
           
Instead, those rulesets will be called by the check_rcpt
           
ruleset; they will be skipped under certain circumstances.
           
See "Delay all checks" in the anti-spam configuration
control
           
section.  Note: this feature is incompatible to the versions
           
in 8.10 and 8.11.
 
FEATURE('no_default_msa','dnl')dnl
     
no_default_msa    Don't generate the default MSA
daemon, i.e.,
           
DAEMON_OPTIONS('Port=587,Name=MSA,M=E')
           
To define a MSA daemon with other parameters, use this
           
FEATURE and introduce new settings via DAEMON_OPTIONS().
 
FEATURE('smrsh','/usr/sbin/smrsh')dnl
     
smrsh       Use the SendMail
Restricted SHell (smrsh) provided
           
with the distribution instead of /bin/sh for mailing
           
to programs.  This improves the ability of the local
           
system administrator to control what gets run via
           
e-mail.  If an argument is provided it is used as the
           
pathname to smrsh; otherwise, the path defined by
           
confEBINDIR is used for the smrsh binary -- by default,
           
/usr/libexec/smrsh is assumed.
 
FEATURE('mailertable','hash
-o /etc/mail/mailertable.db')dnl
     
mailertable Include a "mailer table" which can be used
to override
           
routing for particular domains (which are not in class {w},
           
i.e.  local host names).  The argument of the FEATURE may
be
           
the key definition.  If none is specified, the definition
           
used is:
                 
hash /etc/mail/mailertable
           
Keys in this database are fully qualified domain names
           
or partial domains preceded by a dot -- for example,
           
"vangogh.CS.Berkeley.EDU" or ".CS.Berkeley.EDU". 
As a
           
special case of the latter, "." matches any domain not
           
covered by other keys.  Values must be of the form:
                 
mailer:domain
           
where "mailer" is the internal mailer name, and "domain"
           
is where to send the message.  These maps are not
           
reflected into the message header.  As a special case,
           
the forms:
           
      local:user
           
will forward to the indicated user using the local mailer,
                 
local:
           
will forward to the original user in the e-mail address
           
using the local mailer, and
                 
error:code message
                 
error:D.S.N:code message
           
will give an error message with the indicated SMTP reply
           
code and message, where D.S.N is an RFC 1893 compliant
           
error code.
 
FEATURE('virtusertable','hash
-o /etc/mail/virtusertable.db')dnl
     
virtusertable     A domain-specific form of
aliasing, allowing multiple
           
virtual domains to be hosted on one machine.  For example,
           
if the virtuser table contained:
                 
info@foo.com      foo-info
                 
info@bar.com      bar-info
                 
joe@bar.com error:nouser 550 No such user here
                 
jax@bar.com error:5.7.0:550 Address invalid
                 
@baz.org    jane@example.net
           
then mail addressed to info@foo.com will be sent to the
           
address foo-info, mail addressed to info@bar.com will be
           
delivered to bar-info, and mail addressed to anyone at baz.org
           
will be sent to jane@example.net, mail to joe@bar.com will
           
be rejected with the specified error message, and mail to
           
jax@bar.com will also have a RFC 1893 compliant error code
           
5.7.0.
 
           
The username from the original address is passed
           
as %1 allowing:
                 
@foo.org    %1@example.com
           
meaning someone@foo.org will be sent to someone@example.com.
           
Additionally, if the local part consists of "user+detail"
           
then "detail" is passed as %2 and "+detail" is
passed as %3
           
when a match against user+* is attempted, so entries like
                 
old+*@foo.org     new+%2@example.com
                 
gen+*@foo.org     %2@example.com
                 
+*@foo.org  %1%3@example.com
                 
X++@foo.org Z%3@example.com
                 
@bar.org    %1%3
 
           
and other forms are possible.  Note: to preserve "+detail"
           
for a default case (@domain) %1%3 must be used as RHS.
           
There are two wildcards after "+": "+" matches
only a non-empty
           
detail, "*" matches also empty details, e.g., user+@foo.org
           
matches +*@foo.org but not ++@foo.org.  This can be used
           
to ensure that the parameters %2 and %3 are not empty.
 
           
All the host names on the left hand side (foo.com, bar.com,
           
and baz.org) must be in class {w} or class {VirtHost}.  The
           
latter can be defined by the macros VIRTUSER_DOMAIN or
           
VIRTUSER_DOMAIN_FILE (analogously to MASQUERADE_DOMAIN and
           
MASQUERADE_DOMAIN_FILE, see below).  If VIRTUSER_DOMAIN or
           
VIRTUSER_DOMAIN_FILE is used, then the entries of class
           
{VirtHost} are added to class {R}, i.e., relaying is allowed
           
to (and from) those domains.  The default map definition is:
                 
hash /etc/mail/virtusertable
           
A new definition can be specified as the second argument of
           
the FEATURE macro, such as
                 
FEATURE('virtusertable', 'dbm /etc/mail/virtusers')
 
FEATURE(redirect)dnl
     
redirect    Reject all mail addressed to
"address.REDIRECT" with
           
a ''551 User has moved; please try <address>'' message.
           
If this is set, you can alias people who have left
           
to their new address with ".REDIRECT" appended.
 
FEATURE(always_add_domain)dnl
     
always_add_domain
           
Include the local host domain even on locally delivered
           
mail.  Normally it is not added on unqualified names.
           
However, if you use a shared message store but do not use
           
the same user name space everywhere, you may need the host
           
name on local names.  An optional argument specifies
           
another domain to be added than the local.
 
FEATURE(use_cw_file)dnl
     
      FEATURE('use_cw_file')tells
sendmail that you want to have it read 
an
/etc/mail/local-host-names file to get values for class {w}.
 
FEATURE(use_ct_file)dnl
     
use_ct_file Read the file /etc/mail/trusted-users file to get the
           
names of users that will be ''trusted'', that is, able to
           
set their envelope from address using -f without generating
           
a warning message.  The actual filename can be overridden
           
by redefining confCT_FILE.
 
FEATURE(local_procmail,'','procmail
-t -Y -a $h -d $u')dnl
dnl The '-t' option will retry delivery if e.g. the user runs over
his quota.
     
local_procmail    Use procmail or another delivery
agent as the local mailer.
           
The argument to this feature is the pathname of the
           
delivery agent, which defaults to PROCMAIL_MAILER_PATH.
           
Note that this does NOT use PROCMAIL_MAILER_FLAGS or
           
PROCMAIL_MAILER_ARGS for the local mailer; tweak
           
LOCAL_MAILER_FLAGS and LOCAL_MAILER_ARGS instead, or
           
specify the appropriate parameters.  When procmail is used,
           
the local mailer can make use of the
           
"user+indicator@local.host" syntax; normally the +indicator
           
is just tossed, but by default it is passed as the -a
           
argument to procmail.
 
           
This feature can take up to three arguments:
           
1. Path to the mailer program
           
   [default: /usr/local/bin/procmail]
           
2. Argument vector including name of the program
           
   [default: procmail -Y -a $h -d $u]
           
3. Flags for the mailer [default: SPfhn9]
 
           
Empty arguments cause the defaults to be taken.
           
For example, this allows it to use the maildrop
           
(http://www.flounder.net/~mrsam/maildrop/) mailer instead
           
by specifying:
 
           
FEATURE('local_procmail', '/usr/local/bin/maildrop',
           
 'maildrop -d $u')
           
or scanmails using:
           
FEATURE('local_procmail', '/usr/local/bin/scanmails')
           
WARNING: This feature sets LOCAL_MAILER_FLAGS unconditionally,
           
i.e.,  without respecting any definitions in an OSTYPE setting.
 
FEATURE('access_db','hash
-T<TMPF> -o /etc/mail/access.db')dnl
     
access_db   Turns on the access database feature. 
The access db gives
           
you the ability to allow or refuse to accept mail from
           
specified domains for administrative reasons.  Moreover,
           
it can control the behavior of sendmail in various situations.
           
By default, the access database specification is:
 
                 
hash -T<TMPF> /etc/mail/access
 
           
See the anti-spam configuration control section for further
           
important information about this feature.  Notice:
           
"-T<TMPF>" is meant literal, do not replace it by
anything.
 
FEATURE('blacklist_recipients')dnl
     
blacklist_recipients
           
Turns on the ability to block incoming mail for certain
           
recipient usernames, hostnames, or addresses.  For
           
example, you can block incoming mail to user nobody,
           
host foo.mydomain.com, or guest@bar.mydomain.com.
           
These specifications are put in the access db as
           
described in the anti-spam configuration control section
           
later in this document.
 
EXPOSED_USER('root')dnl
     
EXPOSED_USER('usernames')
This
adds users to class {E}; you could also use
 
DAEMON_OPTIONS('Port=smtp,Addr=127.0.0.1, Name=MTA')
dnl
This changes sendmail to only listen on the loopback device 127.0.0.1
dnl
and not on any other network devices. Comment this out if you want
dnl
to accept email over the network.
 
dnl
DAEMON_OPTIONS('port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')
dnl
NOTE: binding both IPv4 and IPv6 daemon to the same port requires
dnl      
a kernel patch
 
FEATURE('accept_unresolvable_domains')dnl
dnl We strongly recommend to comment
this one out if you want to protect
dnl
yourself from spam. However, the laptop and users on computers that
do
dnl
not have 24x7 DNS do need this.
     
accept_unresolvable_domains
           
Normally, MAIL FROM: commands in the SMTP session will be
           
refused if the host part of the argument to MAIL FROM:
           
cannot be located in the host name service (e.g., an A or
           
MX record in DNS).  If you are inside a firewall that has
           
only a limited view of the Internet host name space, this
           
could cause problems.  In this case you probably want to
           
use this feature to accept all domains on input, even if
           
they are unresolvable.
 
dnl
FEATURE('relay_based_on_MX')dnl
     
relay_based_on_MX
           
Turns on the ability to allow relaying based on the MX
           
records of the host portion of an incoming recipient; that
           
is, if an MX record for host foo.com points to your site,
           
you will accept and relay mail addressed to foo.com.  See
           
description below for more information before using this
           
feature.  Also, see the KNOWNBUGS entry regarding bestmx
           
map lookups.
 
           
FEATURE('relay_based_on_MX') does not necessarily allow
           
routing of these messages which you expect to be allowed,
           
if route address syntax (or %-hack syntax) is used.  If
           
this is a problem, add entries to the access-table or use
           
FEATURE('loose_relay_check').
 
MAILER(smtp)dnl  
MAILER(procmail)dnl
These
describe the mailers used at the default CS site.  The local
mailer
is always included automatically.  Beware: MAILER declarations
should
always be at the end of the configuration file.  The general
rules
are that the order should be:
 
local      
The local and prog mailers.  You will almost always
           
need these; the only exception is if you relay ALL
           
your mail to another site.  This mailer is included
           
automatically.
 
smtp       
The Simple Mail Transport Protocol mailer.  This does
           
not hide hosts behind a gateway or another other
           
such hack; it assumes a world where everyone is
           
running the name server.  This file actually defines
           
five mailers: "smtp" for regular (old-style) SMTP to
           
other servers, "esmtp" for extended SMTP to other
           
servers, "smtp8" to do SMTP to other servers without
           
converting 8-bit data to MIME (essentially, this is
           
your statement that you know the other end is 8-bit
           
clean even if it doesn't say so), "dsmtp" to do on
           
demand delivery, and "relay" for transmission to the
           
RELAY_HOST, LUSER_RELAY, or MAIL_HUB.
 
pop        
Post Office Protocol.
 
procmail   
An interface to procmail (does not come with sendmail).
           
This is designed to be used in mailertables.  For example,
           
a common question is "how do I forward all mail for a given
           
domain to a single person?".  If you have this mailer
           
defined, you could set up a mailertable reading:
                 
host.com    procmail:/etc/procmailrcs/host.com
           
with the file /etc/procmailrcs/host.com reading:
                 
:0    # forward mail for host.com
                 
! -oi -f $1 person@other.host
           
This would arrange for (anything)@host.com to be sent
           
to person@other.host.  Within the procmail script, $1 is
           
the name of the sender and $2 is the name of the recipient.
           
If you use this with FEATURE('local_procmail'), the FEATURE
           
should be listed first.
 
           
Of course there are other ways to solve this particular
           
problem, e.g., a catch-all entry in a virtusertable.
 
Cwlocalhost.localdomain