Autor YouCode - http://www.youcode.com.ar/postfix/analizar-email-con-php-y-postfix-189
Este tutorial explica como analizar un E-Mail con PHP y Postfix
Antes de comenzar, es importante haber leido el siguiente tutorial:http://www.youcode.com.ar/postfix/lanzar-script-php-cuando-llega-un-email-en-postfix-188
Hasta ahora, hemos visto cómo podemos activar un script PHP cuando se recibe un correo electrónico. También sabemos que el correo es enviado en "STDIN" para PHP.
Si echamos un vistazo vemos como es un contenido tipico, en este caso es de un correo de pruebas:
From juanperez@localhost Thu Jan 5 10:04:48 2012 Received: from [127.0.0.1] (localhost.localdomain [127.0.0.1]) by DavidUbuntu (Postfix) with ESMTPS id 740AD380597 for <juanperez@localhost>; Thu, 5 Jan 2012 10:04:48 +0100 (CET) Message-ID: <1325754288.4989.6.camel@DavidUbuntu> Subject: my title From: David Negrier <juanperez@localhost> To: juanperez@localhost Date: Thu, 05 Jan 2012 10:04:48 +0100 Content-Type: text/plain X-Mailer: Evolution 3.2.0- Content-Transfer-Encoding: 7bit Mime-Version: 1.0 contenido del emailPodemos ver una sección con las cabeceras, y el contenido del correo electrónico en la parte inferior.
Esto no es muy fácil de analizar, y será aún más complicado si tenemos los archivos adjuntos. Así que analizar esto a mano no es realmente una buena idea.
En cambio, lo que se puede utilizar son unas clases PHP escritas para analizar los MIME:
Este es un ejemplo con la clase Zend_Mail_Message Zend Framework;
#!/usr/bin/php <?php require_once "Zend/Mime.php"; require_once "Zend/Mail/Message.php"; require_once "Zend/Mail.php"; $file = fopen("/tmp/postfixtest", "a"); fwrite($file, "Script successfully ran at ".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); // Initialize email object using Zend $emailObj = new Zend_Mail_Message(array('raw' => $email)); // Let's fetch the title of the mail fwrite($file, "Received a mail whose subject is: ".$emailObj->subject."\n"); // Let's extract the body from the text/plain piece of the email if($emailObj->isMultipart()) { foreach (new RecursiveIteratorIterator($emailObj) as $part) { try { if (strtok($part->contentType, ';') == 'text/plain') { $body = trim($part); break; } } catch (Zend_Mail_Exception $e) { // ignore } } if(!$body) { fwrite($file, "An error occured: no body found"); } } else { $body = trim($emailObj->getContent()); } // Let's write the body of the mail in our "/tmp/postfixtest" file fwrite($file, "Body of the mail:\n".$body."\n"); fclose($file); ?>con esto ya podemos analizar un E-Mail con PHP cuando es recibido por postfix
http://www.youcode.com.ar/postfix/analizar-email-con-php-y-postfix-189