martes, 8 de mayo de 2012

9. SESION: Envío de E-mail

·         Función MAIL()

para enviar la información de formularios desde una página de internet a una dirección de correo electrónico . Con esta funcion pueden olvidarse del odioso, obsoleto y poco útil procedimiento del "mailto:albegago@hotmail.com"

Con la función mail() se pueden enviar mensajes con texto simple, sin formato, y también se pueden enviar mensajes con formato HTML, esto es se le puede dar color a las letras, poner en negritas las letras, insertar imagenes, dibujar tablas, etc.

Espero que no sea necesario decir que está función trabaja con servidores que corran PHP... Esta función no sirve si el servidor corre ASP, CFM, etc.

Puede que tu servidor corra PHP, pero algunos proveedores de hospedaje restringen los scripts que puedes utilizar.

La función mail es:

mail($destino, $asunto, $mensaje, $encabezados);

donde

$destino: es la dirección a donde se enviará el mensaje

$asunto: es el asunto del mensaje

$mensaje: es el mensaje en sí

$encabezados: aquí se anexa por ejemplo quien envía el mensaje, si el mensaje va ir con copia para, si el mensaje va ir con copia oculta para, si tendrá formato html, etc.

un ejemplo sencillo sería:

<? //indicamos el inicio de nuestro codigo php
mail("albegago@hotmail.com", "Prueba de correo", "esto es una prueba");
?> // aqui termina nuestro codigo

Lo que hace está línea de código es enviar un mensaje a albegago@hotmail.com, con el asunto: Prueba de correo; y el mensaje: esto es una prueba.

Notese que si estamos usando como valor un STRING, este debe de ir entre comillas.

·         Función ERROR_LOG()

Un log de errores, es un archivo que almacena los errores que se han producido durante la ejecución de un programa, añadir un log de errores a nuestra página, nos permitirá controlar cuando se ha producido un error para corregirlo y evitar que se repita en el futuro.

Para crear un log, abriremos el archivo en modo 'a' (escritura al final) y escribiremos el error indicando la fecha, para simplificar el trabajo lo podemos incluir todo en una función:

<?php
function error($numero,$texto){
$ddf = fopen('error.log','a');
fwrite($ddf,"[".date("r")."] Error $numero: $textorn");
fclose($ddf);
}
?>

Una vez declarada la función, tansolo tendremos que llamarla de la siguiente manera cuando se produzca un error para que se guarde en error.log:

<?php
// Si no existe la cookie sesion
if(!isset($_COOKIE['sesion'])){
// Guardamos un error
error('001','No existe la cookie de sesion');
}
?>

De esta manera, cada vez que un usuario entra a esta página sin la cookie sesion, se almacena una nueva línea en el fichero indicando:

[fecha] Error 001: No existe la cookie de sesion

Vamos a ver ahora como podemos mejorar esto de manera que ademas de poder grabar los errores que nosotros definamos en nuestro sitio, nos almacene los errores producidos durante la ejecución del script php.

Esto lo conseguiremos indicando al interprete Zend que llame a la función error() cada vez que el código PHP contenga un error con la función set_error_handler:

<?php
set_error_handler('error');
?>

Entonces, el código completo nos queda de la siguiente manera:

<?php
function error($numero,$texto){
$ddf = fopen('error.log','a');
fwrite($ddf,"[".date("r")."] Error $numero:$textorn");
fclose($ddf);
}
set_error_handler('error');
?>

·         Clase PEAR Mail_mine

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';

No hay comentarios:

Publicar un comentario