Foros del Web » Programando para Internet » PHP »

Enviar e-mail con formato html mendiante PHPMailer - Parte 1

Estas en el tema de Enviar e-mail con formato html mendiante PHPMailer - Parte 1 en el foro de PHP en Foros del Web. Hola que tal, aqui les dejo una forma de enviar un e-mail con formato html a una direccion de correo por medio de la funcion ...
  #1 (permalink)  
Antiguo 03/06/2012, 22:53
 
Fecha de Ingreso: mayo-2012
Ubicación: Distrito Federal
Mensajes: 49
Antigüedad: 11 años, 11 meses
Puntos: 9
Información Enviar e-mail con formato html mendiante PHPMailer - Parte 1

Hola que tal, aqui les dejo una forma de enviar un e-mail con formato html a una direccion de correo por medio de la funcion PHPMailer.

Este metodo se basa en la creacion de 3 archivos: dos HTML y un PHP.

El funcionamiento será el siguiente:

El HTML (sugerencias.html) va a contener un formulario, el cual llenara el usuario y una vez que de click en el boton enviar, todos los datos seran procesados por el archivo PHP (sugerencias_send.php) y este se encargará de enviar el e-mail en formato html. Una vez enviado el correo nos redirigira a un segundo HTML (sugerencias_enviadas.html) en el cual se mostrara un mensaje de que el e-mail se envio correctamente, y al oprimir el boton de aceptar nos volvera a enviar al primer archivo: sugerencias.html.

Bueno, una vez explicado cual va a ser el funcionamiento, vayamos a los pasos a seguir:

Paso 1:

Descargar la libreria PHPMailer; esto lo podremos hacer desde su [URL="http://phpmailer.worxware.com/index.php?pg=sf&p=dl"]pagina oficial[/URL], en la cual hay descargas tanto para PHP4 como para PHP5/6.

Para efectos de este ejemplo se utilizara la version para [URL="http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php4/PHPMailer%20v2.0.4%20for%20PHP4/PHPMailer_v2.0.4.zip/download"]PHP4 [/URL].

Una vez descargado tendremos un archivo .zip (PHPMailer_v2.0.4.zip) el cual contendra una carperta del mismo nombre; dentro de esta veremos varios archivos, pero el que nos interesa en este caso es el llamado: class.phpmailer.php el cual colocaremos en la raiz de la carpeta donde pondremos nuestros demas archivos web.

Hecho esto procederemos a la creacion de los archivos HTML y PHP.

Paso 2:

Creamos el primer archivo HTML llamado sugerencias.html, el cual contendra un formulario que pedira al usuario llenar ciertos datos:

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulario de sugerencias</title>
</head>

<body>
<form id="sugerencias" name="sugerencias" method="post" action="sugerencias_send.php" enctype="multipart/form-data">
              <table width="637" border="0">
                <tr>
                  <td width="216" style="font-size: 20px"><span style="color: #000; text-align: left;">Nombre</span>:</td>
                  <td width="359"><span id="sprytextfield1">
                    <label>
                      <input type="text" name="nombre" id="nombre" />
                    </label>
                  </span></td>
                  <td width="48">&nbsp;</td>
                </tr>
                <tr>
                  <td style="font-size: 20px; color: #000; text-align: left;">Apellido Paterno:</td>
                  <td><span id="sprytextfield2">
                  <label>
                      <input type="text" name="ap_pat" id="ap_pat" />
                    </label>
                  </span></td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td style="font-size: 20px; color: #000;">Apellido Materno:</td>
                  <td><span id="sprytextfield3">
                  <label>
                      <input type="text" name="ap_mat" id="ap_mat" />
                    </label>
                  </span></td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td style="font-size: 20px; color: #000;">Ciudad:</td>
                  <td><span id="sprytextfield4">
                <label>
                      <input type="text" name="ciudad" id="ciudad" />
                    </label>
                  </span></td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td style="font-size: 20px; color: #000;">Correo electrónico:</td>
                  <td><span id="sprytextfield5">
                  <label>
                    <input type="text" name="email" id="email" />
                  </label>
                  </span></td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td style="font-size: 20px; color: #000;">Sugerencias:</td>
                  <td><span id="sprytextarea1">
                    <label>
                      <textarea name="sugerencias" id="sugerencias" cols="45" rows="5"></textarea>
                    </label>
                  </span></td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td style="font-size: 20px">&nbsp;</td>
                  <td><label>
                    <input type="submit" name="enviar" id="enviar" value="Enviar sugerencias" />
                  </label></td>
                  <td>&nbsp;</td>
                </tr>
              </table>
            </form>
