Foros del Web » Programando para Internet » PHP »

Enviar HTML por correo PHP

Estas en el tema de Enviar HTML por correo PHP en el foro de PHP en Foros del Web. Que tal compañeros, le comento que tengo un formulario el cual manda por correo los comentarios del formulario a mi cliente, el problema es que ...
  #1 (permalink)  
Antiguo 18/09/2012, 17:19
Avatar de poncharelo_69  
Fecha de Ingreso: octubre-2011
Ubicación: Queretaro
Mensajes: 86
Antigüedad: 12 años, 5 meses
Puntos: 10
Enviar HTML por correo PHP

Que tal compañeros, le comento que tengo un formulario el cual manda por correo los comentarios del formulario a mi cliente, el problema es que lo estoy estilizando para que se vea todo mas fancy

Pero cuando hago la prueba no funciona, me envia el correo pero veo el codigo html y no el estilo como lo he definido.

Espero me puedan ayudar, dejo el codigo para ver si me pueden ayudar a ver cual es el error.

Código PHP:
// cambiar por el mail de envio
$email "[email protected]";

// asunto del email
$subject "Contacto";

//Cuerpo 2 del mensaje
$mensaje '<html><head><title>CubeGate</title></head><body style="width:auto;font-family:Arial, Helvetica, sans-serif;">
    <div style="width:500px;margin-left:auto;margin-right:auto;">
        <div style="width:500px;height:75px;">
            <img src="http://cubegatebarriers.com/demo/images/logo.png" width="120" style="float:right;margin-right:25px;" />
        </div>
        <div style="width:500px;text-align:justify;">
            <h3 style="color:#F00;font-size:20px;">Contacto</h3>
            <table>
                <tr><td>Languaje</td><td>'
.$_POST['idioma'].'</td></tr>
                <tr><td>Name:</td><td>'
.$_POST['nombre'].'</td></tr>
                <tr><td>Last Name:</td><td>'
.$_POST['apellido'].'</td></tr>
                <tr><td>Telephone:</td><td>'
.$_POST['telefono'].'</td></tr>
                <tr><td>E-Mail:</td><td>'
.$_POST['mail'].'</td></tr>
                <tr><td colspan="2"><hr /></td></tr>
                <tr><td colspan="2">Comment:</td></tr>
                <tr><td colspan="2">'
.$_POST['texto'].'</td></tr>
                <tr><td></td></tr>
            </table>
        </div><br/><br />
        <div style="background:#871002;width:500px;height:15px"></div>
        <div style="background:#e10613;width:500px;height:15px"></div>
    </div>
</body></html>'
;

// headers del email
$headers  'MIME-Version: 1.0' "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";

$headers "From: ".$_POST['mail']."\r\n";

// Enviamos el mensaje
if (mail($email$subject$mensaje$headers)) {
    echo = 
"Envio Correcto";
} else {
    
$aviso "Error de envío.";

  #2 (permalink)  
Antiguo 18/09/2012, 17:42
 
Fecha de Ingreso: agosto-2012
Mensajes: 2
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Enviar HTML por correo PHP

Amigo desafortunadamente los correos por default no funciona los styles css tienes que hacer el correo con tablas y imagenes....
  #3 (permalink)  
Antiguo 18/09/2012, 18:16
 
Fecha de Ingreso: mayo-2012
Ubicación: Distrito Federal
Mensajes: 49
Antigüedad: 11 años, 11 meses
Puntos: 9
Respuesta: Enviar HTML por correo PHP

Deberias de usar la libreria phpmailer, es facil de utilizar y soporta formato html.

La puedes bajar desde aqui o desde su pagina oficial

Una vez que la bajaste y descomprimiste, tendras una carpeta llamada phpmailer y dentro de ella 3 archivos, pero el que va a realizar el trabajo se llama class.phpmailer.php.

Ahora tendras que crear un nuevo archivo llamado procesar_envio.php, el cual contendra lo siguiente (le puse comentarios para que veas que hace cada linea):

procesar_envio.php
Código:
<?php

// Primero hay que incluir la clase phpmailer para poder instanciar un objeto de la misma
require "phpmailer/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 = "Contacto"; 

// 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/tu_logo.jpg" width="305" height="211"></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>&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 envie a la pagina de confirmacion "sugerencias_enviadas.php"

if(!$exito)
{
echo "Problemas enviando correo electrónico";
echo "<br>".$mail->ErrorInfo;
echo " ";
}
else
{
echo "<script language=Javascript> location.href=\"sugerencias_enviadas.php\"; </script>";
echo " ";
}

?>

Por ultimo solo queda que al formulario que tienes le pongas lo siguiente:

<form id="tu_formulario" name="tu_formulario" method="post" action="procesar_envio.php" enctype="multipart/form-data"

Esto para que al oprimir el boto de enviar todo el contenido sea porcesado por el archivo procesar_envio.php

Y listo

Espero que sea lo que buscabas

Etiquetas: correo, formulario, html
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 13:18.