The sendmail configuration that ships with FreeBSD is
designed for sites that connect directly to the Internet. Sites that wish to exchange
their mail via UUCP must install another sendmail
configuration file.
Tweaking /etc/mail/sendmail.cf manually is an advanced
topic. sendmail version 8 generates config files via m4(1) preprocessing,
where the actual configuration occurs on a higher abstraction level. The m4(1) configuration
files can be found under /usr/src/usr.sbin/sendmail/cf.
If you did not install your system with full sources, the sendmail configuration set has been broken out into a separate
source distribution tarball. Assuming you have your FreeBSD source code CDROM mounted,
do:
# cd /cdrom/src
# cat scontrib.?? | tar xzf - -C /usr/src/contrib/sendmail
This extracts to only a few hundred kilobytes. The file README in the cf directory can serve as a
basic introduction to m4(1)
configuration.
The best way to support UUCP delivery is to use the mailertable feature. This creates a database that sendmail can use to make routing decisions.
First, you have to create your .mc file. The directory /usr/src/usr.sbin/sendmail/cf/cf contains a few examples. Assuming
you have named your file foo.mc, all you need to do in order to
convert it into a valid sendmail.cf is:
# cd /usr/src/usr.sbin/sendmail/cf/cf
# make foo.cf
# cp foo.cf /etc/mail/sendmail.cf
A typical .mc file might look like:
VERSIONID(`Your version number') OSTYPE(bsd4.4)
FEATURE(accept_unresolvable_domains)
FEATURE(nocanonify)
FEATURE(mailertable, `hash -o /etc/mail/mailertable')
define(`UUCP_RELAY', your.uucp.relay)
define(`UUCP_MAX_SIZE', 200000)
define(`confDONT_PROBE_INTERFACES')
MAILER(local)
MAILER(smtp)
MAILER(uucp)
Cw your.alias.host.name
Cw youruucpnodename.UUCP
The lines containing accept_unresolvable_domains, nocanonify, and confDONT_PROBE_INTERFACES features will prevent any usage of the
DNS during mail delivery. The UUCP_RELAY clause is needed to
support UUCP delivery. Simply put an Internet hostname there that is able to handle .UUCP
pseudo-domain addresses; most likely, you will enter the mail relay of your ISP
there.
Once you have this, you need an /etc/mail/mailertable file.
If you have only one link to the outside that is used for all your mails, the following
file will suffice:
#
# makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
. uucp-dom:your.uucp.relay
A more complex example might look like this:
#
# makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
#
horus.interface-business.de uucp-dom:horus
.interface-business.de uucp-dom:if-bus
interface-business.de uucp-dom:if-bus
.heep.sax.de smtp8:%1
horus.UUCP uucp-dom:horus
if-bus.UUCP uucp-dom:if-bus
. uucp-dom:
The first three lines handle special cases where domain-addressed mail should not be
sent out to the default route, but instead to some UUCP neighbor in order to ``shortcut''
the delivery path. The next line handles mail to the local Ethernet domain that can be
delivered using SMTP. Finally, the UUCP neighbors are mentioned in the .UUCP
pseudo-domain notation, to allow for a uucp-neighbor !recipient
override of the default rules. The last line is always a single dot, matching everything
else, with UUCP delivery to a UUCP neighbor that serves as your universal mail gateway to
the world. All of the node names behind the uucp-dom: keyword
must be valid UUCP neighbors, as you can verify using the command uuname.
As a reminder that this file needs to be converted into a DBM database file before
use. The command line to accomplish this is best placed as a comment at the top of the
mailertable file. You always have to execute this command each
time you change your mailertable file.
Final hint: if you are uncertain whether some particular mail routing would work,
remember the -bt option to sendmail.
It starts sendmail in address test mode; simply enter 3,0, followed by the address you wish to test for the mail routing.
The last line tells you the used internal mail agent, the destination host this agent
will be called with, and the (possibly translated) address. Leave this mode by typing Ctrl+D.
% sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,0 foo@example.com
canonify input: foo @ example . com
...
parse returns: $# uucp-dom $@ your.uucp.relay $: foo < @ example . com . >
> ^D