## 20.7 SMTP with UUCP The **sendmail** configuration that ships with DragonFly 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)](http://leaf.dragonflybsd.org/cgi/web-man?command#m4§ion1) preprocessing, where the actual configuration occurs on a higher abstraction level. The [m4(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=m4§ion=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 DragonFly 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)](http://leaf.dragonflybsd.org/cgi/web-man?command#m4§ion1) 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 CategoryHandbook CategoryHandbook-email