martes, 8 de mayo de 2012

Funciones : Mail_() - Error_log() - Pear_mail()



FUNCION MAIL()

Para enviar emails sencillos en modo texto el uso de la función mail() es sin lugar a dudas lo más cómodo. Su uso es el siguiente:

mail('direccion@del.destinario.com','Asunto','Mensaje');
 
Devuelve TRUE en caso de éxito y FALSE en caso contrario. También podemos pasarle cabeceras adicionales como cuarto parámetro, esto puede ser útil, por ejemplo, para enviar mensajes HTML usando mail() pero a la mínima q necesites enviar emails un poco más complejos es recomendable usar las PEAR.

FUNCION ERROR_LOG()

Para todos aquellos emails de debug o alertas internas de nuestro software podemos usar error_log(). Con esta función podemos hacer log a distintos destinos: el log del sistema, un archivo, la conexión de debug y también enviar por email. Por ejemplo para enviarnos por email información acerca de una exception q nos salta en nuestro código:

try {
  // código con posibles errores
} catch (Exception $e) {
  $msg = 'ERROR #'.$e->getCode()."\n";
  $msg .= $e->getMessage()."\n";
  $msg .= print_r($e->getTrace(),true);
  @error_log($msg, 1, 'direccion@del.destinario.com');
}

CLASE PEAR MAIL_MINE

Como comentaba esta es una de las clases existentes para el envío de emails con soporte de extensiones MIME, lo que permite enviar HTML con imágenes, vídeo, archivos adjuntos, etc. Este es un ejemplo sencillo de como enviar un email HTML con su versión texto y con un archivo adjunto:

require_once 'Mail.php';
require_once 'Mail/mime.php';
$destinario = 'direccion@del.destinario.com';
$from = 'direccion@del.from.com';
$asunto = 'Asunto del mensaje';
$mensaje = '<html><head><title>'.$asunto.'</title></head>'."\n";
$mensaje .= '<body><p><h1>Hola</h1></body></html>';
$mime = new Mail_mime("\n");
$mime->setTXTBody (strip_tags($mensaje));
$mime->setHTMLBody($mensaje);
$mime->addAttachment('fichero_adjunto.zip', 'application/zip');
$body = $mime->get();
$hdrs = array('From' => $from, 'Subject' => $asunto);
$hdrs = $mime->headers($hdrs);
$mail =&Mail ::factory('mail');
$res = $mail->send($destinario, $hdrs, $body);
if (PEAR::isError($res)) echo 'error enviando el email';
 
Todos los métodos anteriormente descritos necesitan de un servidor de correo funcionando y las directivas de configuración del PHP correctamente fijadas. Si tienes un ISP un poco decente casi seguro q no tendrás ningún problema.
Una técnica alternativa a todos estos métodos y que no necesita de servidor de correo es usar sockets (función fsckopen()) para mandar nosotros mismos los mensajes desde nuestro código. Se trata de hacer desde PHP el trabajo q antes nos hacía el servidor. Esto, en general, no es recomendable ya q puede presentar serios problemas d rendimiento y gestión de errores (nunca funcionará mejor nuestro código PHP q unQmail:) y la única ventaja destacable q presenta, a parte de no necesitar d un servidor d correo, es disponer de un mayor control de lo que pasa cuando se envía el email. Podemos por ejemplo saber en el momento si el servidor del destinatario del correo existe y nos acepta el mensaje, etc... Aunque con los métodos descritos y leyendo los mensajes devueltos por el servidor de correo también puedes saber si todo va bien... como consejo, si tienes un servidor de correo úsalo.

No hay comentarios:

Publicar un comentario