


How to Create Anonymous Email Aliases with SimpleLogin - Make Tech Easier
Jul 30, 2025 am 12:58 AMSimpleLogin is a lightweight and easy-to-use aliases server that allows you to create permanent and anonymous email identities without creating new mailboxes. This article will show you how to install a SimpleLogin server on Ubuntu and create anonymous email aliases to use online.
Table of Contents
- Preparing the System
- Installing SimpleLogin
- Creating Email Aliases With SimpleLogin
Preparing the System
Assumption: This article assumes that you are installing SimpleLogin on a VPS with at least 2GB of RAM. It also assumes that you have an active domain name for it from a DNS registrar.
To start, import the Docker project’s signing key to your machine:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg<br>sudo chmod a r /etc/apt/keyrings/docker.gpg
Create a repository file for the Docker project:
sudo nano /etc/apt/sources.list.d/docker.list
Write the following line of code inside the repository file:
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable
Refresh your machine’s repositories by running the following command:
sudo apt update && sudo apt upgrade
Installing the Dependencies for SimpleLogin
Install both Docker and SimpleLogin’s dependencies to your system:
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin nginx dnsutils postfix postfix-pgsql
Select Internet Site when the Postfix install wizard asks for your mail server configuration type.
Press Enter to confirm the default “System mail name” value.
Make sure that the “core” snap package is running on your machine:
sudo snap install core
Install the certbot snap package from the Electronic Frontier Foundation (EFF):
sudo snap install certbot --classic
Ensure that your system’s firewall is not blocking any of the ports for SimpleLogin:
sudo ufw allow 25,80,443/tcp
Preparing the DNS Records
Go to your domain registrar and create a new “A” record pointing to your machine’s IPv4 address. Set the hostname value to a subdomain that you want for your SimpleLogin instance.
Add an “MX” record for your root domain with a target hostname set to your SimpleLogin subdomain.
Create a “TXT” record for your root domain and set its value to the following:
v=spf1 mx ~all
Create a different “TXT” record for the subdomain “_dmarc”, then set its value to the following:
v=DMARC1; p=quarantine; adkim=r; aspf=r
Open a terminal session, then generate a DKIM keypair using OpenSSL:
openssl genrsa -out dkim.key -traditional 1024<br>openssl rsa -in dkim.key -pubout -out dkim.pub.key
Run the following command then copy its result to your system clipboard. This is a sed script that the developers use to extract the DKIM public key from its keyfile:
sed "s/-----BEGIN PUBLIC KEY-----/v=DKIM1; k=rsa; p=/" $(pwd)/dkim.pub.key | sed "s/-----END PUBLIC KEY-----//" | tr -d '\n' | sed -e '$a\'
Create a “TXT” record for the subdomain “dkim._domainkey”, then set the output of the previous command as its value.
Good to know: learn more about DNS and name servers by using dig in Linux.
Creating the Postgres Database
Aside from using special DNS records, SimpleLogin also takes advantage of PostgresDB to manage email aliases. To set this up, first create the subdirectories for the SimpleLogin Docker container:
mkdir -p ~/sl/{pgp,db,upload}
Start a virtual network using Docker on your server:
sudo docker network create -d bridge \<br> --subnet=10.0.0.0/24 \<br> --gateway=10.0.0.1 \<br> sl-network
Paste the following command to a new terminal session:
sudo docker run -d \<br> --name sl-db \<br> -e POSTGRES_PASSWORD=YOUR-RANDOM-PASSWORD-HERE \<br> -e POSTGRES_USER=postgres \<br> -e POSTGRES_DB=simplelogin \<br> -p 127.0.0.1:5432:5432 \<br> -v $(pwd)/sl/db:/var/lib/postgresql/data \<br> --restart always \<br> --network="sl-network" \<br> postgres:12.1
Change the value for the “POSTGRES_PASSWORD” variable with a long and random string of text.
Note: You can generate this random string by running: cat /dev/urandom | tr -dc 'A-Za-z0-9' | fold -w 32 | head -n 1.
Run the modified Docker command to start your database.
Configuring Postfix for SimpleLogin
Start by deleting the default configuration file for Postfix, then create a blank file with the same name using your favorite text editor:
sudo rm /etc/postfix/main.cf && sudo nano /etc/postfix/main.cf
Paste the following block of code inside your new config file. This is a Postfix template from the developers’ repository that I modified to highlight the parts where you will add your server’s domain name:
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)<br>biff = no<br>append_dot_mydomain = no<br>readme_directory = no<br>compatibility_level = 2<br>smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem<br>smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key<br>smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache<br>smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache<br>smtp_tls_security_level = may<br>smtpd_tls_security_level = may<br>alias_maps = hash:/etc/aliases<br>mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.0.0.0/24<br><br>mydestination =<br>myhostname = SUBDOMAIN.YOUR-ROOT.DOMAIN<br>mydomain = YOUR-ROOT.DOMAIN<br>myorigin = YOUR-ROOT.DOMAIN<br><br>relay_domains = pgsql:/etc/postfix/pgsql-relay-domains.cf<br>transport_maps = pgsql:/etc/postfix/pgsql-transport-maps.cf<br><br>smtpd_delay_reject = yes<br>smtpd_helo_required = yes<br>smtpd_helo_restrictions =<br> permit_mynetworks,<br> reject_non_fqdn_helo_hostname,<br> reject_invalid_helo_hostname,<br> permit<br>smtpd_sender_restrictions =<br> permit_mynetworks,<br> reject_non_fqdn_sender,<br> reject_unknown_sender_domain,<br> permit<br>smtpd_recipient_restrictions =<br> reject_unauth_pipelining,<br> reject_non_fqdn_recipient,<br> reject_unknown_recipient_domain,<br> permit_mynetworks,<br> reject_unauth_destination,<br> reject_rbl_client zen.spamhaus.org=127.0.0.[2..11],<br> reject_rbl_client bl.spamcop.net=127.0.0.2,<br> permit
Change the value of “myhostname” with the address of your web app, then update the value of both “mydomain” and “myorigin” to your root domain.
Linking Postgres with Postfix
Create a new “pgsql-relay-domains.cf” file under “/etc/postfix.” This will serve as the link between Postfix and Postgres:
sudo nano /etc/postfix/pgsql-relay-domains.cf
Paste the following block of code inside your new config file:
hosts = localhost<br>user = postgres<br>password = DATABASE-PASSWORD<br>dbname = simplelogin<br><br>query = SELECT domain FROM custom_domain WHERE domain='%s' AND verified=true<br> UNION SELECT domain FROM public_domain WHERE domain='%s'<br> UNION SELECT '%s' WHERE '%s' = 'mydomain.com' LIMIT 1;
Replace “DATABASE-PASSWORD” with your Postgres password.
Create a new “pgsql-transport-maps.cf” under the same directory:
sudo nano /etc/postfix/pgsql-transport-maps.cf
Paste the following block of code inside your new config file:
hosts = localhost<br>user = postgres<br>password = DATABASE-PASSWORD<br>dbname = simplelogin<br><br>query = SELECT 'smtp:127.0.0.1:20381' FROM custom_domain WHERE domain = '%s' AND verified=true<br> UNION SELECT 'smtp:127.0.0.1:20381' FROM public_domain WHERE domain = '%s'<br> UNION SELECT 'smtp:127.0.0.1:20381' WHERE '%s' = 'mydomain.com' LIMIT 1;
Just like with the previous config, replace “DATABASE-PASSWORD” with your Postgres password.
Installing SimpleLogin
Navigate to the home directory of your user, then create the environment file for SimpleLogin.
cd && nano ./simplelogin.env
Write the following block of code inside your new environment file:
URL=https://SUBDOMAIN.YOUR-ROOT.DOMAIN<br>EMAIL_DOMAIN=YOUR-ROOT.DOMAIN<br>SUPPORT_EMAIL=support@YOUR-ROOT.DOMAIN<br>EMAIL_SERVERS_WITH_PRIORITY=[(10, "SUBDOMAIN.YOUR-ROOT.DOMAIN.")]<br>DB_URI=postgresql://postgres:DATABASE-PASSWORD@sl-db:5432/simplelogin<br>FLASK_SECRET=ADD-A-NEW-RANDOM-STRING-HERE<br><br>DISABLE_ALIAS_SUFFIX=1<br>DKIM_PRIVATE_KEY_PATH=/dkim.key<br>GNUPGHOME=/sl/pgp<br>LOCAL_FILE_UPLOAD=1<br>POSTFIX_SERVER=10.0.0.1
Replace every instance of “SUBDOMAIN.YOUR-ROOT.DOMAIN” with your SimpleLogin URL.
Change the value of “YOUR-ROOT.DOMAIN” to your root domain.
Replace the “DATABASE-PASSWORD” variable with your Postgres password.
Generate a new random string and set that as the value “FLASK_SECRET”
Running the SimpleLogin Docker Containers
With that setup and ready, you can now fetch and run the SimpleLogin Docker container. To start, import the Postgres database to your SimpleLogin install:
sudo docker run --rm \<br> --name sl-migration \<br> -v $(pwd)/sl:/sl \<br> -v $(pwd)/sl/upload:/code/static/upload \<br> -v $(pwd)/dkim.key:/dkim.key \<br> -v $(pwd)/dkim.pub.key:/dkim.pub.key \<br> -v $(pwd)/simplelogin.env:/code/.env \<br> --network="sl-network" \<br> simplelogin/app:4.6.5-beta alembic upgrade head
Run the Docker container for SimpleLogin’s initialization script:
sudo docker run --rm \<br> --name sl-init \<br> -v $(pwd)/sl:/sl \<br> -v $(pwd)/simplelogin.env:/code/.env \<br> -v $(pwd)/dkim.key:/dkim.key \<br> -v $(pwd)/dkim.pub.key:/dkim.pub.key \<br> --network="sl-network" \<br> simplelogin/app:4.6.5-beta python init_app.py
Start the Docker container that manages the app’s front-end interface:
sudo docker run -d \<br> --name sl-app \<br> -v $(pwd)/sl:/sl \<br> -v $(pwd)/sl/upload:/code/static/upload \<br> -v $(pwd)/simplelogin.env:/code/.env \<br> -v $(pwd)/dkim.key:/dkim.key \<br> -v $(pwd)/dkim.pub.key:/dkim.pub.key \<br> -p 127.0.0.1:7777:7777 \<br> --restart always \<br> --network="sl-network" \<br> simplelogin/app:4.6.5-beta
Run the container that handles the email backend for SimpleLogin:
sudo docker run -d \<br> --name sl-email \<br> -v $(pwd)/sl:/sl \<br> -v $(pwd)/sl/upload:/code/static/upload \<br> -v $(pwd)/simplelogin.env:/code/.env \<br> -v $(pwd)/dkim.key:/dkim.key \<br> -v $(pwd)/dkim.pub.key:/dkim.pub.key \<br> -p 127.0.0.1:20381:20381 \<br> --restart always \<br> --network="sl-network" \<br> simplelogin/app:4.6.5-beta python email_handler.py
Lastly, start the container that manages routine tasks for the SimpleLogin system:
sudo docker run -d \<br> --name sl-job-runner \<br> -v $(pwd)/sl:/sl \<br> -v $(pwd)/sl/upload:/code/static/upload \<br> -v $(pwd)/simplelogin.env:/code/.env \<br> -v $(pwd)/dkim.key:/dkim.key \<br> -v $(pwd)/dkim.pub.key:/dkim.pub.key \<br> --restart always \<br> --network="sl-network" \<br> simplelogin/app:4.6.5-beta python job_runner.py
FYI: Docker is more than just a way to deploy SimpleLogin. Learn how you can quickly host your own WordPress site using Docker.
Creating an SSL Reverse Proxy with Nginx
At this point, SimpleLogin is now running on the server at port 7777. To access it, you need to pass its outgoing connection through an SSL reverse proxy.
Create the site file for your SimpleLogin instance:
sudo nano /etc/nginx/sites-available/simplelogin
Paste the following block of code inside your site file:
server {<br><br> server_name SUBDOMAIN.YOUR-ROOT.DOMAIN;<br><br> location / {<br> proxy_pass http://127.0.0.1:7777;<br> proxy_http_version 1.1;<br> proxy_set_header Upgrade $http_upgrade;<br> proxy_set_header Connection "upgrade";<br> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br> proxy_set_header Host $host;<br> }<br>}
Create a symbolic link for your site file in “/etc/nginx/sites-enabled/”:
sudo ln -s /etc/nginx/sites-available/simplelogin /etc/nginx/sites-enabled/
Apply your new settings by restarting the Nginx daemon:
sudo systemctl restart nginx
Register your SimpleLogin instance to the EFF by running the following command:
sudo certbot register --agree-tos -m YOUR@EMAIL.ADDRESS
Request a new SSL certificate for your reverse proxy:
sudo certbot --nginx -d SUBDOMAIN.YOUR-ROOT.DOMAIN
Open your Postfix config file using your favorite text editor:
sudo nano /etc/postfix/main.cf
Scroll down to the “smtpd_tls_cert_file” and “smtpd_tls_key_file” variables and replace them with the following lines of code:
smtpd_tls_cert_file=/etc/letsencrypt/live/SUBDOMAIN.YOUR-ROOT.DOMAIN/fullchain.pem<br>smtpd_tls_key_file=/etc/letsencrypt/live/SUBDOMAIN.YOUR-ROOT.DOMAIN/privkey.pem
Test if your SimpleLogin instance is running properly by opening your subdomain on a browser and creating a new account.
Creating Email Aliases With SimpleLogin
Go back to your server’s terminal session, then open the app’s database:
docker exec -it sl-db psql -U postgres simplelogin
Run the following to enable the Premium status for your primary account:
UPDATE users SET lifetime = TRUE;<br>exit
Doing this will ensure that your account won’t have any limits to the amount of aliases that you can make for your email.
To create your first email alias, click the New Custom Alias button on the web app’s dashboard.
Note: you can also create an alias with a random name by clicking the Random Alias button.
Provide a memorable name for your new email alias, then click Create.
Check if your new email alias is working properly by sending a message to it from a different email address.
Sending Emails from a SimpleLogin Alias
Aside from receiving mail from an alias, SimpleLogin also supports sending messages through them. To achieve that, the app creates a “reverse alias” for the destination address to which you can send your email.
To do this, click the Contacts button on the alias that you want to send an email from. In my case, I want to send from my “hello-maketecheasier@myvpsserver.top” address.
Provide the email address of your recipient, then click Create reverse-alias.
Click the Copy reverse-alias button on your new contact, then paste it to the recipient field of your email client. Sending a message to this custom address will allow SimpleLogin to mask your real email with your alias to your recipient.
Self-hosting your own email aliases server using SimpleLogin is just one of the steps of reclaiming your digital privacy. Take control of your entire digital communications chain by hosting your own email server using Mail-in-a-Box.
Image credit: Lukas Blazek via Unsplash and SimpleLogin Github. All alterations and screenshots by Ramces Red.
The above is the detailed content of How to Create Anonymous Email Aliases with SimpleLogin - Make Tech Easier. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

This Google translate picture guide shows you how to translate text from an image. If you are looking for more computer tips and solutions, you can visit php.cn Software official website where you can also find some useful computer tools like php.cn

If your Windows 11/10 computer doesn’t automatically the latest versions of device drivers, you will need to manually install them. In this post, php.cn Software will show you 3 different methods to manually install drivers on your device.

This post delivered by php.cn official web page introduces three methods to improve microphone volume and boost its performance, in Control Panel, via Settings, and by Device Manager. Read the below content to view details.

The operating system is the basic software for managing hardware resources, running programs, and providing user interaction interfaces. It coordinates the relationship between hardware and software and is responsible for memory allocation, device scheduling, file management and multitasking. Common systems include Windows (suitable for office and gaming), macOS (Apple devices, suitable for creative work), Linux (open source, suitable for developers), and Android/iOS (mobile device system). The choice of ordinary users depends on the usage scenario, such as software compatibility, security and customization requirements. How to view system information: Use winver command for Windows, click on the machine for macOS, use terminal commands for Linux, and find the phone in settings. The operating system is the underlying tool for daily use,

Have you ever wanted to adjust computer settings to fix some issues but suffered from Control Panel not opening? There is nothing more frustrating than this app not turning on, stopping you from viewing and changing system settings. In this post, mul

This post includes answers for what is dxdiag, how to run dxdiag in Windows 10/11, DirectX Diagnostic Tool’s main functions, and how to update dxdiag.exe driver. php.cn Software also provides many other computer tips and solutions for users. You can

What is Dell Digital Locker? How to log into Dell Digital Locker? This post from php.cn provides answers. Besides, you can know how to use your Dell Digital Locker to find software products included with your Dell computer.

This essay summarized by php.cn Software mainly teaches you how to open Windows 11 Computer Management with Windows Search, Quick Link menu, Run dialog, command prompt, PowerShell, File Explorer, Control Panel, as well as a desktop shortcut.
