Raspberry Pi Email Server

raspberry-pi-email-server.png

The RasPi’s small size and low power consumption make it an ideal choice for use as a home email server. After trying a couple of different pieces of software, I finally found an excellent combination: Postfix with Dovecot and Squirrelmail, plus Spamasssassin and Sieve for spam filtering.

There are many, many tutorials out there for the first trilogy of programs, but since the configuration is slightly different for each distribution I kept coming unstuck when setting mine up on the Pi. Having finally got mine configured properly, I’ve put together a set of 5 tutorials, which will take you from a vanilla Raspbian image to a fully functioning email server in no time.

When writing the tutorial I made an effort to explain what each setting does instead of just dumping commands. With a bit of luck at the end of the process you’ll not only have a working server, you’ll understand how it works… without having to wade through reams of documentation like I did!

If you follow the tutorials from start to finish, here’s what you’ll end up with:

  1. An email server that you can run 24/7/365 for under £5 of electricity per year
  2. Personalised email address like you@yourdomain.com (requires you to have registered a domain name with a registrar like namecheap.com - see my DNS basics tutorial)
  3. The ability to connect from anywhere, and read & send email, using a secure IMAP connection on your phone, tablet or computer
  4. Log in to webmail using any web browser on a secure HTTPS connection, read & send email
  5. Complete control over your personal communication. Your emails are stored on YOUR server, and nobody is scanning them to sell you adverts.
  6. Smart spam filtering with Spamassassin
  7. Customisable mail sorting with Sieve rules

Postfix, the Mail Transfer Agent

Postfix Logo
Postfix is the program that lets you send and receive email using Simple Mail Transfer Protocol (SMTP). Whilst you, the user, may connect to your email server using IMAP (on port 143 or 993), or POP (on port 110 or 995), email servers talk to each other using SMTP on port 25.

So, this is the basic core of the server. Without it, you wouldn’t be able to send or receive any emails!

I’ve covered the setup here:
Raspberry Pi Email Server Part 1: Postfix

Dovecot, the POP/IMAP Server

dovecotLogo-300x130_0.png
Dovecot is used for two things:

  1. It provides you with IMAP functionality
  2. It checks that you are who you say you are using Simple Authentication and Security Layer (SASL) before you send or fetch mail

If you’re not interested in connecting with IMAP on your devices, you still need Dovecot. Not only is it doing SASL for you, but Squirrelmail connects using IMAP in order to provide you with webmail.

I’ve covered Dovecot installation and configuration here:
Raspberry Pi Email Server Part 2: Dovecot

Squirrelmail, for Webmail

Squirrelmail Logo
Squirrelmail is handy because it allows you to check your email in any browser, from anywhere.

Of the first three, it’s probably the easiest to configure. I’ve covered it here:
Raspberry Pi Email Server Part 3: Squirrelmail

Spamassassin, for Marking Spam

Spamassassin Logo
Spamassassin is the program that we will use to audit incoming mail and decide whether or not it’s spam. Spamassassin doesn’t actually sort the mail into the spam folder, it only changes information in the headers based on the results of the scan. I’ve covered it here: Raspberry Pi Email Server Part 4: Spam Detection with Spamassassin.

LMTP & Sieve for Spam Sorting & Mailbox Organisation

After Spamassassin has checked incoming mail to see if it’s spam or not, we need another program to sort it into the right mail folder. This final step will be done with Dovecot’s Local Mail Transfer Protocol (LMTP) daemon and a Sieve plugin.

Sieve is a simple programming language that allows users to define what to do with incoming email based on a predefined set of rules – think “if the header contains this flag, put it in the spam folder” kind of thing and you’ll get the gist. Aside from spam filtering, Sieve can be used to automatically sort & de-clutter your inbox. These steps are covered in the final tutorial: Raspberry Pi Email Server Part 5: Spam Sorting with LMTP & Sieve

Enjoy! I’d love to hear how you get on, so leave a comment below :)

Type: 

Comments

Hi Sam,

Thanks a lot for getting back to me.

Can the mail server, configured by the combination of postfix/dovecot be accessed using other email applications? Such as Microsoft Outlook, or from mobile devices, or even Thunderbird?

I am asking this just to make sure there would be an alternative if Squirrelmail is out of the list.

Saeed

Saeed,

Yes, you can use any mail client that supports SMTP and IMAP (outlook should be fine). Some people using Thunderbird on Windows have reported TLS issues so I wouldn't recommend it any more. K9 mail on Android is great, mail clients on other devices should work fine too.

Squirrelmail is a web app though, so none of those are really a like-for-like replacement for it. Roundcube and rainloop are alternatives for webmail.

Sam

Hi Sam,

Thanks again for you prompt reply.

I have finished the postfix configuration. However, there is one thing that didn't work as expected, and that's the ssl certificate configuration.

After running the command below:
openssl s_client -connect localhost:465 -quiet -CApath /etc/ssl/certs
I still got the error: 'verify error:num=18:self signed certificate'.

Everything before the command above, resulted as expected. Can you please advise?

Kind regards,
Saeed

That's the expected output if you're using a self-signed cert, as explained in the tutorial:

We got some errors because the certificate is self-signed (it's not signed by a certificate that is in the trusted root store on the server) but this is OK because we're just using the certificate for testing for now. When you come back later to set up a proper certificate, you can use this command to verify it. The -CApath option tells openssl where the trusted certificates are stored on your system:

Sam

Hey Sam -

Great tutorial, very easy to follow. I can receive emails with no issues. I have setup imap to receive and send emails with no issues. However, I am unable to send emails. The /var/log/mail.log provides the following output:

postfix/smtp[16475]: connect to fmailhost01.isp.att.net[204.127.217.101]:25: Connection timed out

As you can see, I am using the following relay: relayhost = fmailhost01.isp.att.net (my interest is att, following their instructions from https://www.att.com/esupport/postmaster/mail-servers/index.jsp)

If i leave the relayhost blank it provides a similar error.

postfix/smtp[16540]: connect to alt1.gmail-smtp-in.l.google.com[209.85.232.26]:25: Connection timed out

I called at&t and they indicated that port 25 is not being filtered on their end. Any ideas on how to fix this?

Michael

Sorry, I don't know. Looks like port blocking to me.

Is your setup fairly standard (simple home router & modem with mostly default settings?). I'm wondering if you could have a firewall on your router that is blocking outbound traffic as well as the usual setup, which is to block incoming.

Sam

I usually use Publisher to send out mass emails. What program would i use on the Rasberry Pi? Thanking you in advance.

Hi Sam,

I hosted my domain with Google Domains and have forwarded custom email addresses to my Gmail. I want to fully implement SPF, DKIM, and DMARC, which I did with services like SendinBlue's SMTP server. The DMARC auth_results for both SPF and DKIM pass but the SPF failed under policy_evaluated due to the difference in Mail From and Header From. I would like to enforce DMARC to pass with both SPF and DKIM evaluated as pass, so I am considering implementing my own SMTP server for sending mail only. In this case, do I only need to set up Postfix?

Regards,
Anson

Pages

Add new comment