Introduction
If you run server(s), VPS’s or Server Apps (Cloudpanel, WHM/Cpanel, Vesta, Ajenti, Cyberpanel etc) and/or have a few domains (and you are on a small budget like me) you will notice that the one thing that can ruin a project is either 1) Having to pay extra for an email inbox for said domain or, 2) trying to set up your own email server to find out that the VPS host has port 25 blocked.
Even then, let’s say you have those problems solved but now certain inboxes will not accept your mail because of “invalid DKIM” or something similar. The whole process can be an absolute headache.
This guide aims to guide you through setting up an email server for all your domains for only $5 a month
You will need a server with port 25 open for this guide. I will go through how to contact your server provider and request to open port 25.
Port 25
Scaleway.com
EDIT: Since writing, I have noticed that Scaleway.com actually allow SMTP from their VPS or what they call “Instances”. Their great servers and if you can manage to grab one on the stardust level you can get a whole AMD EPYC CPU core allocated for only about £1.50 a month. To enable SMTP you need to verify your id which is easily done automatically. Further information on how to enable SMTP. Currently, this is the easiest and “hassle-free” method of enabling SMTP on your VPS’s.
Be aware that Scaleway do not currently have an option to set the reverse address PTR for IPv6 addresses. This can cause issues when sending to gmail addresses.

Atlantic.net
You can complete this guide with a free VPS from Atlantic.net but you will need to email their support to open port 25. You can also use Hetzner and email their support to open port 25.
DigitalOcean.com
DigitalOcean.com will also offer the same service but from my experience can be stricter.
Vultr.com
Vultr.com are the same as DigitalOcean you have to fill out forms and send them back but usually, it will go through fine. You can get $100 free on Vultr.com by clicking here.
What to do?
Simply email the support staff requesting to open port 25 because you need it for development purposes. They will probably ask why you need it exactly and how many emails you intend to send per month. Depending on your usage explain what you need and they will usually oblige.
Hetzner
I used Hetzner and they were quick to respond and opened port 25 for ALL my VPS’s.
In my example, I said I needed it for development purposes and I estimated to send around 100-150 emails per month.
Requirements
So now we have our VPS. It’s super small depending on what route you took. Most providers have different plans. Atlantic.net’s offer is particularly good with a server with 2GB RAM.
Regardless of which provider you choose you will need a minimum of only 512MB RAM on the VPS. Most VPS of this size cost $5 or less.
You will need to be able to set your domain’s Glue Records
Server Specs
- Server with 512MB RAM
- At least 1 core.
- Ubuntu 22.04 Only
- A domain you control at your domain provider. (Namecheap, Godaddy, Porkbun etc)
- The VPS hostname must be set as
box.yourdomain.com
(obviously, replace your domain.com with your actual domain). - You will need FULL control over your domain nameservers. If you have subdomains you can set them up later.
- When you have created your VPS set the Reverse Address or PTR to your hostname that you will be using.
Pre-install
So we have our VM, Ubuntu 22.04 and it’s booted up. Let’s go through a few commands to update the system and set our hostname.
Update and upgrade the system.
apt update && apt upgrade -y
Now reboot
reboot
Once rebooted, let’s set our hostname. Ubuntu 22.04 uses systemctl to set the hostname.
systemctl set-hostname box.yourdomain.com --static
Reboot again
reboot
Now we need to set our reverse DNS on the VPS. It varies for all providers but it’s the same output. Change the reverse to the domain you have set up eg, box.yourdomain.com
This is how it looks in Hetzner.
IPv4

IPv6

IPv6 Setup
You might need to add your IPv6 address to your Ubuntu VM if it is not done automatically. Most hosts are different in how they deal with provisioning IPv6. Sometimes they will add it automatically sometimes they don’t.
To edit the VM’s IPv6 address we do this with netplan.
Find out your IPv6 address, Its normally in the format 2a01:5f8:c0c:cca4::1
the ::1
on the end basically says your using the first available IPv6 address in that block or number 1. If you had other IPv6 addresses on the same network they would have ::2
or ::3
etc.
Open a ssh session to your VM
ssh root@186.167.897.87
Edit the cloud-init
file
nano /etc/netplan/50-cloud-init.yaml
We need to add our IPv6 address at the bottom replacing the dummy IP 2a01:4ff:ff00::add:1
.
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
version: 2
ethernets:
eth0:
addresses:
- 2001:db8:1234::1/64
dhcp4: true
gateway6: fe80::1
match:
macaddress: your-original-macaddress
nameservers:
addresses:
- 2a01:4ff:ff00::add:2
- 2a01:4ff:ff00::add:1 <--- Replace this one
set-name: eth0
Save the file, then exit and reboot
CTRL
+x
then y
then ENTER
reboot
Nameserver Setup
At this point, we are (almost) ready to install.
Go to your domain registrar and look for Glue Records
Glue Records
This is what it looks like to set Glue Records at Porkbun

Setting the server will look something like this:

After adding both ns1.box and ns2.box it will look something like the following:

So we have our Glue Records all set and they are named ns1.box
and ns2.box
and they point to your VPS IP.
Stick with me, this can be confusing.
At this point, we are ready to start the installation.
Installation
Installing Mail-in-a-Box is pretty easy at this point and it’s quite amazing how it sets everything up for you or gives you direct instructions on what to fix and how to fix it.
Log back into our VPS
ssh root@198.657.456.65
To start the installation use the following oneliner
curl -s https://mailinabox.email/setup.sh | sudo -E bash
Let the script run. It will ask you some basic questions but everything is self-explanatory.
The script will finish and at this point, you can log in to your server at https://box.yourdomain.com/admin
Once logged in click Status Checks

This dashboard will show you whether your domain has resolved and propagated. Be patient with this sometimes it can take hours. Try refreshing your cache by clicking ctrl
+shift
+ refresh.
Issuing Certificates
When a name resolves to the machine it will try to auto-issue a certificate for the hostname and nameservers. Once all names have resolves you will be given the option to add all certificates for all the required domains. It’s super simple and just works.

The DNS Server
While it may not be fast, your server is a full-fledged and fully certified email server but also a DNS server and you can set DNS addresses from the panel.
To add a domain to the server first add an email to be associated with the domain then point the domain’s DNS at your ns1.box and ns2.box nameserver addresses.
Example
- Add email to box from GUI (avoid, admin, postmaster etc)
- Point your domain at your
ns1.box.yourdomain.com
andns2.box.yourdomain.com
. - Add a subdomain or a main domain record from the DNS panel

Complete!
And there we have it. Your server will automatically generate all the records needed and you can always check the status panel it will give you all the information you need to know as far as DKIM, DMARC & SPF records.
If you need more information head over to Mail-in-a-Box.
Thanks for reading.
Troubleshooting
If you add an email and change the nameservers of the domain to point to your email box when you go to the status page if things have not updated in a reasonable time you can use the following command to restart the nameserver. Check the status page afterwards and you should have your domains resolve as usual.
service nsd restart
Affiliate Links
Some great affiliate links give you free cash to spend on VPS. If you use these links I will get a small commission if you choose to sign up.
- Vultr.com – $100 free to spend on VPS
- DigitalOcean.com – £200 to spend on all services including VPS
- Atlantic.net – 1 Core 2GB RAM VPS FREE for 12 months from signup + $15
- Hetzner Cloud – $20 Free to use on all products
- GSuite – Google Workspace 10% off the first year
- Add
6AKCQG7CAFYCQWA
to your Google Workspace Account