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ÓN</td> </tr> <tr> <td><table border="0" cellpadding="6" cellspacing="0"> <tr> <td><b><br> <br> <br> Este correo ha sido envíado automá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} </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.
- Indice de las FAQs: Conceptos, Configuración, Formularios, Manejo de Archivos, Integración con Bases de Datos, Sesiones, Extensiones y Librerías, Seguridad, Funciones, Clases y Objetos, Frameworks
- Recomendamos también: Guía Zend, Frameworks PHP, Aceleradores PHP
- Agregar al FAQ: PHP: Instrucciones para agregar una pregunta al FAQ de PHP
- Para preguntas sobre PHP: Foro de Php