</body>
</html>
En todo este codigo la parte mas importante es la que contiene el form, llamada: action="sugerencias_send.php", ya que todos los datos que se recauden en el formulario van a ser enviados al archivo sugerencias_send.php.
  #2 (permalink)  
Antiguo 03/06/2012, 22:56
 
Fecha de Ingreso: mayo-2012
Ubicación: Distrito Federal
Mensajes: 49
Antigüedad: 11 años, 11 meses
Puntos: 9
Información Respuesta: Enviar e-mail con formato html mendiante PHPMailer - Parte 2

Paso 3:

El siguiente paso es la creacion del archivo PHP que se encargara de procesar los datos y mandar el e-mail con formato html a la direccion deseada, el codigo de este archivo es el siguiente:

Código:
<?php

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

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

// Señalamos los datos de envio que llevara nuestro correo
$mail->From = "[email protected]"; // Direccion de correo de quien envia el mensaje
$mail->FromName = "Tu nombre"; // Nombre de quien envia el mensaje
$mail->Timeout=120; // El valor por defecto del timeout es 10 pero vamos a usar 120. 
$mail->AddAddress("[email protected]"); // Indicamos cual es la direccón de destino del correo, es decir, a donde se enviara

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

// Asunto del mensaje
$mail->Subject = "Envio de Sugerencias"; 

// Aquí es donde incluiremos el correo el html, este html se puede editar con Dreamweaver o con cualiquier otro editor y despues pegarlo a continuacion de la comilla simple del metodo $cuerpo=
$cuerpo='

<html>
<head>
<title>Envio de Sugerencias</title>
<style type="text/css">
<!--
#datos {
	position:absolute;
	width:780px;
	left: 164px;
	top: 316px;
	text-align: center;
}
#apDiv1 #form1 table tr td {
	text-align: center;
	font-weight: bold;
}
#apDiv2 {
	position:absolute;
	width:49px;
	height:45px;
	z-index:2;
	left: 12px;
	top: 11px;
}
#apDiv1 #notificacion table tr td {
	text-align: center;
}
#apDiv1 #notificacion table tr td {
	text-align: left;
}
#apDiv1 #notificacion table tr td {
	text-align: center;
	font-family: Arial, Helvetica, sans-serif;
}
#apDiv3 {
	position:absolute;
	width:833px;
	height:115px;
	z-index:1;
	left: 99px;
	text-align: center;
	top: 16px;
}
-->
</style>
</head>

<body>
<div id="apDiv3">
  <table width="100%" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
    <tr>
      <td><table width="100%" border="0">
        <tr>
          <td style="text-align: center"><img src="imagenes/logo.jpg" width="284" height="166"></td>
        </tr>
        <tr>
          <td><p>&nbsp;</p>
            <p style="font-family: Helvetica LT Condensed; color: #008895; font-weight: bold; font-size: 22px; text-align: center;">ENVIO DE SUGERENCIAS</p></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td style="font-family: Helvetica LT Condensed; font-size: 18px;"><spanHelvetica LT Condensed"; font-size: 18px;"><span style="font-weight: bold">Nombre:</span>&nbsp; '.$_POST["nombre"].'</span> '.$_POST["ap_pat"].'&nbsp; <spanHelvetica LT Condensed"; font-size: 18px;">'.$_POST["ap_mat"].'&nbsp;</span></td>
        </tr>
        <tr>
          <td style="font-family: Helvetica LT Condensed; font-size: 18px;"><span style="font-weight: bold">Ciudad:</span>&nbsp; '.$_POST["ciudad"].'</td>
        </tr>
        <tr>
          <td style="font-family: Helvetica LT Condensed; font-size: 18px;"><span style="font-weight: bold">Correo Electrónico:</span>&nbsp; '.$_POST["email"].'</td>
        </tr>
        <tr>
          <td><p>&nbsp;</p>
            <p><span style="font-family: Helvetica LT Condensed; font-size: 18px;"><span style="font-weight: bold">Sugerencias:</span>&nbsp; '.$_POST["sugerencias"].'</span></p></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
        </tr>
      </table></td>
    </tr>
  </table>
