Send Email on OS X Yosemite through GMail

This guide covers how to utilise the installed postfix program so that it relays local email through google mail. I predominately use this for notifications such as logs of cron tasks that have run. This guide borrows heavily from the references listed at the end.


Launch configuration

Edit /System/Library/LaunchDaemons/org.postfix.master.plist to include OnDemand key. The resulting file should look like:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "">
<plist version="1.0">

Postfix main configuration

Edit /etc/postfix/ to include necessary configuration. Add the following to the end of the file:

relayhost =
smtp_generic_maps = hash:/etc/postfix/generic
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain

Note: the smtp_sasl_mechanism_filter option was required since Yosemite.

Postfix aliases

First, note the username of the user you wish to receive root’s email. If logged in as the user, you can check the value by running:


Edit /etc/postfix/aliases enabling root email to be aliased to your user. Change the following line:

#root:    you

by uncommenting and changing you to your username, e.g.:

root:    username

You need to then run newaliases to pick up the modifications:

cd /etc/postfix
sudo newaliases

Postfix local email to gmail mappings

In order to configure correctly, note the user and hostname you want to map:


Edit /etc/postfix/generic adding mappings of local email to gmail accounts, substituting username, hostname and gmailaccount as appropriate:

username@hostname gmailaccount
@hostname gmailaccount

You need to then run postmap to pick up the modifications:

cd /etc/postfix
sudo postmap generic

SMTP password

Ensure that the password file exists:

cd /etc/postfix
sudo touch sasl_passwd

Edit /etc/postfix/sasl_passwd adding the details for gmail: gmailaccount:gmailpassword

Rebuild the postmap database file and delete the raw file containing the raw password:

sudo postmap sasl_passwd
sudo rm sasl_passwd

Forwarding using .forward

Individual users can use sendmail forwarding by creating ~/.forward containing only the email address to forward to. This will override the accounts configured above, allowing someone without sudo permissions to configure their desired email address.

Run postfix

Run the following commands to ensure postfix is running with the latest configuration:

sudo launchctl unload -w /System/Library/LaunchDaemons/org.postfix.master.plist
sudo launchctl load -w /System/Library/LaunchDaemons/org.postfix.master.plist


Sending to root

Run the following command:

echo $(date) | mail -s "test" root

Sending to username

Run the following command:

echo $(date) | mail -s "test" username

Sending an external email

Run the following command:

echo $(date) | mail -s "test"


If email is not working, the following may help.

Tailing the mail logs

You can look at and tail the mail log for details of what is happening.

tail -f /var/log/mail.log

Spool directory not found

If you get the following error:

sendmail: fatal: chdir /Library/Server/Mail/Data/spool: No such file or directory

Run the following commands to fix it:

sudo mkdir -p /Library/Server/Mail/Data/spool
sudo gzip /usr/share/man/man1/{postalias.1,postcat.1,postconf.1,postdrop.1,postfix.1,postkick.1,postlock.1,postlog.1,postmap.1,postmulti.1,postqueue.1,postsuper.1,sendmail.1}
sudo gzip /usr/share/man/man5/{access.5,aliases.5,bounce.5,canonical.5,cidr_table.5,generic.5,header_checks.5,ldap_table.5,master.5,mysql_table.5,nisplus_table.5,pcre_table.5,pgsql_table.5,postconf.5,postfix-wrapper.5,regexp_table.5,relocated.5,tcp_table.5,transport.5,virtual.5}
sudo gzip /usr/share/man/man8/{anvil.8,bounce.8,cleanup.8,discard.8,error.8,flush.8,local.8,master.8,oqmgr.8,pickup.8,pipe.8,proxymap.8,qmgr.8,qmqpd.8,scache.8,showq.8,smtp.8,smtpd.8,spawn.8,tlsmgr.8,trivial-rewrite.8,verify.8,virtual.8}
sudo /usr/sbin/postfix set-permissions



blog comments powered by Disqus
Fork me on GitHub