
Sending reliable emails directly from a Linux server used to be straightforward, but in today’s world, inboxes are protected by spam filters, authentication requirements, and more. If you’re managing a Linux-based server and need to send emails—whether they’re for user notifications, password resets, newsletters, or system alerts—you’ll need a reliable system. That’s where combining Postfix, a powerful mail transfer agent, with Mailgun, a robust transactional email API, creates a powerful, scalable email-sending solution.
Why Choose Postfix and Mailgun?
Postfix is a widely used open-source Mail Transfer Agent (MTA) known for its performance and security. However, sending email directly from your server’s IP address is often unreliable. You may face IP blacklists, lack of proper authentication, or carrier filtering. On the other hand, Mailgun is a cloud-based email service that ensures high deliverability, supports authentication protocols like SPF, DKIM, and DMARC, and comes with great analytics tools.
By configuring Postfix to relay messages through Mailgun, you get the best of both worlds—Postfix’s flexibility and Mailgun’s deliverability.
What You Need
Before you get started, make sure you have the following:
- A Linux server (Debian, Ubuntu, or compatible distribution)
- Postfix installed
- A Mailgun account (sign up at Mailgun.com)
- A verified Mailgun domain

Step 1: Install Postfix
If Postfix isn’t already installed on your system, use the following command:
sudo apt update
sudo apt install postfix
During the installation process, you’ll be prompted to choose a configuration type. Select “Internet Site” and enter the server’s domain name.
Step 2: Set Up Mailgun
After signing up for Mailgun and adding your domain, you’ll need to:
- Verify ownership of the domain by adding DNS records
- Obtain your SMTP credentials (found under Sending » Domain Settings » SMTP Credentials)
- Note down the SMTP server address (usually
smtp.mailgun.org
)
Make sure SPF and DKIM DNS records are properly set; these improve your email authenticity and reduce the chance of being flagged as spam.
Step 3: Configure Postfix to Use Mailgun as a Relay
Now that Mailgun is ready to go, it’s time to tell Postfix to relay emails through it.
- Open the Postfix configuration file:
sudo nano /etc/postfix/main.cf
- Add or update the following lines:
relayhost = [smtp.mailgun.org]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_use_tls = yes smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
- Create the file
/etc/postfix/sasl_passwd
:[smtp.mailgun.org]:587 your_mailgun_username:your_mailgun_password
Replace
your_mailgun_username
andyour_mailgun_password
with your actual Mailgun SMTP credentials. - Secure the file and generate the hash:
sudo chmod 600 /etc/postfix/sasl_passwd sudo postmap /etc/postfix/sasl_passwd
- Restart Postfix:
sudo systemctl restart postfix
Step 4: Send a Test Email
Try sending a test email using the mail
command. If it’s not installed, run:
sudo apt install mailutils
Then send a message:
echo "This is a test email from Linux server" | mail -s "Test Email" recipient@example.com
Check your recipient inbox. If the mail arrives in the inbox (not spam), congratulations! You’ve successfully configured Postfix to use Mailgun.
Step 5: Monitor and Debug
To troubleshoot any issues, examine the mail logs:
sudo tail -f /var/log/mail.log
Mailgun also offers an excellent activity log and analytics platform. Simply log in to your Mailgun dashboard and navigate to “Logs” under your domain to track what’s happening.

Security Best Practices
To keep your email sending secure and effective, follow these security and operational best practices:
- Limit Access: Keep your Mailgun credentials secure and limit access to only necessary accounts.
- Rotate Credentials: Periodically rotate your SMTP credentials.
- Use a Dedicated IP (optional): If you’re sending a large volume of emails, consider requesting a dedicated IP from Mailgun for better reputation control.
Advanced Usage with Postfix
If you’re comfortable editing more advanced Postfix settings, you can configure nuanced rules such as:
- Per-domain relay settings (e.g., use Mailgun for some domains and a local SMTP for others)
- Rate limiting to prevent spamming by mistake
- Integration with software like SpamAssassin or Amavis for enhanced filtering
Benefits of Using Mailgun Over Local SMTP
Let’s break down why relaying emails using Mailgun increases reliability:
- Improved Deliverability: Mailgun maintains trusted IPs and consistent sending policies.
- Authentication & Compliance: Automatic handling of SPF and DKIM records.
- Email Analytics: Track bounces, opens, clicks, and complaints in real time.
- Scalability: Send tens of thousands of emails without tweaking Postfix performance limits.
Common Errors and Fixes
Even with everything set up properly, you might run into some issues. Here are a few common ones and how to resolve them:
- Authentication failed: Double-check your username and password. Beware of any extra spaces or special characters.
- Connection refused: Ensure port 587 is not blocked by your firewall.
- Emails marked as spam: Verify SPF, DKIM, and DMARC are correctly set up in your domain’s DNS settings and avoid common spam trigger words in your email content.
Conclusion
Setting up reliable email delivery from a Linux server doesn’t have to be a daunting task. By integrating Postfix with Mailgun, you take advantage of both a powerful local mail-sending infrastructure and a cloud provider specialized in scaling and authenticating your emails. The result? Your emails are more likely to be delivered, your users are happier, and your operational overhead is reduced.
Whether you’re a system admin managing infrastructure or a developer maintaining backend services, this setup ensures your important messages reach inboxes—not spam folders.