PHP
 

Enviar email con PHP en formato html

 

1.- Fundamentos

PHP es un lenguaje de programación muy extendido para la programación de páginas web, además de ser un lenguaje muy potente de programación web, hay mucha información en internet y muchas librerias que permiten ahorrarnos un hermoso tiempo en la realización de tareas aparentemente complejas.

Una de estas tareas es el envío automático de correos electrónicos, antes de nada cabe destacar que el envío masivo y discrimido de correos electrónicos, hoy en día denominado spam, está incluso perseguido por la ley, por lo que la finalidad de dicho artículo es enviar un correo cuando alguien se registra en nuestra web o enviar un correo a unos usuarios registrados con la intención de informar de nuevas actualizaciones en la web, pero nunca el envío de publicidad o molestar a los internautas.

Para el envío automático de correos utilizaremos dos librerías, phpmailer y smtp, podéis descargalas en los siguientes enlaces:

PHP Mailer

PHP smtp

 

2.- Funcionamiento

Primero tendremos que trasladar los archivos class.phpmailer.php y class.smtp.php a la carpeta includes dentro de nuestro directorío raiz del alojamiento de nuestra web.

Ahora tendremos que configurar el envío de correo de nuestro alojamiento web, como el hosting y el puerto, además de la dirección de correo del destinatario.

<?php

// primero hay que incluir la clase phpmailer para poder instanciar
//un objeto de la misma
require "includes/class.phpmailer.php";

//instanciamos un objeto de la clase phpmailer al que llamamos
//por ejemplo mail
$mail = new phpmailer();

//Definimos las propiedades y llamamos a los métodos
//correspondientes del objeto mail

//Con PluginDir le indicamos a la clase phpmailer donde se
//encuentra la clase smtp
$mail->PluginDir = "includes/";

//Con la propiedad Mailer le indicamos que vamos a usar un
//servidor smtp, otra posibilidad puede ser mail: $mail->Mailer = "mail";
//Esto depende de nuestro servidor web
$mail->Mailer = "smtp";

//Asignamos a Host el nombre de nuestro servidor smtp, dado por nuestro hosting
$mail->Host = "smtp.dominio.com"; //.com, .es, .net...depende del nuestro dominio
//Si fuese mail sería de la forma
//$mail->Host = "mail.dominio.com ";
$mail->Port = "25";

//Le indicamos que el servidor smtp requiere autenticación
$mail->SMTPAuth = true;

//Le decimos cual es nuestro nombre de usuario y password
$mail->Username = "XxXxXxX"; //Dado por el hosting
$mail->Password = "YyYyYyY"; //Dado por el hosting

//Indicamos cual es nuestra dirección de correo y el nombre que
//queremos que vea el usuario que lee nuestro correo
$mail->From = "info@dominio.com";
$mail->FromName = "Dominio";

//el valor por defecto del timeout es 10 pero vamos a usar 120.
$mail->Timeout=120;

//Indicamos cual es la direccón de destino del correo
$mail->AddAddress("usuario@yahoo.es");

//Indicamos en la cabecera si el correo contiene html
$mail->IsHTML(true);//Esta línea es muy importante si nuestro correo va a contener html

//Asignamos asunto y cuerpo del mensaje
//El cuerpo del mensaje lo ponemos en formato html, haciendo
//que se vea en negrita
$mail->Subject = "Nombre del asunto del mensaje ";

Ahora incorporaremos el cuerpo del mensaje en html para lo cual usaremos Dreamweaver, , para ello crearemos un archivo html y le pondremos los hipervínculos y fotos que queramos.

A modo de ejemplo he creado una plantilla.

Plantilla Email html

Hay que tener en cuenta que hay que cambiar los acentos (electr&oacute;nico -> electrónico) ya que dreamweaver generá los acentos de forma extraña.

Otro factor es el intentar no adjuntar fotos en el correo, sino que el servidor de correo del usuario lo recoja desde nuetra propia web, para ello incorporaremos a los enlaces de las fotos e hipervínculos la url completa con http://www.dominio.com/.../archivo.jpg

