| stage | Systems |
|---|---|
| group | Distribution |
| info | To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments |
This document takes you through the steps of setting up a basic Postfix mail server with IMAP authentication on Ubuntu, to be used with incoming email.
The instructions make the assumption that you are using the email address incoming@gitlab.example.com, that is, username incoming on host gitlab.example.com. Don't forget to change it to your actual host when executing the example code snippets.
- Open up port 25 on your server so that people can send email into the server over SMTP.
- If the mail server is different from the server running GitLab, open up port 143 on your server so that GitLab can read email from the server over IMAP.
-
Install the
postfixpackage if it is not installed already:sudo apt-get install postfix
When asked about the environment, select 'Internet Site'. When asked to confirm the hostname, make sure it matches
gitlab.example.com. -
Install the
mailutilspackage.sudo apt-get install mailutils
-
Create a user for incoming email.
sudo useradd -m -s /bin/bash incoming
-
Set a password for this user.
sudo passwd incoming
Be sure not to forget this, you will need it later.
-
Connect to the local SMTP server:
telnet localhost 25
You should see a prompt like this:
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 gitlab.example.com ESMTP Postfix (Ubuntu)If you get a
Connection refusederror instead, verify thatpostfixis running:sudo postfix status
If it is not, start it:
sudo postfix start
-
Send the new
incominguser an email to test SMTP, by entering the following into the SMTP prompt:ehlo localhost mail from: root@localhost rcpt to: incoming@localhost data Subject: Re: Some issue Sounds good! . quitNOTE: The
.is a literal period on its own line.If you receive an error after entering
rcpt to: incoming@localhostthen your Postfixmy_networkconfiguration is not correct. The error will say 'Temporary lookup failure'. See Configure Postfix to receive email from the Internet._ -
Check if the
incominguser received the email:su - incoming mail
You should see output like this:
"/var/mail/incoming": 1 message 1 unread >U 1 root@localhost 59/2842 Re: Some issueQuit the mail app:
q
-
Sign out of the
incomingaccount, and go back to beingroot:logout
Courier, which we install later to add IMAP authentication, requires mailboxes to have the Maildir format, rather than mbox.
-
Configure Postfix to use Maildir-style mailboxes:
sudo postconf -e "home_mailbox = Maildir/" -
Restart Postfix:
sudo /etc/init.d/postfix restart
-
Test the new setup:
-
Follow steps 1 and 2 of Test the out-of-the-box setup.
-
Check if the
incominguser received the email:su - incoming MAIL=/home/incoming/Maildir mail
You should see output like this:
"/home/incoming/Maildir": 1 message 1 unread >U 1 root@localhost 59/2842 Re: Some issueQuit the mail app:
q
If
mailreturns an errorMaildir: Is a directorythen your version ofmaildoesn't support Maildir style mailboxes. Installheirloom-mailxby runningsudo apt-get install heirloom-mailx. Then, try the above steps again, substitutingheirloom-mailxfor themailcommand. -
-
Sign out of the
incomingaccount, and go back to beingroot:logout
-
Install the
courier-imappackage:sudo apt-get install courier-imap
And start
imapd:imapd start
-
The
courier-authdaemonisn't started after installation. Without it, IMAP authentication fails:sudo service courier-authdaemon start
You can also configure
courier-authdaemonto start on boot:sudo systemctl enable courier-authdaemon
-
Let Postfix know about the domains that it should consider local:
sudo postconf -e "mydestination = gitlab.example.com, localhost.localdomain, localhost" -
Let Postfix know about the IPs that it should consider part of the LAN:
Let's assume
192.168.1.0/24is your local LAN. You can safely skip this step if you don't have other machines in the same local network.sudo postconf -e "mynetworks = 127.0.0.0/8, 192.168.1.0/24" -
Configure Postfix to receive mail on all interfaces, which includes the internet:
sudo postconf -e "inet_interfaces = all" -
Configure Postfix to use the
+delimiter for sub-addressing:sudo postconf -e "recipient_delimiter = +" -
Restart Postfix:
sudo service postfix restart
-
Test SMTP under the new setup:
-
Connect to the SMTP server:
telnet gitlab.example.com 25
You should see a prompt like this:
Trying 123.123.123.123... Connected to gitlab.example.com. Escape character is '^]'. 220 gitlab.example.com ESMTP Postfix (Ubuntu)If you get a
Connection refusederror instead, make sure your firewall is set up to allow inbound traffic on port 25. -
Send the
incominguser an email to test SMTP, by entering the following into the SMTP prompt:ehlo gitlab.example.com mail from: root@gitlab.example.com rcpt to: incoming@gitlab.example.com data Subject: Re: Some issue Sounds good! . quitNOTE: The
.is a literal period on its own line. -
Check if the
incominguser received the email:su - incoming MAIL=/home/incoming/Maildir mail
You should see output like this:
"/home/incoming/Maildir": 1 message 1 unread >U 1 root@gitlab.example.com 59/2842 Re: Some issueQuit the mail app:
q
-
Sign out of the
incomingaccount, and go back to beingroot:logout
-
-
Test IMAP under the new setup:
-
Connect to the IMAP server:
telnet gitlab.example.com 143
You should see a prompt like this:
Trying 123.123.123.123... Connected to mail.gitlab.example.com. Escape character is '^]'. - OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2011 Double Precision, Inc. See COPYING for distribution information.
-
Sign in as the
incominguser to test IMAP, by entering the following into the IMAP prompt:a login incoming PASSWORDReplace PASSWORD with the password you set on the
incominguser earlier.You should see output like this:
a OK LOGIN Ok. -
Disconnect from the IMAP server:
a logout
-
If all the tests were successful, Postfix is all set up and ready to receive email! Continue with the incoming email guide to configure GitLab.
This document was adapted from https://help.ubuntu.com/community/PostfixBasicSetupHowto, by contributors to the Ubuntu documentation wiki.