The objective of this post is to show a simple setup of Postfix and Dovecot for Ubuntu 14.04 LTS to enable command-line scripts on a box on a local network to send e-mail to itself and then retrieve those e-mails over POP3 using a normal e-mail client. This is NOT a full-blown e-mail server setup. It is a notification message drop with POP3 access. The e-mail client will only be able to retrieve e-mails from the box (not send them), which completely eliminates the possibility of the box accidentally turning into a remote mail relay.
First, install Postfix and Dovecot:
sudo apt-get install postfix sudo apt-get install dovecot-pop3d(I don't recommend the 'mail-stack-delivery' package. It includes IMAP support, which I'm not a fan of for something so basic. Only install the packages you need. I installed 'mail-stack-delivery' and decided it wasn't the right choice and cleaning up the garbage it left behind took longer than it should have.)
Next, set up a user account for handling the e-mails:
sudo adduser cronmailName the account to be whatever you want.
Edit '/etc/postfix/main.cf'. Change these options:
inet_interfaces = 127.0.0.1 mailbox_command = /usr/lib/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"That isolates SMTP to localhost only access and routes incoming messages to Dovecot. That last part is important or there will be major hair-pulling as messages get routed to the wrong place.
Next, verify the Dovecot configuration with 'dovecot -n'. If anything is off, visit '/etc/dovecot/conf.d/' and use grep to find the offending bits.
Restart Postfix and Dovecot:
sudo postfix reload sudo restart dovecotNow verify that only the ports you want open are open and that SMTP is only available on 127.0.0.1:
sudo netstat -anptOnce you are satisfied, set up your e-mail client and use the new user you set up (cronmail@yourservername).
Finally, send an e-mail to the new e-mail account. If you use the Ultimate E-mail Toolkit, it is important to remember to disable the DNS lookup via 'usedns':
$headers = SMTP::GetUserAgent("Thunderbird"); $options = array( "headers" => $headers, "textmessage" => $message . "\n\nSent by [yourservername]", "server" => "localhost", "secure" => false, "usedns" => false, "username" => "cronmail" "password" => "*******" ); SMTP::SendEmail("cronmail@yourservername", "cronmail@yourservername", "[yourservername] Some Notification", $options);And that's it! Hopefully this saves someone a few hours. It isn't a full-blown mail server.