I’m in the process of moving my personal hosting from one VPS to another ( I host with Linode and am buying a new virtual machine with a similar spec to my current one for half the monthly price ) and I decided to rearrange my home email. My old setup was:
Internet –> Exim on VPS -> Download via fetchmail to home -> Send to spamassassin and dspam at home -> filtering into mboxes on home workstation -> read via alpine
The main disadvantages of this were:
- Had to ssh into home to read email (couldn’t read on my phone)
- Hard to view images in email or HTML emails
- Sending via my ISP was unreliable and they are implementing filters
- No notification of new email
So I decided to make some changes.
Internet -> Postfix on VPS -> procmail to spamassassin on VPS -> procmail to maildirs -> read via imap
This setup is a lot simpler than the previous one and a bit more mainstream.
- Since the email is online via imap I can read it directly from alpine or my phone (or another client)
- Online running one anti-spam program (spamasaasin) instead of two (dspam and spamassassin)
- Email operations on one server (the VPS) insead of 3 (VPS, workstation, home virtual machine)
- Sending email straight via VPS instead of home VM and my ISP’s mail server
Details of my setup
There are a lot of HOWTOs on getting email to work via postfix and dovecot. I decided that the main feature I needed were virtual aliases for my domains. I also decided that since I only had a few mailboxes (mine own and two others) I could just create accounts on the server rather than maintain virtual users in postfix/dovecot. The server is running Ubuntu 14.04
Roughly speaking I followed the advice on these two pages by Rimuhosting:
I added these lines to my Postfix’s main.cf
virtual_alias_maps = hash:/etc/postfix/virtual home_mailbox = Maildir/ mailbox_command = /usr/bin/procmail -a "$EXTENSION" DEFAULT=$HOME/Maildir/ MAILDIR=$HOME/Maildir
Theses lines tell postfix to (1) use the virtual file (see below) (2) deliver to Maildirs (3) use procmail for delivery.
and create a /etc/postfix/virtual file like:
darkmere.gen.nz 20140720 firstname.lastname@example.org email@example.com firstname.lastname@example.org email@example.com
The first line indicates the domain should be used (this option is a little hidden in the virtual manpage) and then their are various addresses. simon-mail is a noshell account and cyan is the name of the server to so the email is delivered locally to it.
The simon-mail account just has a simple .procmailrc file with my various filters and a Maildir to store the email. Spam processing is called by procmail via:
:0 fW * < 280000 | spamc -u simon-mail -d localhost :0: * ^X-Spam-Status: Yes, score=([5-9]|1[0-9]|[2-9][0-9]) .junk/
which just puts all email that looks like spam into a junk folder (which I can check now and then until I’m happy with the filters).
Dovecot for imap worked out of the box except I had to tell it the location of my email. I just edited the file /etc/dovecot/conf.d/10-mail.conf and changed the mail_location setting to:
mail_location = maildir:~/Maildir
For sending email I pretty much followed this guide directly.
Overall it wasn’t too hard. The main problem was the fact that there were so many guides (I read over a dozen) each of which differed slightly and which were in many cases designed more much larger sites. I’ve currently got the setup in final testing (it is getting a copy of all my incoming email) and intended to switch over soon. In the short term I’m keeping my old mail folders (all 752 of them adding up to 1.8GB) locally at home but may move them at a later date.