Postfix: pasar una copia de un correo electrónico a un script pero entregar el original al buzón

Postfix: pasar una copia de un correo electrónico a un script pero entregar el original al buzón

En realidad, es bastante simple: quiero pasar todos los correos electrónicos entrantes a un script PHP, pero solo como una copia; el correo electrónico original aún se entregará en el buzón como de costumbre.

Parece que no puedo hacerlo funcionar. He probado lo siguiente

(1)Creó un alias general (mysql):

@mydomain.tld   [email protected]

(2)Creó un mapeo de transporte de expresiones regulares en /etc/postfix/mailpipe.cf (básicamente significa: aplicar a todos los correos electrónicos de mydomain.tld)

/.*@mydomain\.tld/   mailpipe:

(3)Lo integré todo en /etc/postfix/main.cf:

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

(4)Se agregó el transporte a /etc/postfix/master.cf:

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

La secuencia de comandos:

#!/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);

Entonces, la configuración parece funcionar, el script se activa en los correos electrónicos entrantes, pero está $inputvacío (aunque funciona con cualquier otra cadena). El correo electrónico se está procesando y luego se elimina/descarta.Así que aquí están mis 2 preguntas:

  1. ¿Cómo puedo acceder al contenido del correo electrónico desde el script?

  2. ¿Cómo puedo evitar que el correo electrónico se descarte después de procesarlo? ¿Hay alguna manera de pasar una copia a la bandeja de entrada como de costumbre y otra al script para su procesamiento?

Respuesta1

Esto se puede lograr usando destinatario_bcc_maps para enviar BCC a todos los correos electrónicos a una dirección solo local que esté configurada para enrutarse a su secuencia de comandos.

Agregue la siguiente línea a /etc/postfix/recipient_bcc. Ejecute "postmap /etc/postfix/recipient_bcc" una vez finalizada la edición. Esto le indica a Postfix que envíe a CCO todos los correos electrónicos donde el dominio coincida con "@yourdomain.tld" con la dirección "robotscript@localhost".

@yourdomain.tld  robotscript@localhost

Agregue la siguiente línea a /etc/postfix/transport. Ejecute "postmap /etc/postfix/transport" una vez finalizada la edición. Esto le indica a Postfix que los correos electrónicos destinados a la dirección "robotscript@localhost" deben entregarse directamente en este servidor y no retransmitirse a ningún otro lugar.

robotscript@localhost :

Agregue las siguientes líneas a /etc/postfix/main.cf para que Postfix use las configuraciones ingresadas anteriormente.

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

Asegúrese de que el parámetro "mydestination" en /etc/postfix/main.cf incluya el valor "localhost".

Agregue la siguiente línea a /etc/aliases. Ejecute "postalias /etc/aliases" una vez finalizada la edición. Esto es lo que realmente pasa los correos electrónicos destinados a "robotscript@localhost" a su script PHP. Su secuencia de comandos debe estar configurada para leer el contenido del correo electrónico de STDIN.

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

Reinicie Postfix y todos sus correos electrónicos deberían copiarse en su script y entregarse a la dirección del destinatario original.

información relacionada