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á $input
vazio (embora funcione com qualquer outra string). O e-mail está sendo processado e depois removido/descartado.Então aqui estão minhas 2 perguntas:
Como posso acessar o conteúdo do email a partir do script?
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.