14

I am setting up a testing server for a web based application that sends some email notifications.

Sometimes testing is performed with real customer data, and for that reason I need to guarantee that the server is not able to send emails to our real customers while we're testing.

What I want is to configure postfix so that it takes any outgoing email and redirects it to a single email address, instead of delivering to the real destination.

I am running Ubuntu server 9.10.

Thank you in advance

3 Answers 3

21

Set up a local user to receive all trapped mail:

adduser mailtrap

You need to add in main.cf:

transport_maps = hash:/etc/postfix/transport
luser_relay = mailtrap

Then create /etc/postfix/transport with this in there:

localhost :
your.hostname.example.com:
* local:mailtrap

Save an then run: postmap /etc/postfix/transport finally restart postfix invoke-rc.d postfix restart

All local email will be delivered normally and external email will be delivered to the local mailtrap account.

5
  • This is exactly what I was looking for... thank you!
    – 0x6A75616E
    Feb 12, 2010 at 23:29
  • 3
    Works for me but only after I added luser_relay = xxxxx in main.cf. Without this the emails would bounce.
    – Alex R
    May 29, 2011 at 0:57
  • 1
    When using Ubuntu, you can also restart Postfix with sudo service postfix restart. The location of your main.cf file mentioned above is /etc/postfix/main.cf. When first installing and setting up Postfix, you can use the Local only installation option. May 25, 2012 at 9:12
  • on MAC you should run postmap hash:/etc/postfix/transport and sudo postfix stop, sudo postfix start
    – Bang Dao
    Jul 23, 2013 at 8:50
  • this is great. does anyone know how to eliminate duplicates when a message has multiple recipients?
    – graywh
    Mar 21, 2018 at 18:33
10

Better is to create a virtual alias file:

In /etc/postfix/main.cf:

virtual_alias_maps = pcre:/etc/postfix/virtual

In /etc/postfix/virtual:

/.*@.*/ root

You can replace root with whichever user you'd like to receive all the outgoing e-mail. This pattern can be tweaked if you want local mail to be delivered normally (without redirection):

/.*@(?!hostname\.localdomain$).*/ root

Original idea found here: Postfix development server - intercept all outgoing mail

3
  • 2
    Note you might need to sudo apt-get install postfix-pcre beforehand, to avoid… surprises.
    – mirabilos
    Jun 15, 2015 at 14:01
  • works for me very well! Jan 12, 2017 at 10:00
  • error "User unknown in virtual alias table"
    – Alex R
    May 16, 2017 at 22:36
5

Postfix provides something called smtp-sink. By default it blackholes all of the email it receives. Later versions can also be configured to capture the email in files.

This doesn't technically use postfix (but a utility provided by postfix.) It also doesn't technically redirect each email to a single email address. But it does capture all traffic on port 25 and dumps that to a file that can be parsed.

2
  • How does one invoke smtp-sink? The one manpage I found online made it look like it's a normal program, but if it came with postfix it's not installed on my system (OSX 10.6). How would I run this a service? Nov 22, 2010 at 1:26
  • There is a manpage for smtp-sink. But some parameters are described here, too: blog.malowa.de/2011/04/postfix-as-spam-trap-server.html
    – mailq
    Aug 16, 2011 at 9:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.