Setup Action Mailbox with Postfix - Part 2
This is the second part of a 2 series tutorial to setup action mailbox with postfix. In this part, we will configure postfix in production server to forward incoming emails to our rails app so action mailbox can process it.
If you haven't read the first part where we setup action mailbox and test it in development, you can read it here.
You should have
- Postfix configured in production server (same server as your rails app)
- Existing app built with rails 6
- Ruby with rbenv setup
Let's login to our production server first.
Step 1: Create bash script
Create a script to forward incoming emails to our rails app inside
$ nano email_forwarder.sh
Add following to the script
cd /path/to/your/project && bin/rails action_mailbox:ingress:postfix URL='https://truemark.com.np/rails/action_mailbox/relay/inbound_emails' INGRESS_PASSWORD='YOUR_INGRESS_PASSWORD'
Replace values of
INGRESS_PASSWORD as described below:
- Copy your home directory for HOME
cd and copy what you get from
- Copy what you get from
which rbenvcommand for PATH and RBENV_ROOT respectively
$ which rbenv
- Copy the password you added previously to
credentials.ymlfile or your ENV file as described in part 1 for INGRESS_PASSWORD
For URL, if your application lived at
https://example.com, the full command would look like this:
bin/rails action_mailbox:ingress:postfix URL=https://example.com/rails/action_mailbox/relay/inbound_emails INGRESS_PASSWORD=YOUR_STRONG_PASSWORD
Step 2: Configure Postfix to Pipe Incoming emails to script
We will follow steps as described here
/etc/postfix/virtual_aliasesto add a catch-all alias; localuser needs to be an existing local user:
/etc/postfix/transportto add a transport mapping. "forward_to_rails" can be whatever you want; it will be used later in
- Next, both transport and virtual_aliases need to be compiled into berkeley db files:
$ sudo postmap /etc/postfix/virtual_aliases
$ sudo postmap /etc/postfix/transport
- Add the transport to
forward_to_rails unix - n n - - pipe
flags=Xhq user=deploy:deploy argv=/usr/local/bin/email_forwarder.sh
We should specify user so script is run by that user and not postfix or nobody.
- Add following in
transport_maps = hash:/etc/postfix/transport
virtual_alias_maps = hash:/etc/postfix/virtual_aliases
You can view postfix log with
tail -f /var/log/mail.log.
You must have everything now to receive email in your rails app. Test it with any of your email provider; just send the email to
email@example.com and check if it is being received in the log. If you have any comments or suggestions, please let me know in comments below.