Creating a mail server on Linux powered machines can be one of the most essential things that every system administrator needs to do while configuring the servers for the first time, if you don’t know what it means; it’s simple, if you have a website like “example.com”, you can create an email account like “[email protected]” to use it to send/receive emails easily instead of using services like Hotmail, Gmail, Yahoo Mail, etc.
In this article, we’ll learn how to do so by installing the Postfix mail server with the “Roundcube” webmail application and its dependencies on Debian 10/9 and Ubuntu 20.04/18.04/16.04 LTS releases.
On this page
- Set a Hostname and Create DNS Records for Mail Domain
- Installing Apache, MariaDB, and PHP on Ubuntu
- Installing Postfix Mail Server on Ubuntu
- Testing Postfix Mail Server on Ubuntu
- Installing Dovecot IMAP and POP in Ubuntu
- Installing Roundcube Webmail in Ubuntu
- Create an Apache Virtual Host for Roundcube Webmail
- Creating Mail Users to Access Mails via Roundcube
Step 1: Set a Hostname and Create DNS Records for Domain
1. First, set a valid FQDN (Fully Qualified Domain Name) hostname for your Ubuntu server using the hostnamectl command as shown.
$ sudo hostnamectl set-hostname mail.tecmint.com
2. Next, you need to add a MX
and A
records for your domain in your DNS control panel that guides other MTAs that your mail server mail.yourdomain.com
domain is responsible for email delivery.
MX record @ mail.tecmint.com mail.tecmint.com <IP-address>
Step 2: Installing Apache, MariaDB, and PHP on Ubuntu
3. In order to create a running mail server using “Roundcube”, we’ll have to install Apache2, MariaDB, and PHP packages first, to do so, run.
$ sudo apt-get update -y $ sudo apt-get upgrade -y $ sudo apt install apache2 apache2-utils mariadb-server mariadb-client php7.4 libapache2-mod-php7.4 php7.4-mysql php-net-ldap2 php-net-ldap3 php-imagick php7.4-common php7.4-gd php7.4-imap php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-gmp php-net-smtp php-mail-mime php-net-idna2 mailutils
On Debian 10/9, you need to download and install the SURY PHP PPA repository to install PHP 7.4 on Debian 10/9 as shown.
$ sudo apt -y install lsb-release apt-transport-https ca-certificates $ sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg $ echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list $ sudo apt update $ sudo apt install apache2 apache2-utils mariadb-server mariadb-client php7.4 libapache2-mod-php7.4 php7.4-mysql php-net-ldap2 php-net-ldap3 php-imagick php7.4-common php7.4-gd php7.4-imap php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-gmp php-net-smtp php-mail-mime php-net-idna2 mailutils
Step 3: Installing Postfix Mail Server on Ubuntu
4. Postfix is a mail transfer agent (MTA) which is the responsible software for delivering & receiving emails, it’s essential in order to create a complete mail server.
To install it on Ubuntu/Debian or even Mint, run:
$ sudo apt-get install postfix
During installation, you will be asked to choose the type of mail configuration, choose “Internet Site”.

5. Now enter the fully qualified domain name that you want to use for send and receive emails.

6. Once Postfix installed, it will automatically start and creates a new /etc/postfix/main.cf file. You can verify the Postfix version and status of the service using the following commands.
$ postconf mail_version $ sudo systemctl status postfix

Step 4: Testing Postfix Mail Server on Ubuntu
7. Now try to check your mail server is connecting on port 25 using the following command.
$ telnet gmail-smtp-in.l.google.com 25 Trying 74.125.200.27... Connected to gmail-smtp-in.l.google.com. Escape character is '^]'. 220 mx.google.com ESMTP k12si849250plk.430 - gsmtp
The above message indicates that the connection is successfully established. Type quit to close the connection.
8. You can also use a mail program to send and read emails using the following command.
$ mail [email protected] Cc: Subject: Testing My Postfix Mail Server I'm sending this email using the postfix mail server from Ubuntu machine
Step 5: Installing Dovecot IMAP and POP in Ubuntu
9. Dovecot is a mail delivery agent (MDA), it delivers the emails from/to the mail server, to install it, run the following command.
$ sudo apt-get install dovecot-imapd dovecot-pop3d

10. Next, restart the Dovecot service using the following command.
$ sudo systemctl restart dovecot OR $ sudo service dovecot restart

