This tutorial explains how to setup mail server on ubuntu 14.04 using postfix,dovecot and squirrelmail.
» Postfix ( for sending )
» Dovecot ( for receiving )
» Squirrelmail ( for webmail access ).
Here i have used mail.krizna.com for hostname and krizna.com for Domain . please replace with your domain .
Setup mail server on ubuntu 14.04
» Installing and configuring postfix
» Installing and configuring dovecot
» Installing and configuring squirrelmail
» Installing and configuring postfix
Step 1 » Assign static IP and hostname and add a host entry for the host name .
Assign hostname in /etc/hostname
mail.krizna.com
Add a hostentry in /etc/hosts
192.168.1.10 mail.krizna.com
Step 2 » Update the repositories.
krizna@mail:~$ sudo apt-get update
Step 3 » Install postfix and dependencies . Press enter for all prompted questions during installation. we will do that in the next step.
krizna@mail:~$ sudo apt-get install postfix
Step 4 » After installation issue the below command to configure postfix.krizna@mail:~$ sudo dpkg-reconfigure postfix
Now you will be prompted for set of details . choose the following values and replace krizna.com with your domain name.
1. Internet Site
2. krizna.com
3. krizna
4. krizna.com, localhost.localdomain, localhost
5. No
6. 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
7. 0
8. +
9. all
Step 5 » Now configure Postfix for SMTP-AUTH using Dovecot SASL by adding the below lines to postfix config file /etc/postfix/main.cf .
home_mailbox = Maildir/
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
Step 6 » Now generate a digital certificate for tls. Issue the commands one by one and provide details as per your domain.
krizna@mail:~$ openssl genrsa -des3 -out server.key 2048
krizna@mail:~$ openssl rsa -in server.key -out server.key.insecure
krizna@mail:~$ mv server.key server.key.secure
krizna@mail:~$ mv server.key.insecure server.key
krizna@mail:~$ openssl req -new -key server.key -out server.csr
krizna@mail:~$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
krizna@mail:~$ sudo cp server.crt /etc/ssl/certs
krizna@mail:~$ sudo cp server.key /etc/ssl/private
Step 7 » Now configure certificate path
krizna@mail:~$ sudo postconf -e 'smtpd_tls_key_file = /etc/ssl/private/server.key'
krizna@mail:~$ sudo postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/server.crt'
Step 8 » Open /etc/postfix/master.cf file and uncomment below lines to enable smtps ( 465 ) and submission ( 587 ) .
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING smtps inet n - n - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING
Step 9 » Now install Dovecot SASL by typing the below command.
krizna@mail:~$ sudo apt-get install dovecot-common
Issue the following values for the prompts during installation.
1. yes
2. mail.krizna.com
Step 10 » Make changes to the files as follows.
Open /etc/dovecot/conf.d/10-master.conf file and find # Postfix smtp-auth line ( line no:95 ) and add the below lines .
# Postfix smtp-auth
Open /etc/dovecot/conf.d/10-auth.conf file and find (line no:100)
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
auth_mechanisms = plain
and replace auth_mechanisms = plain login
Step 11 » Restart postfix and dovecot services
krizna@mail:~$ sudo service postfix restart
krizna@mail:~$ sudo service dovecot restart
Step 12 » Now test SMTP-AUTH and smtp/pop3 port access .
Type the below command and should get below response.
krizna@mail:~$ telnet mail.krizna.com smtp
now type ehlo mail.krizna.com and should get below response , please make sure you get those bolded lines .
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.kriznaa.com ESMTP Postfix (Ubuntu)
ehlo mail.krizna.com
and try the same with port 587 (telnet mail.krizna.com 587).
250-mail.krizna.com
--------
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
---------
250 DSN
Postfix configuration is over, continue for dovecot installation.
» Installing and configuring dovecot
Step 12 » Install dovecot using the below command
krizna@mail:~$ sudo apt-get install dovecot-imapd dovecot-pop3d
Step 13 » Now configure mailbox. Open /etc/dovecot/conf.d/10-mail.conf file and find (Line no:30 )
mail_location = mbox:~/mail:INBOX=/var/mail/%u
Replace with
mail_location = maildir:~/Maildir
Step 14 » Now change pop3_uidl_format . Open /etc/dovecot/conf.d/20-pop3.conf file and find and uncomment the below line ( Line no : 50 )
pop3_uidl_format = %08Xu%08Xv
Step 15 » Now enable SSL . Open /etc/dovecot/conf.d/10-ssl.conf file and find and uncomment the below line ( Line no : 6 )
ssl = yes
Step 16 »Restart dovecot service.
krizna@mail:~$ sudo service dovecot restart
Step 17 » Now test pop3 and imap port access using the telnet command.
krizna@mail:~$ telnet mail.krizna.com 110
Repeat the same for 995,993,143 ports.
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot (Ubuntu) ready.
OR check for listening ports using netstat command .
krizna@mail:~$ netstat -nl4
you should get the result like below.
Step 18 » Create some users and check using mail clients like thunderbird or outlook
krizna@mail:~$ sudo useradd -m bobby -s /sbin/nologin
krizna@mail:~$ sudo passwd bobby
Now mail server is ready, you can send and receive mail using the server. Continue for squirrelmail ..
» Installing and configuring squirrelmail
Step 19 » Install squirrelmail using the below command. This will install apache and PHP packages.
krizna@mail:~$ sudo apt-get install squirrelmail
Step 20 » Configure squirrelmail
krizna@mail:~$ sudo squirrelmail-configure
Everything is pre-configured , we just need to change Organization name .
» Press 1 (Organization Preferences) » again press 1 (Organization Name) » Organization Name » Press S » Press Q to quit
Step 19 » Now configure apache to enable squirrelmail .
krizna@mail:~$ sudo cp /etc/squirrelmail/apache.conf /etc/apache2/sites-available/squirrelmail.conf
krizna@mail:~$ sudo a2ensite squirrelmail
Step 20 » Restart Apache service
krizna@mail:~$ sudo service apache2 restart
Step 21 » Now open http://serverIP/squirrelmail in your browser and login using username (bobby) . you can send and receive mail using squirrelmail.
Okay .. its over now ..
Please note when you decide to move server to the production, it is very important to implement Spam filter and antivirus . please check this post for more detail Postfix spamfilter and antivirus implementation
Also see :
» Setup mail server on centos 7
» Setup mail server on centos 6
Excellent tutorial ! I did everything. The squirrel mail is up. I can login but the messages I send are going nowhere. I created an email id as bobby@subdomain.com and I tried sending mail to itself, to gmail – nothing seems to be working. What did I miss ?
thx
Oh crap! It seems most of all posted “Squirrel works” Uhmm, I have done everything no errors, but may I ask, how do I know what is my “URL” for squirrelmail?
“http://serverIP/squirrelmail” don’t work for me :3 HELP PLS
Thanks for the tutorial.
Finally it works in Ubuntu 15 but it took me 2 days to figure out an issue where the incoming email is not available in POP nor IMAP although from the log seen that the SMTP nicely accept the email. I wrongly do step-13 where mail_location is set to mbox:~/Maildir instead of maildir:~/Maildir.
That is exactly the problem what I had. Thank you for letting us know this tiny but important difference.
I can’t receive mail from Gmail , yahoo , But i send mail yahoo, Gmail . But is go to spam
You probably also wrongly did step-13 where mail_location is set to mbox:~/Maildir instead of maildir:~/Maildir. As mentioned in Lion’s post.
root@mail:~# netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:ssh *:* LISTEN 880/sshd
tcp 0 0 *:smtp *:* LISTEN 27536/master
tcp 0 0 *:imaps *:* LISTEN 26864/dovecot
tcp 0 0 *:pop3s *:* LISTEN 26864/dovecot
tcp 0 0 *:mysql *:* LISTEN 977/mysqld
tcp 0 0 *:submission *:* LISTEN 27536/master
tcp 0 0 *:pop3 *:* LISTEN 26864/dovecot
tcp 0 0 *:imap2 *:* LISTEN 26864/dovecot
tcp 0 0 *:urd *:* LISTEN 27536/master
tcp 0 464 mail.remittanceuk.c:ssh 103.41.213.170:50156 ESTABLISHED 4997/0
tcp 0 1691 mail.remittanceuk.c:ssh 222.186.21.208:4956 ESTABLISHED 6745/sshd: [accepte
tcp6 0 0 [::]:ssh [::]:* LISTEN 880/sshd
tcp6 0 0 [::]:smtp [::]:* LISTEN 27536/master
tcp6 0 0 [::]:imaps [::]:* LISTEN 26864/dovecot
tcp6 0 0 [::]:pop3s [::]:* LISTEN 26864/dovecot
tcp6 0 0 [::]:submission [::]:* LISTEN 27536/master
tcp6 0 0 [::]:pop3 [::]:* LISTEN 26864/dovecot
tcp6 0 0 [::]:imap2 [::]:* LISTEN 26864/dovecot
tcp6 0 0 [::]:http [::]:* LISTEN 26842/apache2
tcp6 0 0 [::]:urd [::]:* LISTEN 27536/master
Please help anybody
I can’t receive mail from Gmail , yahoo , But i send mail yahoo, Gmail . But is go to spam
change your dns records, so it contains text that you can grab directly from google for example.
The best tutorial I ever had online. Absolutely genius work Krizn. Many Many Thanks
ERROR: Connection dropped by IMAP server.
http://52.5.117.240/squirrelmail/src/redirect.php
getting this error on squirrelmail .. please helppppp
i am using amazon aws ec2 instance with ubuntu 14.04
why my problem?
telnet: Unable to connect to remote host: Connection refused
ERROR: Could not complete request.
Query: SELECT “INBOX”
Reason Given: [SERVERBUG] Internal error occurred. Refer to server log for more information. [2016-01-28 18:58:56]
everything else works in squirrelmail just inbox not working checked everything wice
any ideas please
i have the error : error connecting to imap server: localhost. 111: connection refused
Great tutorial
works fine. thanks a lot.
Hi Krizna, how to communicate with two different domains(Local) in postfix with dovecot like i want send and receive from xxx@tc.abc.in and yyy@local.xyz.in
same i have dout
AWESOME Post — Thanks!!
Thanks a lot
Amazing tutorial. Saved a lot of time for me. Thanks very much.
Thank you! Superb article.
Everything went on as instructed. I have one query. After setting up the mail server, what values you enter in MX records of the domain hosting service.
Obrigado, parabéns esse tutorial foi único que deu certo para configura Outlook recebe e enviar …
Best tutorial for setting up postfix and dovecot. I refer this page each and every time I setup a new server. Thanks a lot.
Hey Krizna, thanks for the tutorial! Easy to follow but I am having some issues. When I do the telnet mail.example.com 110 step, it connects to my static ip that I setup in /etc/hosts and tells me that I am connected but then it is closed by foreign host. I did netsat and the ports are listening, but when I went back into the dovecot config files and set “ssl = no” and commented the pop3_uidl_format back out. It works fine.
I’m done but on the last part
krizna@mail:~$ sudo a2ensite squirrelmail
it says ‘Site squirrelmail does not exist’
Need your help Krizna.
Thanks.
** issue already solved and I can be able to open the squirrelmail but I got
“Unknown user or password incorrect.”
Is there any problem with the authentication? I simply followed the steps above. Please assist me. Thanks.
KUDOS! After trying postfix/dovecot documentation from Ubuntu & DigitalOcean over more days than I care to count, your tutorial is the one that worked. Great work.
on video ubuntu 16.10 with courier-pop courier-imap
if you have this problem: MTP server response: 530 5.7.0 Must issue a STARTTLS command first
then my recommendation to you is to remove the comment mark at the start of the line
#submission
good luck
@mgr9500
STARTTLS command required, how to solve this?
it is giving error like this, how to solve this?
Will it work in Ubuntu 16.04 and PHP version 7.1.9?
good day,
i’ve done setting up my own ubuntu 14 with postfix and squirrel mail.
Sending to local users for
example
email server = webmail.noblecomms.net
users
ram@noblecomms.net sends to landzki@noblecomms.net
totally works fine
but when i send emails to outsiders like, gmail.com or yahoo.com.
Mail delivery is fail.
How can this be solved?
I need this for my project
Thank you very much and God bless you for sharing your wisdom
Thank you
finally thanks to your guide I managed to install an SMTP server
thank you so much.