Como executar um comando depois de receber um email com o exim4?

1

Onde posso dizer ao exim para executar um comando shell / php toda vez que um novo e-mail for entregue em uma caixa de correio virtual. Não importa para qual usuário o e-mail é entregue?

    
por user28047 27.12.2009 / 23:37

3 respostas

2

Você quer ver shadow_transport .

Para entregas locais (somente), se a entrega for bem-sucedida e o Transporte fizer referência a outro Transporte em sua opção shadow_transport , esse segundo transporte também será chamado.

Você teria então que o segundo transporte fosse um driver = pipe transport.

Por exemplo:

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
    
por 08.03.2010 / 05:44
2

Dado que aparentemente você tem um usuário real para entregar, você provavelmente vai querer usar um arquivo .forward , ou possivelmente procmail se você quiser ser um pouco mais sofisticado (por exemplo, se você quer apenas executar o comando para um subconjunto de mensagens entregues ao usuário).

    
por 27.12.2009 / 23:54
0

A maneira mais fácil que encontrei foi criar um novo roteador depois de entregar para os usuários locais que continham:

runscript:
        driver = accept
        transport = run_script
        unseen
        no_expn
        no_verify

Assim, o e-mail ainda é tratado como deveria e meu script está sendo executado, com o transporte correto, por exemplo:

run_script:
        debug_print = "T: run_script for $local_part@$domain"
        driver = pipe
        path = "<path>"
        command = "<command to be run>"
    
por 27.01.2010 / 18:28