PHP:¿Cómo envío desde php un correo en formato html y txt a la vez?

De Foros del Web

Con la función mail, pero usando un truquillo para no complicarse la vida escribiendo el código a mano y así poder usar el dreamweaver u otros programas de diseño web.

Primero creamos un documento html que será el que recibiremos por correo, con sus tablas, css, etc... pero allí donde queramos escribir algo por medio de nuestro escript de forma dinámica nos creamos una variable imaginaria que debería estar entre corchetes, en este ejemplo será nombre {nombre}

mail.html

Código HTML:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
b { 
 font-family: Arial, Helvetica, sans-serif;
 font-size: 11px;
 color: #666666;
 text-align: justify;
 font-weight: bold;
 line-height: 14px }
td {
 font-family: Arial, Helvetica, sans-serif;
 font-size: 11px;
 color: #666666;
 text-align: justify;
 line-height: 14px;
}
.titular { font-family: Verdana, Arial, Helvetica, sans-serif;
 font-size: 14px;
 font-weight: bolder;
 letter-spacing: 9px;
 word-spacing: 4px;
 color: #FFFFFF;
 text-indent: 6px;
 text-transform: uppercase;
 line-height: 22pxcolor: #FFFFFF
}
-->
</style>
</head>
<body leftmargin="0" bottommargin="0" rightmargin="0" topmargin="0">
<table width="100%" border=0 cellpadding=4 cellspacing=4 bgcolor="#FFFFFF">
  <tr>
    <td bgcolor="#724041" class="titular">SOLICITUD DE INFORMACI&Oacute;N</td>
  </tr>
  <tr>
    <td><table border="0" cellpadding="6" cellspacing="0">
        <tr>
          <td><b><br>
            <br>
            <br>
            Este correo ha sido env&iacute;ado autom&aacute;ticamente</td>
        </tr>
      </table>
      <br>
      <br>
      <table width="100%" border="0" cellpadding="6" cellspacing="0">
        <tr>
          <td><table width="100%" border="1" cellpadding="4" cellspacing="0" bordercolor="#EFE2E2">
              <tr valign="top">
                <td width="25%"><b>Nombre:</b></td>
                <td width="75%">{Nombre}&nbsp;</td>
              </tr>
              </table>
            <br></td>
        </tr>
      </table></td>
  </tr>
</table>
</body>
</html>

Bueno, lo he retocado un poco a saco, pero se podrían poner más campos o lo que se quisiera como se quisiera.

Luego podríamos tener un documento de texto con las mismas características para poder enviar el correo en ambos formatos, y de este modo el navegador mostrará el más adecuado en función de la aplicación de correo que estemos usando.

mail.txt

Código:

SOLICITUD DE INFORMACIÓN
 
  Este correo se ha enviado automáticamente.
 
  - Nombre: {nombre}

Luego el código en un script a parte que llama a los dos archivos y reemplaza las cadenas entre corchetes, como sigue. Sería digamos donde estaría la acción del script.

Código PHP:

/* * * * * * * * * * SCRIPT PHP (Envio de correo electrónico) * * * * * * */
 
$correo_destinatario = "micorreo@servidor.es"; //La dirección que recibirá el correo
$correo_nombre = "MI NOMBRE";        //El nombre de la persona del correo
$motivo_empresa = "Solicitud de información"; //El conocido Subject o Motivo
 
/* * * * * * * * * * FUNCIONES  PHP * * * * * * * * * * * * * * * * * * * */
 
//Esta función es la encargada de reemplazar las variables que nos hemos creado
//  entre corchetes por las recibidas por el fomulario, toma como parametro la
//  ruta del archivo y retorna todo el texto con las variables cambiadas.
function prepara_formato($archivo){
 global $Nombre,$_SERVER,$PHP_SELF;
 $fp=fopen($archivo,"r");
 $contenido=fread($fp,filesize($archivo)); 
 fclose($fp);
 $contenido = eregi_replace("{Nombre}",$Nombre,$contenido);
 // aquí añadiriamos los demás campos, por ejemplo el apellido:
 //$contenido = eregi_replace("{Apellido}",$Apellido,$contenido);
 return $contenido;
}
 
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
$boundary = md5(time().rand(1,100));
$priorities = array(1=>'1 (Highest)', '2 (High)', '3 (Normal)', '4 (Low)', '5 (Lowest)' );
$priority = $priorities[3];
$headers = "From: $correo_nombre <$correo_destinatario>\r\n";
$headers .= "Return-Path: $correo_destinatario\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "X-Mailer:PHP 5.1\r\n";
$headers .= "X-Priority: $priority\r\n";
//$headers .= "Content-Type: multipart/mixed;";
$headers .= "Content-Type: multipart/alternative; ";
$headers .= "boundary = $boundary\r\n\r\n";
 
if ($Envia!=""){    // El botón del formulario se llama Envia
 $Nombre = trim(ucwords($Nombre)); //Nombre es un campo de este formulario
 
 // text e-mail
 $archivo="mail.txt";
 $contenido=prepara_formato($archivo);
 $cuerpo_1 = "--$boundary\r\n" .
  "Content-Type: text/plain; charset=ISO-8859-1\r\n" .
  "Content-Transfer-Encoding: base64\r\n\r\n";
 $cuerpo_1 .= chunk_split(base64_encode($contenido));
 
 // html e-mail
 $archivo="mail.htm";
 $contenido=prepara_formato($archivo);
 $cuerpo_1 .= "--$boundary\r\n" .
  "Content-Type: text/html; charset=ISO-8859-1\r\n" .
  "Content-Transfer-Encoding: base64\r\n\r\n";
 $cuerpo_1 .= chunk_split(base64_encode($contenido));
 
  mail($correo_destinatario,$motivo_empresa,$cuerpo_1,$headers);
 
}  

--Kernellover 19 Dic 2005

Este artículo es parte de las FAQs de PHP y el Manual de PHP.

Herramientas personales