Contributed by Christopher
Shumway.
sendmail(8) is the
default Mail Transfer Agent (MTA) in FreeBSD. sendmail's job
is to accept mail from Mail User Agents (MUA) and
deliver it to the appropriate mailer as defined by its configuration file. sendmail can also accept network connections and deliver mail to
local mailboxes or deliver it to another program.
sendmail uses the following configuration files:
The access database defines what host(s) or IP addresses have access to the local mail
server and what kind of access they have. Hosts can be listed as OK
, REJECT
, RELAY
or simply passed to sendmail's
error handling routine with a given mailer error. Hosts that are listed as OK
, which is the default, are allowed to send mail to this host as
long as the mail's final destination is the local machine. Hosts that are listed as REJECT
are rejected for all mail connections. Hosts that have the
RELAY
option for their hostname are allowed to send mail for
any destination through this mail server.
Example 26-1. Configuring the sendmail Access Database
cyberspammer.com 550 We do not accept mail from spammers
FREE.STEALTH.MAILER@ 550 We do not accept mail from spammers
another.source.of.spam REJECT
okay.cyberspammer.com OK
128.32 RELAY
In this example we have five entries. Mail senders that match the left hand side of
the table are affected by the action on the right side of the table. The first two
examples give an error code to sendmail's error handling
routine. The message is printed to the remote host when a mail matches the left hand side
of the table. The next entry rejects mail from a specific host on the Internet, another.source.of.spam. The next entry accepts mail connections from
a host okay.cyberspammer.com, which is more exact than the cyberspammer.com line above. More specific matches override less
exact matches. The last entry allows relaying of electronic mail from hosts with an IP
address that begins with 128.32. These hosts would be able to
send mail through this mail server that are destined for other mail servers.
When this file is updated, you need to run make in /etc/mail/ to update the database.
The aliases database contains a list of virtual mailboxes that are expanded to other
user(s), files, programs or other aliases. Here are a few examples that can be used in
/etc/mail/aliases:
Example 26-2. Mail Aliases
root: localuser
ftp-bugs: joe,eric,paul
bit.bucket: /dev/null
procmail: "|/usr/local/bin/procmail"
The file format is simple; the mailbox name on the left side of the colon is expanded
to the target(s) on the right. The first example simply expands the mailbox root to the mailbox localuser, which is
then looked up again in the aliases database. If no match is found, then the message is
delivered to the local user localuser. The next example shows a
mail list. Mail to the mailbox ftp-bugs is expanded to the
three local mailboxes joe, eric, and
paul. Note that a remote mailbox could be specified as <[email protected]>
. The next example shows writing mail to a
file, in this case /dev/null. The last example shows sending
mail to a program, in this case the mail message is written to the standard input of /usr/local/bin/procmail through a UNIX® pipe.
When this file is updated, you need to run make in /etc/mail/ to update the database.
This is a list of hostnames sendmail(8) is to
accept as the local host name. Place any domains or hosts that sendmail is to be receiving mail for. For example, if this mail
server was to accept mail for the domain example.com and the host
mail.example.com, its local-host-names
might look something like this:
example.com
mail.example.com
When this file is updated, sendmail(8) needs to
be restarted to read the changes.
sendmail's master configuration file, sendmail.cf controls the overall behavior of sendmail, including everything from rewriting e-mail addresses to
printing rejection messages to remote mail servers. Naturally, with such a diverse role,
this configuration file is quite complex and its details are a bit out of the scope of
this section. Fortunately, this file rarely needs to be changed for standard mail
servers.
The master sendmail configuration file can be built from m4(1) macros that
define the features and behavior of sendmail. Please see /usr/src/contrib/sendmail/cf/README for some of the details.
When changes to this file are made, sendmail needs to be
restarted for the changes to take effect.
The virtusertable maps mail addresses for virtual domains
and mailboxes to real mailboxes. These mailboxes can be local, remote, aliases defined in
/etc/mail/aliases or files.
In the above example, we have a mapping for a domain example.com. This file is processed in a first match order down the
file. The first item maps <[email protected]>
to the
local mailbox root. The next entry maps <[email protected]>
to the mailbox postmaster on the host noc.example.net.
Finally, if nothing from example.com has matched so far, it will
match the last mapping, which matches every other mail message addressed to someone at
example.com. This will be mapped to the local mailbox joe.