DEV Community

Nick Lafferty
Nick Lafferty

Posted on • Originally published at

Intelligent Email Filtering with Mailgun

I’ve had a personal website since I was in college. It’s gone through lots of iterations as I’ve transitioned from student life to working full time. As a marketer applying for jobs I think having a website makes me stand out from other applicants. It also helped that I had this kind of ridiculous headshot of me in a suit sitting in the middle of the woods.

I’ve always had a link to my email on the website. I feel like this is just good practice, and it’s the best way for internet people to get in touch with me. The problem is bots scrape my email from the website and send unsolicited spam about boosting SEO rankings or other junk offers. I keep my spam folder tidy, even go as far as unsubscribing from spam I get (when they actually give me the option to). But sometimes they don’t give you the option to unsubscribe, or they make it really obtuse, or they ask you to reply back to them to unsubscribe which is the WORST.

Here’s where Mailgun comes in. Mailgun has a routes feature for inbound mail that lets you forward mail from a domain you own to any address. I forward email from my custom domain to my gmail so I don’t have to give my main email address out to the world.

But I don’t want to forward every single email that address gets. I want to stop some email before it gets to my inbox based on it’s content, like those junk SEO offers.

This is how I use Mailgun to do that.

First, add your domain to Mailgun. They’ve written some great guides on how to do this so I won’t repeat that here. You’ll also want to verify ownership of your domain by adding a few DNS records - adding MX records is required for Mailgun to process inbound mail. I wrote a step-by-step guide here.

I’d also recommend setting up 2 Factor Authentication on your account to make sure it’s as secure as possible.

Next you’ll want to go to the Receiving page in the interface. This is where you’ll setup your rules to forward email and to stop spam. I have my rules in two groups:

Match Recipient
This is how you can forward email from the domain you added to Mailgun to any other email address you own. You have the option of forwarding only specific addresses (like, or you can create a catch all that forwards mail sent to any address. In my example I forward one email on my custom domain to my gmail address. I recommend against forwarding all email to your domain, because spammers will send junk email to common names @ your domain.

I set this rule up as priority 1. Mailgun routes are processed in ascending order, starting from 0. So I want my filtering rules to process first, block any spam, and then if email passes my filters it will forward to my real email.

  1. Match Headers I have 2 rules setup for this. The first rule looks for emails with “re:” in the subject, or “serp” in the body. I kept getting spam emails that looked like forwarded emails, which all began with “re:”.

The second rule looks for emails with “SEO” in the subject or body.

Here's how I have them setup. Screen-Shot-2019-07-21-at-3-05-11-PM.png

You can filter based on subject line, body, or any other data in the header itself. I setup my filters to catch common spam emails that I wanted to block.. Once you setup your filter, you need to decide what action to take. The proper action here is stop, which will do nothing to the emails, as long as the priority is lower than your forward filter.

Once your filters are setup you can go to the Logs page to see what emails you’re getting. Any email that passes your filter will show as ‘Delivered’, emails that don’t will stop at ‘Accepted’.


Have you thought of any creative ways to use Mailgun’s routes feature? Let me know!

Disclosure: I currently work at Mailgun. I used their product for years before I started working there. This is not an advertisement.

Top comments (0)