



PEAR:Mail y PHPMailer
En el entorno de PHP, existen dos clases que potenten que nos ofrecen una interfaz para el envio de e-mails, en este articulo veremos dos ejemplos y compararemos en una prueba unitaria los tiempos totales de ejecución.
PHP, ofrece una función nativa mail que permite enviar e-mail, el problema es que no ofrece una interfaz "amigable" para realizar ciertas tareas que serian muy complejas solo con la función mail (adjuntar imagenes y archivos,utilizar distintos smtp,etc.). Para lo cual podemos utilizar las dos mas grandes alternatives (PEAR:Mail y PHPMailer).
PEAR:Mail
PEAR es un entorno de desarrollo y distribucción de componentes escritos en PHP, en donde se aloja el Proyecto PHP:Mail que data desde el 2002. Actualmente PEAR:Mail mantiene dos ramas, la 1.12.x para PHP5 y 1.11.x para PHP4. Hay dos formas de instalar PEAR, una es descargar y descomprimir los paquetes de cada componente o instalar el gestor de componentes PEAR, este ultimo se puede instalar utilizando el gestor de aplicaciones de tu distribución Linux (apt,yum,etc.) o ejecutando el archivo go-pear.php (con el interprete de PHP, php -q go-pear.php). Para obtener mas información de PEAR visite la documentación.
1.- Instalar PEAR:Mail a traves del gestor pear
pear install Mail
pear upgrade Mail
2.- Ejemplo
En este ejemplo, vamos a iterar sobre un arreglo de correos y enviar a todos el mismo correo, utilizando el smtp de google.
<?php // Example by deerme.org $pear = "/usr/share/php5/php/"; ini_set("include_path",ini_get("include_path").":$pear"); require_once("Mail.php"); require_once("Mail/mime.php"); // Data Mail $sender = "myuser@gmail.com"; $recipients = array("dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org"); $subject = "Etiam consectetur laoreet porttitor"; $text = 'Nam suscipit lorem vitae turpis tempor'; $html = '<html><body><p>Nam suscipit lorem vitae turpis tempor</p></body></html>'; // Config $crlf = "n"; $config = array( "host" => "ssl://smtp.gmail.com", "port" => "465" , "username" => "myuser@gmail.com" , "password" => "password" , "auth" => true ); $headers = array('From'=> $sender,'Return-Path'=>$sender,'Subject'=> $subject); // Instance Mail $xmail = new Mail_mime($crlf); $xmail->setTXTBody($text); $xmail->setHTMLBody($html); // Attachment $xmail->addAttachment("/tmp/pdf.pdf", "application/pdf", "", true); $xmail->addAttachment("/tmp/image.jpg", "image/jpeg", "", true); // Get Body and Headr $body = $xmail->get(); $headers = $xmail->headers($headers); // Using Mail Factory to Send $smail =& Mail::factory('smtp', $config ); // Using Mail Factory to send function => $smail =& Mail::factory('mail'); foreach( $recipients as $k => $recipient ) { $smail->send($recipient, $headers, $body); } /* real 0m50.718s user 0m0.164s sys 0m2.660s */ ?>
PHPMailer
El Proyecto PHPMailer aparece en el año 2001 en su primer release y a la fecha mantiene dos versiones para PHP 4 y 5. La instalación es similar a cualquier otra clase de php, simplemente debe estar en un directorio, y los script que requieran la clase deben incluir el include/require con la ruta de la clase.
1.- Ejemplo
<? // Example by deerme.org require_once 'phpmailer/class.phpmailer.php'; // Data Mail $sender = "myuser@gmail.com"; $recipients = array("dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org","dummy1@dummy.org"); $subject = "Etiam consectetur laoreet porttitor"; $text = 'Nam suscipit lorem vitae turpis tempor'; $html = '<html><body><p>Nam suscipit lorem vitae turpis tempor</p></body></html>'; // Config $crlf = "n"; $config = array( "host" => "ssl://smtp.gmail.com", "port" => "465" , "username" => "myuser@gmail.com" , "password" => "password" , "auth" => true ); $xmail = new PHPMailer(); $xmail->SetLanguage("en","PhpMailer/language/"); $xmail->From = $sender; $xmail->Subject = $subject; $xmail->AddAttachment("/tmp/pdf.pdf", "pdf.pdf"); $xmail->AddEmbeddedImage ("/tmp/image.jpg","3f7392db67ca82d7cfce6e714296ea3d","image.jpg","base64","image/jpg"); $xmail->Body = $html; $xmail->IsHTML (true); $xmail->IsSMTP(); $xmail->Host = $config["host"]; $xmail->Port = $config["port"]; $xmail->SMTPAuth = $config["auth"]; $xmail->Username = $config["username"]; $xmail->Password = $config["password"]; foreach($recipients as $k => $recipient) { $xmail->AddAddress($recipient); $xmail->Send(); $xmail->ClearAddresses(); } /* real 0m44.871s user 0m0.092s sys 0m0.464s */ ?>
Ejecución de los Ejemplos
Correremos los ejemplos en un entorno virtualizado, exactamente en una maquina virtual con debian squeezy, en definitiva compararé ambos script con la función time para determinar el tiempo total de ejecución.
Ambos enviarán un total de 20 Correos utilizando una cuenta gmail.com
copiapo:/var/www/php/examples# time php mail.pearmail.php real 0m50.718s user 0m0.164s sys 0m2.660s copiapo:/var/www/php/examples# time php mail.phpmailer.php real 0m44.871s user 0m0.092s sys 0m0.464s
En definitiva, ambos script tienen un tiempo de ejecución similar, hay que señalar que ambos tienen un tiempo de envio que no es controlado por ellos (depende de otros factores ancho de banda,cpu,etc.) podemos concluir que ambos Proyectos son maduros,estables,amigables y similares.
Comentarios
Pedro V. : :)
Ultima Actividad
Articulos
Manual
Favoritos
Proyectos
Enlaces a mis classes,proyectos,ideas,etc para compartir xD
- PHP StreamSteganography Oculta información en imagenes (phpclasses)
- PHP pserver Handle TCP socket server connections (phpclasses)
Nahir : Jaja, muy bueno :P