13

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

19

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.

| improve this answer | |
  • This is exactly what I was looking for... thank you! – 0x6A75616E Feb 12 '10 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 '11 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. – mtnorthrop May 25 '12 at 9:12
  • on MAC you should run postmap hash:/etc/postfix/transport and sudo postfix stop, sudo postfix start – Bang Dao Jul 23 '13 at 8:50
  • this is great. does anyone know how to eliminate duplicates when a message has multiple recipients? – graywh Mar 21 '18 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

| improve this answer | |
  • 2
    Note you might need to sudo apt-get install postfix-pcre beforehand, to avoid… surprises. – mirabilos Jun 15 '15 at 14:01
  • works for me very well! – michael-mammut Jan 12 '17 at 10:00
  • error "User unknown in virtual alias table" – Alex R May 16 '17 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.

| improve this answer | |
  • 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? – Chris Bloom Nov 22 '10 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 '11 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.