Relay email (nullmailer)

From Alpine Linux

Overview

Nullmailer is lightweight and simple MTA (mail transport agent) which allows you to relay local emails to another server. This is useful if you are for in example running a private server at home and just want to relay notifications from cron etc. to your external mailbox via your ISPs mail server. Nullmailer also allows you to rewrite the envelope sender which is needed to pass spam checks that many ISPs are nowadays doing.

Installation

Nullmailer can be found only in the testing branch. How to Enable the Testing Repository

apk add nullmailer@testing

Configuration

Nullmailer is configured using individual files under /etc/nullmailer/, one file per setting.

When mail is sent to any local user e.g. "root", "me@localhost" etc. then the mail can be sent to some external address or addresses (as a comma separated list) instead:

Contents of /etc/nullmailer/adminaddr

me@example.com

When nullmailer relays mail to remote server then the envelope sender can be overridden because mail is often rejected if the envelope sender contains a non-existent domain like root@localhost.example (note that the envelope sender is not the same as the From: header, which remains root@localhost.example, but that is not typically rejected):

Contents of /etc/nullmailer/allmailfrom

me@example.com

Whenever nullmailer deals with addresses without a hostname or domain then defaulthost and defaultdomain files can be used to set defaults, however this can be also done using one file. So mail From: me and To: me will become From: me@localhost.example and To: me@localhost.example. Note that this applies to headers, which informational only and shown in the mail client. The envelope sender and recipient must still be set correctly using configuration files explained above.

Ideally you would own and control a domain you could use but if not, then set it to a guaranteed non-existing domain like localhost.example. Do not just pick some random non-existing domain because somebody could register it in the future:

Contents of /etc/nullmailer/me

localhost.example

To configure the relay server that mails are sent to, add one line per remote server. Typically this would be your ISPs mail server. Optionally, nullmailer supports different authentication schemes:

Contents of /etc/nullmailer/remotes

smtp.example.com smtp smtpa.example.com smtp --port=2525 --user=user --pass=pass smtpa.example.com smtp --port=2525 --auth-login --user=user --pass=pass

Logging

Nullmailer only logs to stdout and stderr which means syslog cannot be used trivially. Instead, it is possible to make OpenRC write stdout and stderr to log files:

Contents of /etc/conf.d/nullmailer

output_log="/var/log/mail.log" error_log="/var/log/mail.err"

As nullmailer runs as a user of the same name, it cannot create log files by itself. Just create the log files manually instead:

touch /var/log/mail.log /var/log/mail.err chown nullmailer:adm /var/log/mail.log /var/log/mail.err chmod 0640 /var/log/mail.log /var/log/mail.err

Testing

To test configuration just send out few test emails to root and to some existing address, etc.:

echo -e "Subject: Nullmailer testing\n\nSending to root." | sendmail root echo -e "Subject: Nullmailer testing\n\nSending to me." | sendmail me@example.com