Newsletter
Subscribe to my newsletter for the latest updates. 👇
Postfix serves as a Mail Transfer Agent (MTA).
You can configure it to specialize in sending emails, which is valuable for sending routine email notifications.
In this tutorial, I’ll explain how to set up Postfix to send up to 1000 emails per month using a free SMTP relay service.
To make the most of this guide, ensure you have a properly set up Ubuntu server.
If you don’t have one, consider getting a free VPS server to follow along.
Following along on your own server will enhance your understanding and practical experience.
Most server providers block port 25 to prevent misuse for sending spam emails.
However, you can work around this limitation by using an external SMTP relay. An external SMTP relay uses a different port, allowing you to send emails externally.
External SMTP relay means your servers don’t send emails directly. Instead, it relies on another server, often called a relay host, to send your emails for you.
This approach offers several advantages, including bypassing anti-spam blacklists.
When an email is sent via an external SMTP relay, the recipient’s email server checks the relay host’s IP address, not yours.
This distinction is crucial because if your server’s IP gets blacklisted for any reason, it won’t affect your email delivery.
As external SMTP relay services typically maintain a positive IP reputation, your emails are more likely to bypass IP blacklists and successfully reach their intended recipients.
In addition to ensuring reliable email delivery, using SMTP relay services can also save you time and money.
Instead of dealing with the complexities of setting up and maintaining a dedicated SMTP server, opting for a trusted SMTP relay service provides peace of mind.
Consider this scenario: If I have an online shop, I need a reliable way to send important emails to my customers. These include purchase confirmations, password reset links, and welcome emails when they sign up.
These types of emails are called Transactional Emails, and they’re crucial because you always want them to reach your customers on time.
Imagine not getting a password reset link promptly – that wouldn’t be ideal, right?
Info: If you’re only hosting WordPress, you can configure it to send emails via external SMTP using a plugin such as FluentSMTP.
Many Email Service Providers (ESPs) can serve as a relay host for Postfix.
Some of these are paid, while others offer both paid plans and free plans that remain free forever.
This tutorial will use SMTP2GO, which offers a free plan allowing you to send 1000 emails per month.
I’ve been using SMTP2GO for a while now for both production and development projects, and I must say, they’re fantastic.
While I won’t go into a full review, I’d like to highlight some of their excellent features:
And, it’s worth noting that I’ve never encountered any issues with their service.
To get started, you’ll need to sign up for a free account on SMTP2GO.
Visit the smtp2go.com website and click on Try SMTP2GO Free.
A pop-up will appear, prompting you to enter your work email address, not a shared one like @gmail.com or @hotmail.com.
After entering your work email, click on Continue and provide your full name and password.
You’ll receive an activation email to confirm your email address.
Open the email and follow the instructions to activate your account at SMTP2GO, completing the signup process.
After you’ve activated your account, you’ll be taken to your account dashboard, which looks like the picture below.
Now, let’s prepare everything for our Postfix setup.
Click on Add a verified sender, which will open a new page where you can specify the domain from which you want to send emails, as shown in the picture below.
You have two choices: Sender domain and Single sender email.
Opt for Sender domain and click on Add a sender domain.
Enter your desired domain and click Continue with this domain.
Note: Make sure your domain is active, and the email address you want to use for sending emails is working. Your domain must have the right MX, DKIM and SPF records set up to send and receive emails properly.
Next, you’ll need to configure DNS records for the domain you’re adding.
SMTP2GO will automatically detect your DNS provider. In my case, it’s Cloudflare.
You’ll need to add just three CNAME records, as illustrated in the picture below.
Note: If you’re using Cloudflare, remember not to enable the proxy option.
Once the records are added, click Verify to proceed. Be patient, as it may take a few minutes for the records to take effect.
After that, SMTP2GO will automatically generate an SSL certificate for your domain.
Now that your domain is verified, the final step is to add an SMTP user.
Navigate to the SMTP Users page under the Sending dropdown menu on the left-hand side and select Add SMTP user.
Choose a username and password, and if desired, provide a description, then click on Add SMTP User.
On the same page, you will also find the SMTP server information and the user you’ve just created. Keep this page open because we’ll need it later for the Postfix setup.
With this, we’ve completed the necessary setup, and we’re ready to start configuring Postfix.
Let’s start installing and configuring Postfix to use the SMTP2GO SMTP server as a relay host.
First, we’ll install Postfix with the following command:
sudo apt install postfix libsasl2-modules
The libsasl2-modules
package helps with something called Simple Authentication and Security Layer (SASL), which makes sure programs can securely send emails through a relay server.
It’s important when setting up Postfix as a relay host.
During the installation process, a pop-up window will appear, prompting you to select a General mail configuration type, as illustrated in the picture below.
Choose the Internet Site option.
Following this, you’ll be asked to input your System mail name, which should be your domain name, as shown in the picture.
Note: Ensure that the domain name matches the one you added to SMTP2GO.
Once you’ve done this, the installation process will continue until it’s complete.
After Postfix is installed, open the main configuration file by using the following command:
sudo vim /etc/postfix/main.cf
At the end of the file, you’ll come across a line that starts with relayhost =
and has an empty value, which is the default.
In our case, this value should be set to the SMTP2GO SMTP server that we want to use as a relay host.
Remember, I mentioned earlier to keep the page open where you added your first SMTP user. You’ll find all the necessary information about their SMTP server there.
Now, set the relayhost
value to mail.smtp2go.com:2525
, as shown below:
relayhost = mail.smtp2go.com:2525
SMTP2GO uses port 2525 for their SMTP server. Other ESPs use different ports, like 587.
If you have trouble with port 2525, SMTP2GO has some other options to use, like 8025, 587, 80, or 25.
Next, add the following lines to the end of the file:
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = static:yourSMTP2GOUsername:yourSMTP2GOPassword
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = may
header_size_limit = 4096000
relay_destination_concurrency_limit = 20
Replace yourSMTP2GOUsername
and yourSMTP2GOPassword
with the SMTP user and password you created.
Here’s what each directive means:
smtp_sasl_auth_enable
: enables SASL authentication.smtp_sasl_password_maps
: tells which username and password to use for SASL authentication.smtp_sasl_security_options
: controls the security options for SASL authentication. “noanonymous” ensures that authentication isn’t anonymous. A valid username and password must be provided to authenticate, just like the SMTP2GO SMTP user you added earlier.smtp_tls_security_level
: sets how safe email encryption should be. “may” means that TLS encryption is optional, and if the receiving server supports it, the connection will be encrypted.header_size_limit
: specifies the maximum allowed size for email headers in bytes.relay_destination_concurrency_limit
: decides how many connections Postfix can make to the relay destination at the same time when sending email.Don’t forget to restart Postfix for the changes to take effect:
sudo systemctl restart postfix
Now, the last thing we need to do is install the mailutils
package, as it provides the mail
command used by many programs to send emails.
If you don’t install it, several programs won’t be able to send you emails, such as Unattended Upgrades.
To install it, use the following command:
sudo apt install mailutils
By following these steps, you’ve successfully configured Postfix to use SMTP2GO SMTP server as a relay host.
Now, it’s time to test our setup.
We can test our Postfix setup by using the mail
command to send a test email and check if our server is now able to send emails.
However, it’s crucial to note something.
It’s very important that your server’s hostname matches the domain you have added to SMTP2GO and intend to use.
For example: If my domain is ivansalloum.com, my hostname should be set to server1.ivansalloum.com or whatever.ivansalloum.com.
Otherwise, if the domain doesn’t match your server’s hostname, you will get an error when sending an email which you could examine in the /var/log/mail.log
file.
Now, something else you should note.
If we use the mail command directly from the command line, the From header would be user@hostname.
For example: If I use the mail command directly from my terminal using root and my hostname is server1.ivansalloum.com, the From header would be root@server1.ivansallom.com.
Now the emails should reach their destination, but they might end up in the spam folder.
We only use the mail
command for testing.
If the emails end up in the spam folder, it still shows that our server can send emails.
However, emails generated from programs like email alerts and sent from your server will not land in spam.
This is because the From header will show as root@ivansalloum.com, which appears like a real address, even if there’s no active mailbox for the root user.
For example, email reports sent from Unattended Upgrades won’t land in the spam folder.
Now, let’s use the mail
command:
sudo mail -s <subject> hello@ivansalloum.com
This will send an email from the root user to hello@ivansalloum.com.
If it lands in the spam folder, no problem, as I only want to know if my server is able to send emails.
If you want to ensure your emails don’t end up in spam, take a look at my guide on automating security updates. In it, I show how to receive alerts via email and manually trigger an update to test if emails are working.
And there you have it!
Now you know how to configure Postfix to be a super reliable email sender using a free SMTP relay service.
I hope this tutorial has been of great help to you.
If you found value in this tutorial or have any questions or feedback, please don’t hesitate to share your thoughts in the comments section below.
Your input is greatly appreciated, and you can also contact me directly if you prefer.
Hi, thank you for the amazing guide.
I was wondering if there is a way to send a test email to confirm that postfix is working.
Is that possible?
I’m happy to help! I updated the guide and added a section about testing Postfix.