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á $input
vací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:
¿Cómo puedo acceder al contenido del correo electrónico desde el script?
¿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.