The goal of this blog post is to show how to use OpenSMTPD on FreeBSD in order to deliver local mail to my Google Mail account. The blog post combines knowledge from the manual pages
smtpd.conf(5) with an excellent wiki article listed in Resources section.
Any Google account that has 2-factor authentication enabled prohibits the so-called “less secure” apps from using the standard Google password. In order to overcome this problem, navigate to the Security page in Google Account and then move to Two-factor Authentication section. Generate a new special App Password for the service here.
Install the package by running
# pkg install opensmtpd as root. The next step is to create a new file with password that we have created in previous step. Let’s follow the steps from the manual page:
# touch /usr/local/etc/mail/secrets # chmod 640 /usr/local/etc/mail/secrets # chown root:_smtpd /usr/local/etc/mail/secrets
Put the following line into the newly created file at
/usr/local/etc/mail/secrets. Replace the placeholders with their real values.
aliases file, so the daemon knows how to map our local root user. I decided to copy the original file from
/usr/local/etc/mail/aliases. Inside the copied file replace the following line with the real email address:
# root: firstname.lastname@example.org root: <user>@gmail.com
The final step is to edit the configuration file of the service itself:
# $OpenBSD: smtpd.conf,v 1.10 2018/05/24 11:40:17 gilles Exp $ # This is the smtpd server system-wide configuration file. # See smtpd.conf(5) for more information. table aliases file:/usr/local/etc/mail/aliases table secrets file:/usr/local/etc/mail/secrets # To accept external mail, replace with: listen on all # listen on localhost action "local" mbox alias <aliases> action "relay" relay host smtps://email@example.com:465 auth <secrets> # Uncomment the following to accept external mail for domain "example.org" # # match from any for domain "example.org" action "local" match for local action "local" match from local for any action "relay"
I prefer to leave most of the file intact as it makes future upgrades easier. The
table section refers to our previously created files:
secrets. Since we used label
gmail in the
aliases file, we have to use it here in the
relay section. The local delivery goes to
mbox file, but only for the mail that is not being forwarded to the SMTP server. In our case, it’s every other user than
Now we can finally disable the built-in
sendmail service completely and enable the OpenSMTPD service instead. This can be done by editing
/etc/rc.conf file accordingly:
smtpd_enable="YES" sendmail_enable="NO" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO"
sendmail service first with
# service stop sendmail and then start the OpenSMTPD service with
# service start smtpd. You can also check the logs in the usual place:
$ tail -f /var/log/maillog. Try to send an email to Charlie Root:
echo "It works!" | mail -s "Test from FreeBSD" root. If you did everything correctly, you should receive an email in your inbox immediately. Well done!
I used following blog posts and sites to learn about FreeBSD mail delivery system, OpenSMTPD and on how to use it in conjunction with Google Mail.
- FreeBSD Handbook - Electronic Mail - how to disable
- OpenSMTPD manual pages -
smtpd(8), smtpd.conf(5), smtpctl(8)and others
- OpenSMTPD forward to Google - Wiki page for OpenBSD installation, main source of my inspiration for this blog post
- Google - Sign in with App Passwords - badly maintained help page from Google