Postfix is an MTA (Mail Transfer Agent), an application used to send and receive email. In this tutorial, we will install and configure Postfix so that it can be used to send emails by local applications only – that is, those installed on the same server that Postfix is installed on.
Why would you want to do that?
If you’re already using a third-party email provider for sending and receiving emails, you, of course, do not need to run your own mail server. However, if you manage a cloud server on which you have installed applications that need to send email notifications, running a local, send-only SMTP server is a good alternative to using a 3rd party email service provider or running a full-blown SMTP server.
An example of an application that sends email notifications is OSSEC, which will send email alerts to any configured email address (see How To Install and Configure OSSEC Security Notifications on Ubuntu 14.04). Though OSSEC or any other application of its kind can use a third-party email provider’s SMTP server to send email alerts, it can also use a local (send-only) SMTP server.
That’s what you’ll learn how to do in this tutorial: how to install and configure Postfix as a send-only SMTP server.
Note: If your use case is to receive notifications from your server at a single address, emails being marked as spam is not a significant issue, since you can whitelist them.
If your use case is to send emails to potential site users, such as confirmation emails for message board sign-ups, you should definitely do Step 5 so your server’s emails are more likely to be seen as legitimate. If you’re still having problems with your server’s emails being marked as spam, you will need to do further troubleshooting on your own.
Note: As of June 22, 2022, DigitalOcean is blocking SMTP for all new accounts. As a part of this new policy, we have partnered with SendGrid so our customers can still send emails with ease. You can learn more about this partnership and get started using SendGrid by checking out our DigitalOcean’s SendGrid Marketplace App.
Please complete the following prerequisites.
sudo
privilegeshostname
at the command prompt. The output should match the name you gave the Droplet when it was being created, such as example.comIf all the prerequisites have been met, you’re now ready for the first step of this tutorial.
In this step, you’ll learn how to install Postfix. The most efficient way to install Postfix and other programs needed for testing email is to install the mailutils
package by typing:
sudo apt-get install mailutils
Installing mailtuils will also cause Postfix to be installed, as well as a few other programs needed for Postfix to function. After typing that command, you will be presented with output that reads something like:
The following NEW packages will be installed:
guile-2.0-libs libgsasl7 libkyotocabinet16 libltdl7 liblzo2-2 libmailutils4 libmysqlclient18 libntlm0 libunistring0 mailutils mailutils-common mysql-common postfix ssl-cert
0 upgraded, 14 newly installed, 0 to remove and 3 not upgraded.
Need to get 5,481 kB of archives.
After this operation, 26.9 MB of additional disk space will be used.
Do you want to continue? [Y/n]
Press ENTER to install them. Near the end of the installation process, you will be presented with a window that looks exactly like the one in the image below. The default option is Internet Site. That’s the recommended option for this tutorial, so press TAB, then ENTER.
After that, you’ll get another window just like the one in this next image. The System mail name should be the same as the name you assigned to the Droplet when you were creating it. If it shows a subdomain like mars.example.com, change it to just example.com. When you’re done, Press TAB, then ENTER.
After installation has completed successfully, proceed to Step 2.
In this step, you’ll read how to configure Postfix to process requests to send emails only from the server on which it is running, that is, from localhost. For that to happen, Postfix needs to be configured to listen only on the loopback interface, the virtual network interface that the server uses to communicate internally. To make the change, open the main Postfix configuration file using the nano editor.
sudo nano /etc/postfix/main.cf
With the file open, scroll down until you see the entries shown in this code block.
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
Change the line that reads inet_interfaces = all
to inet_interfaces = loopback-only
. When you’re done, that same section of the file should now read:
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
In place of loopback-only
you may also use localhost
, so that the modified section may also read:
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = localhost
When you’re done editing the file, save and close it (press CTRL+X, followed by pressing Y, then ENTER). After that, restart Postfix by typing:
sudo service postfix restart
In this step, you’ll read how to test whether Postfix can send emails to any external email account. You’ll be using the mail
command, which is part of the mailutils
package that was installed in Step 1.
To send a test email, type:
echo "This is the body of the email" | mail -s "This is the subject line" user@example.com
In performing your own test(s), you may use the body and subject line text as-is, or change them to your liking. However, in place of user@example.com, use a valid email address, where the domain part can be gmail.com, fastmail.com, yahoo.com, or any other email service provider that you use.
Now check the email address where you sent the test message.
You should see the message in your inbox. If not, check your spam folder.
Note: With this configuration, the address in the From field for the test emails you send will be sammy@example.com, where sammy is your Linux username and the domain part is the server’s hostname. If you change your username, the From address will also change.
The last thing we want to set up is forwarding, so that you’ll get emails sent to root on the system at your personal, external email address.
To configure Postfix so that system-generated emails will be sent to your email address, you need to edit the /etc/aliases
file.
sudo nano /etc/aliases
The full content of the file on a default installation of Ubuntu 14.04 is shown in this code block:
# See man 5 aliases for format
postmaster: root
With that setting, system generated emails are sent to the root user. What you want to do is edit it so that those emails are rerouted to your email address. To accomplish that, edit the file so that it reads:
# See man 5 aliases for format
postmaster: root
root: sammy@example.com
Replace sammy@example.com with your personal email address. When done, save and close the file. For the change to take effect, run the following command:
sudo newaliases
You may now test that it works by sending an email to the root account using:
echo "This is the body of the email" | mail -s "This is the subject line" root
You should receive the email at your email address. If not, check your spam folder.
In this step, you’ll be given links to articles to help you protect your domain from being used for spamming. This is an optional but highly recommended step, because if configured correctly, this makes it difficult to send spam with an address that appears to originate from your domain.
Doing these additional configuration steps will also make it more likely for common mail providers to see emails from your server as legitimate, rather than marking them as spam.
Though the second article was written for Debian Wheezy, the same steps apply for Ubuntu 14.04.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
How to add SSL to Postfix as a Send-Only?
@Buggyy
If Postfix was previously installed and set up (perhaps by the droplet bundle itself) the Postfix config screen will not appear as seen in step 1 I had the same prob. This will bring up the Postfix config screen: sudo dpkg-reconfigure postfix
I followed this tutorial and tried step 4 to send an email to my gmail and it doesn’t work.
I fought this issue for a whole day and then some before I finally found a solution. I created my email at myname@mydomain.com through the Google app for business and I could get email through the mail app from any other mail app but could not get it from a form on my site. I searched and searched then I finally destroyed the droplet and started from scratch.
I created a new droplet with a hostname that had nothing to do with my site.
Then I did the initial server setup for Ubuntu 14.04 here https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04
Then set up Apache virtual host from this tuturial https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-14-04-lts
Then finally followed this tutorial.
It seems like the key is not having a host name that is the same as your domain.com name. When using the form on the website the form information will now to go my myname@mydomain.com address in my Google app rather than the local deliver system at /var/mail/user
So my question is: What do I do differently to set up for two separate domain.com’s on one droplet?
Is it going to be as simple as setting up a different user for the 2nd domain? Such as adding user1: user1@domain1.com
then user2: user2@domain2.com
in the /etc/aliases file?
More specifically I use admin@domain1.com and admin@domain2.com. I had been creating both sites with the same user name either user or wp-user as suggested in the tutorial for secure installs and updates for WordPress.
Eventually I would like to setup and use my own mail server but I still have far too much to learn first so for now letting Google App handle it works fine for me.
This guide is outdated and the step by step instructions are no longer valid. There are no postfix configuration screens like shown here.
This worked except for being able to send emails to the domain that the server is running (…if the server is not the mail host. And per another DO article, it shouldn’t be!) For example, if the server is example.com, I cannot successfully send mail to me@example.com because, as it tells me, the server doesn’t know the user ‘me’
So, after concluding all steps above, return to /etc/postfix/main.cf Find the line with ‘mydestination’ Set it to: mydestination = localhost
(I had earlier made the choice: inet_interfaces = localhost maybe that’s important.)
This was the last step to get my Ubuntu 16.04LTS server to send emails. (I had also edited /etc/aliases but that had no effect)
i installed postfix successfully. i am able to send the mails. but there is problem with spam. all emails are going to spam folder when i am sending mails. please help me…
i installed postfix successfully. i am able to send the mails from command prompt. but those mails are going to spam folder . how can i prevent going to spam folder. i need all mails goes to inbox only. anyone help me???
To reconfigure “sudo dpkg-reconfigure postfix” source : https://help.ubuntu.com/community/Postfix
i can send mail, but it sent by screweb.com when i receive it in my gmail account . why?