Where can I tell exim to run a shell/php command everytime a new mail has been delivered to a virtual mailbox. It does not matter to which user the mail is delivered?

link|improve this question
feedback

3 Answers

up vote 0 down vote accepted

You want to look at shadow_transport.

For local deliveries (only), if delivery succeeds and the Transport references another Transport in its shadow_transport option, then that second transport will also be invoked.

You'd then have that second Transport be a driver = pipe transport.

Eg:

maildir_delivery:
  driver = appendfile
  directory = ...blah blah whatever ...
  maildir_format
  # various other maildir extension options if needed
  shadow_transport = audit_delivery

audit_delivery:
  driver = pipe
  command = /some/path/to/some/command with some options
  user = audituser
  group = mail
link|improve this answer
feedback

Given that you apparently have a real user to deliver to, you probably want to look into using a .forward file, or possibly procmail if you want to get a bit fancier (such as if you only want to run the command for a subset of messages delivered to the user).

link|improve this answer
Unfortunately I am having a multi user/domain system via exim4/mysql/courier-imap I meant with local user, that this user is terminated in my system. But it should be called disjunct from the user recieving the mail. – user28047 Dec 28 '09 at 19:51
"local user" has very specific meaning with MTAs, you might want to edit your question to say "virtual mailbox" if you're running that sort of system. – womble Dec 28 '09 at 22:52
thx, I have corrected the question. – user28047 Dec 30 '09 at 12:29
feedback

The easyes way I found was creating a new router afterwards delivering to the local users containing: runscript: driver = accept transport = run_script unseen no_expn no_verify

so, the mail is still handeld the way it should be and my script is run, with the right transport f.e.: run_script: debug_print = "T: run_script for $local_part@$domain" driver = pipe path = "" command = ""

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

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