Autor Tema: Envio de Correos Electronicos con Formato HTML  (Leído 1996 veces)

Desconectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Envio de Correos Electronicos con Formato HTML
« en: 04 de Enero de 2008, 19:53:13 pm »
Hola PHPeros!
En este tutorial voy a intentar enseñaros como se envian emails con Formato HTML en vez del Tipo Texto PLANO.

Antes debo decir que prometí postear este tutorial hace tiempo así que os pido disculpas por la tardanza, se que muchos estais muy interesados en este tema ;)

El primer paso va a ser saber que es lo que hay que indicarle al Cliente Email para que sepa que le estamos enviando un Email con formato HTML, para ello vamos a recurrir a las cabeceras.

A continuación os pongo el codigo completo y posteriormente lo explicare ;)

<?PHP
if (!function_exists("mail")) exit("Para utilizar este Sistema debes tener activada la funcion mail()"); //Para evitar dudas
if (isset($_POST[&#39;enviar&#39;])) 
{
	
function 
email_correcto($direccion//Chequea si una direccion es Correcta
	
{
	
	
$regex "^[_a-z0-9-]+(\.[_a-z0-9-]+)*"//Sentencia REGEX
	
	
$regex.= "@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"//Sentencia REGEX
	
	
if (!
eregi($regex$direccion)) return false;
	
	
else return 
true;
	

	
if (
in_array(NULL$_POST)) exit("Has dejado algun campo vacio"); //¿Algun campo vacio?
	
if (!
email_correcto($_POST[&#39;destino&#39;]) || !email_correcto($_POST[&#39;remitente&#39;])) exit("Introduce los Emails Correctamente");
	
$cabecera "Content-type: text/html\r\n"//La cabecera mas simple
	
$cabecera "From: ".$_POST[&#39;remitente&#39;]."\r\n".$cabecera;
	
if (
mail($_POST[&#39;destino&#39;],$_POST[&#39;asunto&#39;],$_POST[&#39;mensaje&#39;],$cabecera)) echo "Email Enviado Correctamente";
	
else echo 
"Ha ocurrido algun problema, el email no ha sido enviado";
}
?>
<form method="POST">
<input type="text" value="Asunto" name="asunto" /><br />
<input type="text" value="Destinatario" name="destino" /><br />
<input type="text" value="Remitente" name="remitente" /><br />
<textarea name="mensaje">Codigo HTML</textarea><br />
<input type="submit" name="enviar" />
</form>


Como veis he aplicado muchos conceptos y funciones así que voy a intentar aclarar las dudas mas obvias.
Por ejemplo, como veis he creado una funcion llamada email_correcto():

function email_correcto($direccion//Chequea si una direccion es Correcta
	
{
	
	
$regex "^[_a-z0-9-]+(\.[_a-z0-9-]+)*"//Sentencia REGEX
	
	
$regex.= "@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"//Sentencia REGEX
	
	
if (!
eregi($regex$direccion)) return false;
	
	
else return 
true;
	


En esta función he aplicado las Sentencias Regulares para comprobar la direccion que se le pasa, para ello compruebo si la direccion que se le pasa a la funcion corresponde al estandar definido por la variable $regex.
¿Entiendes la Idea? Yo le digo al codigo como deberia ser una direccion normalmente y comprueba si la direccion que le paso corresponde al estandar ;)

Otro concepto nuevo y que no he visto nunca en ninguna parte, con ello quiero decir que ha sido idea mia y que no se si sería "inefectivo" en algunos casos es el siguiente:

if (in_array(NULL$_POST)) exit("Has dejado algun campo vacio"); //¿Algun campo vacio?

Lo que hago en esta linea es comprobar si hay algun campo dentro de lo que se ha enviado por el formulario tiene valor nulo, es decir, si esta vacio. ya me direis vuestros resultados ;)

Y ahora llego a lo mas importante de este Tutorial, la cabecera que define el formato del Email que vamos a enviar mediante PHP:

$cabecera "Content-type: text/html\r\n"//La cabecera mas simple

Como veis es una cabecera muy simple y no tiene mas misterio pero si Googleais el tema un poquito mas a fondo encontrareis cabeceras enormemente trabajadas que pueden permitirte generar emails con archivos adjuntos y todo ello desde PHP!

Y como ginda, he añadido una simple comprobacion al comienzo del codigo para que todo el mundo este seguro de si el problema que tiene al aplicar este codigo es por el codigo o por su servidor, en breves palabras comprueba si se pueden enviar emails, todo para no hacer perder el tiempo a nadie ;)

Si teneis alguna duda... A vuestra disposicion!
Por favor, leete las Normas


Comunidad PHPeros

Envio de Correos Electronicos con Formato HTML
« en: 04 de Enero de 2008, 19:53:13 pm »

Desconectado Martin10

  • PHPer@ Fijo
  • ***
  • Mensajes: 160
  • Karma: 11
  • Sexo: Masculino
    • Ver Perfil
Re: Envio de Correos Electronicos con Formato HTML
« Respuesta #1 en: 04 de Enero de 2008, 20:11:15 pm »
Muy bueno nevada, te doy un karma y llegas a 100 :P . Te hago una consulta, se puede enviar adjuntos con la función mail() ? Yo tenia entendido que no, que habia que usar la clase mail.

Un saludo
8)

Desconectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Re: Envio de Correos Electronicos con Formato HTML
« Respuesta #2 en: 04 de Enero de 2008, 20:13:14 pm »
Claro que se puede, de hecho tengo pensado hacer otro tutorial para explicar como hacerlo.

Y para muestra un boton... http://www.original-design.es/tutoriales/email_con_archivos_adjuntos_php.php
« Última modificación: 04 de Enero de 2008, 20:16:10 pm por naveda »
Por favor, leete las Normas


Desconectado mOrK

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 1.503
  • Karma: 43
  • :)
    • Ver Perfil
    • Sígueme en Twitter!
Re: Envio de Correos Electronicos con Formato HTML
« Respuesta #3 en: 04 de Enero de 2008, 20:29:32 pm »
Muy bueno Naveda, lo esperaba :P ;)

KARMA + !

Desconectado kekoman

  • PHPero Master
  • ******
  • Mensajes: 1.180
  • Karma: 45
  • Sexo: Masculino
  • Mi nuevo usuario es marco811
    • Ver Perfil
Re: Envio de Correos Electronicos con Formato HTML
« Respuesta #4 en: 04 de Enero de 2008, 20:32:27 pm »
muchísimas gracias naveda  xD xD KARMA +


Este usuario ya no lo uso, mi nuevo usuario es marco811

Desconectado G2K

  • Moderador de Programación General
  • PHPero Master
  • ****
  • Mensajes: 2.245
  • Karma: 76
  • Sexo: Masculino
  • Dame un punto de apoyo y moveré la Tierra
    • Ver Perfil
    • Cristian Torrijos
Re: Envio de Correos Electronicos con Formato HTML
« Respuesta #5 en: 05 de Enero de 2008, 11:54:35 am »
Ya investigue en ello cuando me hizo falta :P
De todos modos KARMA +
Campeón del CatSkills de Webs (Enero 2011)
Campeón del SpainSkills de Webs (Abril 2011)
http://www.youtube.com/watch?v=1fBMG8F_hpM
Mejor representante catalan en SpainSkills 2011


Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re: Envio de Correos Electronicos con Formato HTML
« Respuesta #6 en: 05 de Enero de 2008, 14:32:28 pm »
Yo le agregaria la funcion checkdnsrr para verificar que el email introducido es totalmente correcto y no hacer al servidor trabajar para nada.
http://es.php.net/manual/es/function.checkdnsrr.php

Por lo demas esta de 10, karma+

Un saludo
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado autorojo

  • PHPer@
  • **
  • Mensajes: 59
  • Karma: 0
    • Ver Perfil
Re: Envio de Correos Electronicos con Formato HTML
« Respuesta #7 en: 11 de Enero de 2008, 03:19:45 am »
¡Me ha aparecido lo siguiente!:
Citar
Echec ! Errors :
Error checking Quota: Unknown database 'mail_db'
Error initializing quota: Unknown database 'mail_db'
Checking mail quota: Unknown database 'mail_db'
Ha ocurrido algun problema, el email no ha sido enviado

 :S

Desconectado UrbanMaster

  • PHPerit@
  • *
  • Mensajes: 31
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
    • IntelHabbo.Com
Re: Envio de Correos Electronicos con Formato HTML
« Respuesta #8 en: 26 de Febrero de 2009, 02:14:35 am »
Disculpen por reabrir el Tema, solo que como puedo poner para poner varios Destinatarios?

Saludos, Jhon xD