Postfix Configuration
Postfix Configuration
Learn more
Tutorials Questions Learning Paths For Businesses Product Docs Social Impact Search Community
Please select whether you consent to our use of cookies and related technologies (“Cookies”), as
described in our privacy policy. Expand each section below for more information. You can return at any
time from the same web browser to update your preferences. Please note that resetting your browser’s
cookies will reset your preferences.
// Tutorial //
ACCEPT ALL
Introduction
Postfix is a popular open-source Mail Transfer Agent MTA that can be used to route and deliver email on
a Linux system. It is estimated that around 25% of public mail servers on the internet run Postfix.
In this guide, you’ll learn how to install and configure Postfix on an Ubuntu 22.04 server. Then, you’ll test
that Postfix is able to correctly route mail by installing s-nail , a Mail User Agent MUA , also known as an
email client.
Note that the goal of this tutorial is to help you get Postfix up and running quickly with only some bare-
bones email functionality. You won’t have a full featured email server by the end of this guide, but you will
have some of the foundational components of such a setup to help you get started.
Prerequisites
Setting up and maintaining your own mail server is complicated and time-consuming. For most users, it’s
more practical to instead rely on a paid mail service. If you’re considering running your own mail server, we
encourage you to review this article on why you may not want to do so.
If you’re sure you want to follow this guide to install and configure Postfix, then you must first have the
following:
A server running Ubuntu 22.04 to function as your Postfix mail server. This server should have a non-
root user with sudo privileges and a firewall configured with UFW. You can follow our Ubuntu 22.04
initial server setup guide to set this up.
A Fully Qualified Domain Name pointed at your Ubuntu 22.04 server. You can find help on setting up
your domain name with DigitalOcean by following our Domains and DNS Networking documentation.
Be aware that if you plan on accessing mail from an external location, you will need to make sure you
have an MX record pointing to your mail server as well.
Note that this tutorial assumes that you are configuring a host that has the FQDN of mail.example.com .
Wherever necessary, be sure to change example.com or mail.example.com to reflect your own FQDN.
postfix package with the following command. Note that here we pass the
Then install the
DEBIAN_PRIORITY=low environmental variable into this installation command. This will cause the installation
process to prompt you to configure some additional options:
This installation process will open a series of interactive prompts. For the purposes of this tutorial, use the
following information to fill in your prompts:
General type of mail configuration? For this, choose Internet Site since this matches our
infrastructure needs.
System mail name This is the base domain used to construct a valid email address when only the
account portion of the address is given. For instance, let’s say the hostname of your server is
mail. example.com . You will likely want to set the system mail name to example.com so that, given
the username user1 , Postfix will use the address user1@ example.com .
Root and postmaster mail recipient This is the Linux account that will be forwarded mail addressed
to root@ and postmaster@ . Use your primary account for this. In this example case, sammy.
Other destinations to accept mail for This defines the mail destinations that this Postfix instance
will accept. If you need to add any other domains that this server will be responsible for receiving, add
those here. Otherwise, the default will be sufficient.
Force synchronous updates on mail queue? Since you are likely using a journaled filesystem,
accept No here.
Local networks This is a list of the networks for which your mail server is configured to relay
messages. The default will work for most scenarios. If you choose to modify it, though, make sure to
be very restrictive in regards to the network range.
Mailbox size limit This can be used to limit the size of messages. Setting it to 0 disables any size
restriction.
Local address extension character This is the character that can be used to separate the regular
portion of the address from an extension (used to create dynamic aliases). The default, + will work
for this tutorial.
Internet protocols to use Choose whether to restrict the IP version that Postfix supports. For the
purposes of this tutorial, pick all.
Note If you need to ever return to change these settings, you can do so by typing:
When you are prompted to restart services, accept the defaults and choose OK .
When the installation process finishes, you’re ready to make a few updates to your Postfix configuration.
Next, set the location of the virtual_alias_maps table, which maps arbitrary email accounts to Linux
system accounts. Run the following command, which maps the table location to a hash database file
named /etc/postfix/virtual :
Now that you’ve defined the location of the virtual maps file in your main.cf file, you can create the file
itself and begin mapping email accounts to user accounts on your Linux system. Create the file with your
preferred text editor; in this example, we’ll use nano :
List any addresses that you wish to accept email for, followed by a whitespace and the Linux user you’d
like that mail delivered to.
For example, if you would like to accept email at contact@ example.com and admin@ example.com and
would like to have those emails delivered to the sammy Linux user, you could set up your file like this:
/etc/postfix/virtual
After you’ve mapped all of the addresses to the appropriate server accounts, save and close the file. If you
used nano , do this by pressing CTRL + X , Y , then ENTER .
Apply the mapping by typing:
Restart the Postfix process to be sure that all of your changes have been applied:
Assuming you followed the prerequisite Initial Server Setup guide, you will have configured a firewall with
UFW. This firewall will block external connections to services on your server by default unless those
connections are explicitly allowed, so you’ll have to add a firewall rule to allow an exception for Postfix.
You can allow connections to the service by typing:
With that, Postfix is configured and ready to accept external connections. However, you aren’t yet ready to
test it out with a mail client. Before you can install a client and use it to interact with the mail being delivered
to your server, you’ll need to make a few changes to your Ubuntu server’s setup.
Copy
$ echo 'export MAIL=~/Maildir' | sudo tee -a /etc/bash.bashrc | sudo tee -a /etc/profile.d/ma
To read the variable into your current session, source the /etc/profile.d/mail.sh file:
With that complete, install the s-nail email client with APT
Before running the client, there are a few settings you need to adjust. Open the /etc/s-nail.rc file in your
editor:
/etc/s-nail.rc
. . .
set emptystart
set folder=Maildir
set record=+sent
Save and close the file when you are finished. You’re now ready to initialize your system’s Maildir structure.
A quick way to create the Maildir structure within your home directory is to send yourself an email with the
s-nail command. Because the sent file will only be available once the Maildir is created, you should
disable writing to it for this initial email. Do this by passing the -Snorecord option.
Send the email by piping a string to the s-nail command. Adjust the command to mark your Linux user as
the recipient:
Output
Can't canonicalize "/home/ sammy /Maildir"
This is normal and may only appear when sending this first message.
You can can check to make sure the directory was created by looking for your ~/Maildir directory:
$ ls -R ~/Maildir Copy
You will see the directory structure has been created and that a new message file is in the ~/Maildir/new
directory:
Output
/home/ sammy /Maildir/:
cur new tmp
Now that the directory structure has been created, you’re ready to test out the s-nail client by viewing
the init message you sent and sending a message to an external email address.
$ s-nail Copy
In your console, you’ll see a rudimentary inbox with the init message waiting:
Output
s-nail version v14.9.15. Type `?' for help
"/home/sammy/Maildir": 1 message 1 new
>N 1 [email protected] 2022-04-18 15:09 14/452 init
Output
[-- Message 1 -- 14 lines, 452 bytes --]:
Date: Mon, 18 Apr 2022 15:09:46 +0000
To: [email protected]
Subject: init
Message-Id: <20220418150946.EE6897E11A@@mail.example.com>
From: [email protected]
init
You can get back to the message list by typing h , and then ENTER :
? h Copy
Output
>R 1 [email protected] 2022-04-18 15:09 14/452 init
Notice that the message now has a state of R , indicating that it’s been read.
Since this message isn’t very useful, you can delete it by pressing d , and then ENTER :
? d Copy
? q Copy
As a final test, check whether s-nail is able to correctly send email messages. To do this, you can pipe
the contents of a text file into the s-nail process, like you did with the init message you sent in the
previous step.
Begin by writing a test message in a text editor:
~/test_message
Hello,
Also, be sure to change user @ email.com to a valid email address which you have access to:
Copy
$ cat ~/ test_message | s-nail -s ' Test email subject line ' -r [email protected] user @ emai
Then, navigate to the inbox for the email address to which you sent the message. You will see your
message waiting there almost immediately.
Note If the message isn’t in your inbox, it may have been delivered to your Spam folder.
You can view your sent messages within your s-nail client. Start the interactive client again:
$ s-nail Copy
Output
+[/home/sammy/Maildir/]sent: 1 message 1 new
▸N 1 To [email protected] 2022-04-18 15:12 10/211 Test email subject line
You can manage sent mail using the same commands you use for incoming mail.
Conclusion
You now have Postfix configured on your Ubuntu 22.04 server. Managing email servers can be a tough task
for new system administrators, but with this configuration, you should have enough MTA email functionality
to get yourself started.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute,
storage, networking, and managed databases.
Learn more about us
Still looking for an answer? Ask a question Search for more help
Comments
4 Comments
Leave a comment
Reply
Reply
Reply
Featured on Community
Kubernetes Course Learn Python 3 Machine Learning in Python Getting started with Go Intro to Kubernetes
DigitalOcean Products
Cloudways Virtual Machines Managed Databases Managed Kubernetes Block Storage Object Storage Marketplace VPC
Load Balancers
Learn more