On macOS, if we want to forward local email to an external account on Gmail, e.g. for crontab results or other automation, we can use the default postfix server and just reconfigure it to deliver the mails externally.

Note: this assumes local usernames match the user part of the email.

On /etc/postfix/main.cf add the following lines:

myorigin = <enter your public domain here>

relayhost = [smtp.gmail.com]:587

smtp_sasl_auth_enable = yes

smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

smtp_sasl_security_options = noanonymous

smtp_sasl_mechanism_filter = login

smtp_use_tls = yes

Generate a dedicated app password on Google Account's page at myaccount.google.com/apppasswords.

On /etc/postfix/sasl_passwd add your username and the dedicated app password:

[smtp.gmail.com]:587 <your email>:<password>

Protect the /etc/postfix/sasl_passwd:

sudo chmod 600 /etc/postfix/sasl_passwd

Update the postfix password file:

sudo postmap /etc/postfix/sasl_passwd

Restart postfix:

sudo launchctl stop org.postfix.master

sudo launchctl start org.postfix.master

Look at the logs to confirm the service is working properly:

sudo log stream --predicate  '(process == "smtpd") || (process == "smtp")' --info &

Send a test email:

echo Hello World | mail -s "Test Subject" <my email>

Check for queued emails:

sudo mailq

Clear the queue in case of pending emails due to tests or bad configuration:

sudo postfix flush