</div>
</body>
</html>

'; // Cerramos la comilla simple. Con la comilla simple y el punto y coma se finaliza el cuerpo del mensaje html.  


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

// Definimos AltBody por si el destinatario (quien recive) del correo no admite email con formato html, es decir recibirá este mensaje si el servidor de correo al que enviamos el mensaje no puede admitir html
$mail->AltBody = "Usted esta viendo este mensaje simple debido a que su servidor de correo no admite formato HTML.";

// Se envia el mensaje, si no ha habido problemas la variable $exito tendra el valor true (verdadero) 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;

}
// Esta condicional nos sirve para que en caso de que haya error al enviar el mensaje se muestre el mensaje "Problemas nviando correo electronico" y en caso satisfactorio nos redirigira a la pagina sugerencias_enviadas.html
if(!$exito)
{
echo "Problemas enviando correo electrónico";
echo "<br>".$mail->ErrorInfo;
echo " ";
}
else
{
// Este script nos va a redirigir a la pagina sugerencias_enviadas.html
echo "<script language=Javascript> location.href=\"sugerencias_enviadas.html\"; </script>";
echo " ";
}

?>
El html se agregara despues de $cuerpo=' como podran notar al final tiene una comilla simple, despues de esta comilla pondremos todo el html y al terminar se cerrara con otra comilla simple.


Nota: Si le agregamos mas campos a nuestro formulario, estos campos tambien se tienen que agregar a nuestro archivo de envio html, solo hay que hacer coincidir el nombre del campo de texto de nuestro formulario con el de nuestro html a enviar, obteniendo los datos por medio del metodo POST, por ejemplo si en nuestro formulario agregamos un campo llamado telefono, en nuestro html se agregara asi: '.$_POST["telefono"].'

Paso 4:

Como ultimo paso crearemos el archivo sugerencias_enviadas.html, y su codigo es:

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
<style type="text/css">
<!--
#apDiv1 {
	position:absolute;
	width:372px;
	height:115px;
	z-index:1;
	left: 336px;
	top: 73px;
	text-align: center;
}
-->
</style>
</head>

<body>
<div id="apDiv1">
  <form id="form1" name="form1" method="post" action="sugerencias.html">
    <table width="371" border="1">
      <tr>
        <td style="text-align: center; font-family: Arial, Helvetica, sans-serif; font-size: 20px; color: #0C6; font-weight: bold;">Las sugerencias han sido enviadas satisfacoriamente</td>
      </tr>
      <tr>
        <td><label>
          <span style="text-align: center">
          <input type="submit" name="aceptar" id="aceptar" value="Aceptar" />
        </span></label></td>
      </tr>
    </table>
  </form>
</div>
</body>
</html>
Aqui al oprimir el boton aceptar nos regresara a la pagina inicial de sugerencias.html, gracias a la parte del codigo que dice: action="sugerencias.html"

Con esto ya tendremos nuestro sistema de sugerencias totalmente funcional usando la clase PHPMailer.

Espero que esta informacion les pueda ser de utilidad.

Última edición por chuntaro18; 03/06/2012 a las 23:02
  #3 (permalink)  
Antiguo 31/07/2012, 02:32
 
Fecha de Ingreso: julio-2012
Mensajes: 8
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Enviar e-mail con formato html mendiante PHPMailer - Parte 1

Buenos días, he intentado seguir paso a paso todo lo descrito en este foro, pero hay algo que he debido hacer o entender mal, porque una vez que tengo creado tanto el formulario, con el archivo sugerencias_send.php, como el archivos sugerencias_enviadas.html, al pulsar el botón "Enviar sugerencias" lo que hace es abrirme el archivo suegrencias_send.php pero no me genera el correo esperado.

¿Qué puedo estar haciendo mal para que no funcione?

Gracias.

Etiquetas: e-mail, formato, formulario, html, parte, phpmailer, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:58.