Autor YouCode - http://www.youcode.com.ar/postfix/lanzar-script-php-cuando-llega-un-email-en-postfix-188
En este tutorial, vamos a ver cómo activar un script PHP cada vez que el servidor web recibe algún correo.
Vamos a añadir nuestro filtro. Lo hacemos en el archivo master.cf que contiene la lista de todos los procesos que se ejecutan cuando se entrega un correo electrónico.myhook unix - n n - - pipe flags=F user=www-data argv=/path/to/postfix.php ${sender} ${size} ${recipient}Hemos registrado un script llamado "myhook".
Quedémonos en master.cf. Ahora tenemos que decirle a Postfix cuando ejecutar ese script.
Para ello, vamos a editar la línea smtp y cambiarla de esta manera:
smtp inet n - - - - smtpd -o content_filter=myhook:dummyEl -o content_filter = myhook: dummy le dice Postfix que ejecute el filtro para todo el correo que llega a través de la entrega SMTP.
NOTA si envias un e-mail utilizando el comando "sendmail", el filtro no se disparará. En este caso, añadir la opción siguiente después del método de entrega "pickup":
pickup fifo n - - 60 1 pickup -o content_filter=myhook:dummyNo olvidar: después de cambiar un archivo de configuración, debe ejecutar el comando:
postfix reloadAhora, vamos a escribir el script PHP. Vamos a llamarlo "postfix.php"
Lo primero que quiero hacer es hacer que el script tenga permisos de lectura/escritura por cualquier persona (podemos fortalecer los derechos más adelante):
chmod +rx postfix.phpEl script debe poder se ejecutado desde la línea de comandos, por lo que debe comenzar con: # !/ usr / bin / php
(asumiendo que su PHP CLI se encuentra en / usr / bin / php)
Primero vamos a escribir un script que no hace nada, excepto escribir una línea en un archivo temporal en "/ tmp / postfixtest".
#!/usr/bin/php <?php $file = fopen("/tmp/postfixtest", "a"); fwrite($file, "Script successfully ran at ".date("Y-m-d H:i:s")."\n"); fclose($file); ?>Ahora, vamos a ejecutarlo desde la línea de comandos:
su www-data ./postfix.phpcomprobamos que si funciona. Si ve líneas agregadas en "/ tmp / postfixtest", el script funciona.
Es importante "su" en el usuario que ejecutará el script, ya que esta es la única manera de saber si hay algún problema de seguridad que podría ocurrir.
Si el script está funcionando bien, ahora puedes probar enviando un correo electrónico.
El correo debe estar completamente redirigido a nuestro filtro.
Te darás cuenta de que tu script PHP se está ejecutando (mirando el "/ tmp/postfixtest") , y también nos daremos cuenta que el correo fue enviado de una forma no normal, o sea que a pasado por el filtro.
Si se enfrentan a un problema, el primer lugar para buscar es en los registros de log.
En Ubuntu y Debian, la ubicación predeterminada de los registros es: / var / log / mail.log
Ahora, vamos a crear un script un poco más útil:
#!/usr/bin/php <?php $file = fopen("/tmp/postfixtest", "a"); fwrite($file, "Script funcionando ".date("Y-m-d H:i:s")."\n"); // read from stdin $fd = fopen("php://stdin", "r"); $email = ""; while (!feof($fd)) { $line = fread($fd, 1024); $email .= $line; } fclose($fd); fwrite($file, $email); fclose($file); ?>
Este script lee el mensaje electrónico que se envía por stdin (la entrada unix estándar).
Se escribe el resultado en nuestro archivo "/ tmp / postfixtest". Así que ahora, se puede ver el contenido del correo en el archivo.
Hagamos que solo funcione para una determinada cuenta de E-Mail
Para ello, tendremos que escribir un archivo de configuración "access". En este archivo de configuración, podemos escribir lo que debe ser filtrado;ejemplo del contenido del archivo
juanperes@dominio.com FILTER myhook:dummyEste archivo dice que los correos de "juanperez@dominio.com" deben ser entregados a nuestro filtro.
Postfix no sabe cómo leer un simple archivo "access". Debemos dejarlo como Postfix puede leerlo:
postmap /etc/postfix/accessEl comando postmap debe crear un archivo /etc/postfix/access.db. Se trata de una versión de "hash" del archivo de configuración "Acceso" que puede leer rápidamente Postfix.
Por último, hay que hacer referencia al archivo de "acceso" en el archivo main.cf.
Busque la directiva smtpd_recipient_restrictions y añadir al principio de la directiva:
check_recipient_access :/ etc/postfix/acceso
Directiva siguiente si no está presente en main.cf, agreguela cono la siguiente línea:
smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/access, permit_mynetworks, reject_unauth_destinationesto asegura que se utilice el archivo "acceso".
Finalmente, reiniciamos postfix
postfix reloadEn otro tuto veremos como analizar un correo con php zend (zend framework)
http://www.youcode.com.ar/postfix/lanzar-script-php-cuando-llega-un-email-en-postfix-188