Configure Postfix to Forward E-mail to an External Address

Overview

If you’re new to running your own web server or VPS, you may find the need to configure email addresses. Due to it’s popularity and proven stability, Postfix was used for this example and was tested used Debian 6 Squeeze. The following tutorial will outline the steps required for creating new email address for virtualhosts hosted on your server that forward to an external email address such as Yahoo! Mail, Gmail, Hotmail, or any other address that you desire.

Step 1 - Configure /etc/postfix/virtual

Configure virtual, adding entries for any new email addresses, accounts that are associated with them, and where you would like to forward the email to.

$ sudo nano /etc/postfix/virtual

Sample: (/etc/postfix/virtual)

person1@example.com person
person1 person1@realemail.com
person2@example.com person
person2 person2@realemail.com

Step 2 - Configure /etc/postfix/main.cf

Configure main.cf, adding entries for any new domains that you intended to use for e-mail. $ sudo nano /etc/postfix/main.cf

Sample: (/etc/postfix/main.cf)

# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = hostname.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = localhost, localhost.localdomain, localhost, domain1.com, domain2.com
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_alias_domains = domain1.com, domain2.com
virtual_alias_maps = hash:/etc/postfix/virtual

Step 4 - Testing and Debugging

To test the configuration, simply send an e-mail to the new address to confirm that it’s functional. If you do not receive an e-mail or get a error response from the server, you can check the mail log with the following command: cat /var/log/mail.info

References

About the author

Will works as a technical lead for Kanopi Studios and provides Drupal support for a wide range of amazing projects. He current resides in South Carolina along with his wife, son and two dogs. When not working on tech projects, Will enjoys spending time with family and photographing the stars.