Postfix: Passe uma cópia de um email para um script, mas entregue o original na caixa de correio

Postfix: Passe uma cópia de um email para um script, mas entregue o original na caixa de correio

Na verdade, é muito simples: quero passar todos os e-mails recebidos para um script PHP, mas apenas como uma cópia, o e-mail original ainda será entregue na caixa de correio normalmente.

Eu simplesmente não consigo fazê-lo funcionar. Eu tentei o seguinte

(1)Criado um alias catchall (mysql):

@mydomain.tld   [email protected]

(2)Criado um mapeamento de transporte regex em /etc/postfix/mailpipe.cf (basicamente significa: aplicar a todos os emails de meudomínio.tld)

/.*@mydomain\.tld/   mailpipe:

(3)integrou tudo em /etc/postfix/main.cf:

transport_maps = ... regexp:/etc/postfix/mailpipe.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/....

(4)Adicionado o transporte ao /etc/postfix/master.cf:

mailpipe   unix  -       n       n       -       -       pipe
  flags=FR user=localuser argv=/path/to/my/script.php
  ${nexthop} ${user}

O roteiro:

#!/usr/bin/php -q
<?php
  $file = '/home/localuser/pipe/log.log';
  $input = file_get_contents('php://input');
  file_put_contents($file, $input, FILE_APPEND | LOCK_EX);

Portanto, a configuração parece funcionar, o script é atingido nos e-mails recebidos, mas está $inputvazio (embora funcione com qualquer outra string). O e-mail está sendo processado e depois removido/descartado.Então aqui estão minhas 2 perguntas:

  1. Como posso acessar o conteúdo do email a partir do script?

  2. Como posso evitar que o e-mail seja descartado após o processamento? Existe uma maneira de passar uma cópia para a caixa de entrada normalmente e outra para o script para processamento?

Responder1

Isso pode ser feito usando destinatário_bcc_maps para enviar todos os e-mails com cópia oculta para um endereço somente local configurado para rotear para o seu script.

Adicione a seguinte linha ao /etc/postfix/recipient_bcc. Execute "postmap /etc/postfix/recipient_bcc" após a conclusão da edição. Isso informa ao Postfix para CCO todos os e-mails onde o domínio corresponde a "@seudominio.tld" com o endereço "robotscript@localhost".

@yourdomain.tld  robotscript@localhost

Adicione a seguinte linha ao /etc/postfix/transport. Execute "postmap /etc/postfix/transport" após a conclusão da edição. Isso informa ao Postfix que os e-mails destinados ao endereço "robotscript@localhost" devem ser entregues diretamente neste servidor e não retransmitidos em outro lugar.

robotscript@localhost :

Adicione as seguintes linhas ao /etc/postfix/main.cf para que o Postfix use as configurações inseridas acima.

recipient_bcc_maps = hash:/etc/postfix/recipient_bcc
transport_maps = hash:/etc/postfix/transport

Certifique-se de que o parâmetro "mydestination" em /etc/postfix/main.cf inclua o valor "localhost".

Adicione a seguinte linha ao /etc/aliases. Execute "postalias /etc/aliases" após a conclusão da edição. Isto é o que realmente passa e-mails destinados a "robotscript@localhost" para o seu script PHP. Seu script deve estar configurado para ler o conteúdo do email do STDIN.

robotscript: "|/path/to/your/php_script.php"

Reinicie o Postfix e todos os seus e-mails deverão ser copiados para o seu script e também entregues ao endereço do destinatário original.

informação relacionada