Logo
You
Code

Analizar E-Mail con php y postfix

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 email
Podemos 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