I wanted to quickly jot down my notes on how to get nullmailer to route all local mail to my main user, for example for cron. This uses procmail. The mail client is neomutt.
Be sure to add a local mailbox or two to ~/.neomuttrc or similar files: mailboxes +local +JunkLook for Nullmailer's protocol binary files. On Ubuntu this is at /usr/lib/nullmailer/, In this directory, write the following file and chmod +x it:
#!/bin/bash # Copyright 2018,2024 M Bazz <bazz@bazz1.com> # # Mail messages come in on fd3. Capture into a var, trim it so procmail # recognizes it (nullmailer has the first 2 lines sender/receiver and a # blank line, which procmail doesn't recognize). # This is the mail as nullmailer expects it. See `man nullmailer-queue` to # understand that format. mail="`cat <&3`" cat > /tmp/mail.log <<<"$mail" n=0 # trigger for when blank line is found (sender/recipients lines done) { while IFS= read -r line; do if test $n = 0 ; then test -z "$line" && n=1 else echo "$line" fi done | /usr/bin/procmail -m /etc/procmailrcs/bazz ; } <<<"$mail"
let's look at the next file.
/etc/procmailrcs/bazz:VERBOSE=1 SHELL=/bin/sh PATH=$HOME/.local/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin MAILDIR=$HOME/Maildir INBOX=$MAILDIR/bazz1/INBOX LIST=$MAILDIR/list NEWS=$MAILDIR/news DEFAULT=$MAILDIR/Junk/ LOGFILE=/var/log/bazz/procmail.log LOG="" #octal u=rw,g=rw UMASK=007 :0 * ^(From|To|Cc).*@(localhost|beastlin.int.bazz1.com) { :0cWhi | newmail-hook local :0 $MAILDIR/local/ }
Note that if the file is a symlink, then the symlink itself's ownership must be changed using `chown -h`
Essentially, if the rule matches then it goes into the local inbox, but if it doesn't match at all then it goes into the Junk folder.
/etc/nullmailer/remoteslocalhost localhost
This says mail destined to the localhost will use the "localhost" protocol script listed earlier.
That's essentially it. Hopefully these quick notes are helpful.