Dreamweaver generará el siguiente código

<a href="index.php"><img src=images/Logo5.gif" width="250" height="250" border="0" /></a>

Habrá que cambiarlo de la siguiente manera

<a href="http://www.muchotrasto.com/index.php"><img src="http://www.muchotrasto.com/images/Logo5.gif" width="250" height="250" border="0" /></a>

 

//$body.= es equivalente a $body=$body + algo nuevo;

$body .= "Este es un ejemplo del cuerpo del correo en formato html."

//Aquí es donde incluiremos el correo en html, de decir nuestra plantilla

//$body.= 'La generación de código de dreamweaver se pondrá entre comillas simples';

$body.='<style type="text/css">
<!--
.Estilo1 {
color: #0066CC;
font-weight: bold;
}
.Estilo2 {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #006699;
}
-->
</style>
</head>

<body>
<p>Cabecera informativa de nuestro correo electrónico </p>
<p>&nbsp;</p>
<table width="600" border="0" align="center" background="http://www.muchotrasto.com/images/fondoEmail.gif">
<tr>
<td>
<table width="594" border="0">
<tr>
<td width="254"><a href="http://www.muchotrasto.com/index.php"><img src="http://www.muchotrasto.com/images/Logo5.gif" width="250" height="250" border="0" /></a></td>
<td width="330"><div align="center" class="Estilo1">
<p>Sensor de seguridad: Ibutton + PIC </p>
<p><span class="Estilo2">Para m&aacute;s informaci&oacute;n vis&iacute;tanos en <a href="http://www.muchotrasto.com/index.htm">www.muchotrasto.com</a></span></p>
</div></td>
</tr>
</table></td>
</tr>
</table>
</body>
</html>';//Finaliza el código generado por Dreamweaver, cerramos comilla simple

$mail->Body = $body; //Asignamos al atributo Body, la variable $body.

 

Enviaremos el correo y reintentaremos reenviarlo en varias ocasiones en el supuesto caso de que éste no se haya podido enviar al destinatario.

//Definimos AltBody por si el destinatario del correo no admite email con formato html, //es decir recibirá dicha información si el servidor de correo al que enviamos el mensaje //no puede admite html
$mail->AltBody = "Mensaje explícito con la información más relevante.";

//se envia el mensaje, si no ha habido problemas
//la variable $exito tendra el valor true y el correo se habrá enviado satisfactoriamente.
$exito = $mail->Send();

//Si el mensaje no ha podido ser enviado se realizaran 2 intentos mas como mucho
//para intentar enviar el mensaje, cada intento se hara 5 segundos despues
//del anterior, para ello se usa la funcion sleep
$intentos=1;
while ((!$exito) && ($intentos < 2)) {
sleep(5);
//echo $mail->ErrorInfo;
$exito = $mail->Send();
$intentos=$intentos+1;

}

if(!$exito)
{
echo "Problemas enviando correo electrónico";
echo "<br>".$mail->ErrorInfo;
echo " ";
}
else
{
echo "Mensaje enviado correctamente";
echo " ";
}

?>

Para descargaros el ejemplo anterior en formato php, sólo teneís que hacer click en el siguiente enlace.

Ejemplo php mail con formato html

 

3.- Variante del código

Este es un ejemplo sencillo a modo de ejemplo para que sea sencillo entender los conceptos básicos. Si queremos potenciar nuestro código, deberíamos de poner varios destinatarios, pero es recomendable hacer un bucle for e incluir en los destinatarios los correos de los usuarios registrados en la web. Para ello habrá que tener unos pequeños conocimientos sobre programación php y sobre sql.

Como siempre si teneis dudas o queréis simplemente dejar un comentario sobre el artículo podéis hacerlo en el foro de la web

Foro Muchotrasto

 

4.- Download

PHP Mailer

PHP smtp

Plantilla Email html

Ejemplo php mail con formato html

 
 



Inicio | Foro | FAQ | MapaWeb | BuscadorWeb