Google Cloud works with Mailgun to provide an email service that has a programmatic API, log retention, email personalization, analytics, and email validation.
The following instructions show you how to configure Mailgun as an email relay with Postfix.
Before you begin
- Sign up for and create a new Mailgun account on the Google Cloud Marketplace. 
- Get your credentials. The instructions require that you know your Mailgun SMTP username, password, and hostname. Get your username and password from the Mailgun control panel, under the Domains section. - Depending on how the domain is configured in Mailgun, the SMTP hostname is either - smtp.mailgun.orgor- smtp.eu.mailgun.org.
- Configure your firewall rules to allow outgoing traffic on TCP port - 2525.
Configuring Mailgun as a mail relay with Postfix
Configuring Mailgun as a mail relay allows the Postfix mail transfer agent to forward emails destined for remote delivery.
- Connect to your instance using SSH. - gcloud compute ssh [INSTANCE_NAME]- where - [INSTANCE_NAME]is the name of the VM instance where you want to send email from.
- Become a superuser and set a safe umask. - user@test-instance:~$ sudo su -- root@test-instance:~# umask 077
- Install the Postfix Mail Transport Agent. - Debian- root@test-instance:~# apt update && apt -y install postfix libsasl2-modules- CentOS- root@test-instance:~# yum install postfix cyrus-sasl-plain cyrus-sasl-md5 -y
- When prompted, select the - Local Onlyconfiguration and accept the default choices for domain names.
- Modify the Postfix configuration options. Postfix configuration options are set in the - main.cffile. Open the file with the text editor of your choice.- root@test-instance:~# vi /etc/postfix/main.cf
- If they exist, comment out the following lines. - # default_transport = error # relay_transport = error
- Add the Mailgun SMTP service by adding the following line to the end of the file. - relayhost = [smtp.mailgun.org]:2525
- To enforce SSL/TLS support and configure SMTP authentication for these requests, add the following lines to the end of the file. A simple access and security layer (SASL) module handles authentication in the Postfix configuration. - smtp_tls_security_level = encrypt smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous
- Save your changes and close the file. 
- Generate the SASL password map. - Create a new password file that is ready for standard input. - root@test-instance:~# cat > /etc/postfix/sasl_passwd << EOF
- At the prompt, enter the service details, replacing - YOUR_SMTP_LOGINand- YOUR_SMTP_PASSWORDwith your credentials. See the Mailgun help for instructions on how to view or change your per-domain credentials.- > [smtp.mailgun.org]:2525 YOUR_SMTP_LOGIN:YOUR_SMTP_PASSWORD
- Close and save the file by typing the delimiter, - EOF.- > EOF
 
- Use the - postmaputility to generate a- .dbfile.- root@test-instance:~# postmap /etc/postfix/sasl_passwd- root@test-instance:~# ls -l /etc/postfix/sasl_passwd* -rw------- 1 root root 68 Jun 1 10:50 /etc/postfix/sasl_passwd -rw------- 1 root root 12288 Jun 1 10:51 /etc/postfix/sasl_passwd.db 
- Next, remove the file that contains your credentials because it is no longer needed. - root@test-instance:~# rm /etc/postfix/sasl_passwd
- Set the permissions on your - .dbfile.- root@test-instance:~# chmod 600 /etc/postfix/sasl_passwd.db- root@test-instance:~# ls -la /etc/postfix/sasl_passwd.db -rw------- 1 root root 12288 Aug 31 18:51 /etc/postfix/sasl_passwd.db 
- Finally, reload your configuration to load the modified parameters. - Debian- root@test-wheezy:~# /etc/init.d/postfix restart- CentOS- [root@test-centos ~]# postfix reload
- Test your configuration. Install the - mailxor- mailutilspackage and test your configuration.- Debian- root@test-wheezy:~# apt -y install mailutils- CentOS- [root@test-centos ~]# yum install mailx -y- Send a test message. - root@test-instance:~# echo 'Test passed.' | mail -s 'Test-Email' EMAIL@EXAMPLE.COM- Look in your systems logs for a status line containing - statusand the successful server response code- (250).- Debian- root@test-wheezy:~# tail -n 5 /var/log/syslog- CentOS- [root@test-centos ~]# tail -n 5 /var/log/maillog
For detailed examples and information about other topics including tracking and routing messages, read the Mailgun documentation.
Explore reference architectures, diagrams, and best practices about Google Cloud. Take a look at our Cloud Architecture Center.