Step 6: Installing Roundcube Webmail in Ubuntu
11. Roundcube is the webmail server that you’ll be using to manage emails on your server, it has a simple web interface to do the job, it can be customized by installing more modules & themes.
$ wget https://github.com/roundcube/roundcubemail/releases/download/1.4.8/roundcubemail-1.4.8.tar.gz $ tar -xvf roundcubemail-1.4.8.tar.gz $ sudo mv roundcubemail-1.4.8 /var/www/html/roundcubemail $ sudo chown -R www-data:www-data /var/www/html/roundcubemail/ $ sudo chmod 755 -R /var/www/html/roundcubemail/
12. Next, you need to create a new database and user for Roundcube and grant all permission to a new user to write to the database.
$ sudo mysql -u root MariaDB [(none)]> CREATE DATABASE roundcube DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; MariaDB [(none)]> CREATE USER roundcubeuser@localhost IDENTIFIED BY 'password'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON roundcube.* TO roundcubeuser@localhost; MariaDB [(none)]> flush privileges; MariaDB [(none)]> quit;
13. Next, import the initial tables to the Roundcube database.
$ sudo mysql roundcube < /var/www/html/roundcubemail/SQL/mysql.initial.sql
Step 7: Create an Apache Virtual Host for Roundcube Webmail
14. Create an apache virtual host for Roundcube webmail.
$ sudo nano /etc/apache2/sites-available/roundcube.conf
Add the following configuration in it.
<VirtualHost *:80> ServerName tecmint.com DocumentRoot /var/www/html/roundcubemail/ ErrorLog ${APACHE_LOG_DIR}/roundcube_error.log CustomLog ${APACHE_LOG_DIR}/roundcube_access.log combined <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/html/roundcubemail/> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>
15. Next, enable this virtual host and reload the apache for the changes.
$ sudo a2ensite roundcube.conf $ sudo systemctl reload apache2
16. You can now access the webmail by going to http://yourdomain.com/roundcubemail/installer/
.

16. Next, go to the Database settings and add the database details.

17. After making all the changes, create a config.inc.php
file.

18. After finishing the installation and the final tests please delete the installer
folder and make sure that enable_installer
option in config.inc.php
is disabled.
$ sudo rm /var/www/html/roundcubemail/installer/ -r
19. Now go to the login page and enter the user name and the password of the user.
http://yourdomain.com/roundcubemail/

Step 8: Creating Mail Users
20. In order to start using the Roundcube webmail, you’ll have to create a new user, to do so, run.
$ sudo useradd myusername
Replace “myusername” with the user name you want, create a password for the new user by running.
$ sudo passwd myusername
21. Now go back to the login page and enter the user name and the password of the newly created user.
Have you tried to create an email server before? How did it go? Have you used Roundcube or any other mail server before? What do you think about it?
I did the tutorial step by step and actually everything is working but it created a new ip and now I can’t do it locally (my local IP just to work in my virtual machines) and I can’t open the roundcube page because of it!, just the Apache default one that runs on my ip.
Hi, I’m new to this and in step 17 I got lost, I didn’t know how to create what “config.inc.php” asks for, I deleted the installer as requested, but now the domain no longer works for me, I get:
DATABASE ERROR: CONNECTION FAILED!
Unable to connect to the database!
Please contact your server-administrator.
I don’t know what to do, help.
@Alexis,
The config.inc.php file is saved to the /var/www/html/roundcubemail/config directory.
Please check if the file is there, if not, create config.inc.php file by using the defaults.inc.php file.
Hello Bro,
I have already installed the LAMP server on UBUNTU 22.04 Can I install postfix roundcube now or do I need a fresh machine? I am using DigitalOcean hosting.
Please reply as soon as possible.
My application is in trouble with e-mail
@Pardeep,
You can install the Roundcube email client on the same machine, no need to have a fresh system…
Okay, brother Thanks for the quick response…
How about ssl configuration for the mail server?
Is there any advantage to joining the Ubuntu machine to our Active Directory domain before installing the email server?
So I did everything like the turtorial but apache says that this url doesnt exist.
Have you registered your domain ??
Hello,
Is it possible to do this without a fixed IP address? With a dynamic DNS for example? Is it possible to change the DNS records automatically when the external IP changes?
Thanks,
Isaiah
Yeah, you can change the Records automatically with your script or a dyndns client. But with dynamic IP will not have the Reverse DNS that will be a problem for your mail server.
Can anyone please suggest a very good cloud server site apart from digitalocean and vultr?
Anyone with open port 25.
Linode Hosting – https://www.linode.com/
Hi all,
How to create users for dovecot?
I tried as mentioned in this tutorial but it’s impossible to connect in Roundcube.
@Jacques,
What error are you getting while logging into Roundcube as a user?
I can’t connect. I type in the login and password created as indicated but I can’t connect. I have no error message on the interface.
Someone, to help me?
How to create users who can connect to Roundcube?
My server is Ubuntu 20
I am sorry for my bad English, this my problem, with postfix in Linux.
I work in a single vps, with two wordpress,” contact form send mail just for mail “[email protected]”,
If I change file sasl_passwd like this contact form send mail just for "[email protected]",:
If I use shell to send mail like this, both cases work perfectly :
So I need to find a problem with config wordpress or config postfix?
If there solution how to send a message from both wordpress, please help,