08/08/2005, 16:44
|
|
Yo he programado un script para hacer esto, lo pongo a continuación.
Si necesitas más ayuda, aquí estoy (aunque no sé por cuánto tiempo más).
si no, comunícate por mi correo alvaro_gmj en yahoo punto com punto ar
Saludos. Código PHP: <?
# MFEC v1.1 - Manejador de Formularios y Envío de Correo
# Copyright (C) 2003 alvlin
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Para mayor comodidad
# Para un servidor en Windows debe usarse \r\n
$UNO="\n";
$DOS="\n\n";
# Destinatario del mensaje
$para = "[email protected]";
# El famoso boundary=, necesario para mensajes con formato HTML
# (lo creo y luego lo indico al generar la cabecera)
$separador ="_alvlin".md5 (uniqid (rand()));
# Fecha en el formato que quiero
$cabecera = "Date: ".date("l j F Y G:i:s").$UNO;
# Obligatoria para el formato html
$cabecera .= "MIME-Version: 1.0".$UNO;
# De: viene del formulario
$cabecera .= "From: ".$_POST["de"].$UNO;
# No necesaria pero interesante
$cabecera .= "X-Mailer: PHP/". phpversion()." por alvlin".$UNO;
# Especifica el contenido. Necesaria para el formato HTML
$cabecera .= "Content-Type: multipart/alternative;".$UNO;
# Determino el separador de partes (boundary)
$cabecera .=" boundary=$separador".$DOS;
# El cuerpo principal del mensaje
# Se puede crear el mensaje que se quiera,
# siempre que se vayan concatenando las líneas
# dentro de la variable $cuerpo
$cuerpo = "<html><head><title></title></head><body style='background-color : skyblue'>\n";
$cuerpo .= "<font face='Arial' color = '#808080'>";
$cuerpo .= "<h1>Datos del Formulario:</h1><ul>\n";
$cuerpo .= "<li><strong>De: </strong>".$_POST["de"]."</li>\n";
$cuerpo .= "<li><strong>Opinion del sitio: </strong>".$_POST["Opinion"]."</li>\n";
$cuerpo .= "<li><strong>Problemas de Accesibilidad: </strong>".$_POST["accesibilidad"]."</li>\n";
$cuerpo .= "<li><strong>Temas no Encontrados: </strong>".$_POST["no-encontrado"]."</li>\n";
$cuerpo .= "<li><strong>Comentarios: </strong>".$_POST["comentarios"]."</li></ul>\n";
$cuerpo .= "<hr><p>Enviado por MFEC, (c) 2003 alvlin</p>";
$cuerpo .= "</font></body></html>";
# Sustituyo <br>, <li> y <h1> y las necesarias
# para formatear el texto plano, luego
# elimino el resto de las etiquetas html
$sin_br = eregi_replace("<br>", $UNO, $cuerpo);
$sin_li = eregi_replace("<li>", "\n\t", $sin_br);
$sin_h1 = eregi_replace("<h1>", "\t\t\t", $sin_li);
$sin_html = strip_tags($sin_h1);
# Genero la parte de texto plano, la cual
# se verá en clientes de correo que no
# soporten HTML. Dado que la codificación
# es 7bit, no se deben usar caracteres especiales
# con código ASCII superior a 127. En caso de usarse,
# se verán caracteres extraños en esta parte del mensaje
$texto ="--$separador".$UNO;
$texto .="Content-Type: text/plain; charset=\"ISO-8859-1\"".$UNO;
$texto .="Content-Transfer-Encoding: 7bit".$DOS;
$texto .=$sin_html;
# Esta es la parte de html
# Iguales consideraciones con los caracteres
# especiales que para la parte anterior.
$html =$UNO."--$separador".$UNO;
$html .="Content-Type: text/html; charset=\"ISO-8859-1\"".$UNO;
$html .="Content-Transfer-Encoding: 7bit".$DOS;
$html .= $cuerpo;
$html .=$UNO."--$separador".$UNO;
# Determina si se subió un archivo
if (is_uploaded_file($HTTP_POST_FILES['archivo']['tmp_name']))
{
# Si es así, crea la cabecera para el archivo adjunto
$adjunto ="Content-Type: ".$HTTP_POST_FILES['archivo']['type']."; name=\"";
$adjunto .=$HTTP_POST_FILES['archivo']['name']."\"".$UNO;
$adjunto .="Content-Disposition: attachment; filename=\"";
$adjunto .=$HTTP_POST_FILES['archivo']['name']."\"".$UNO;
$adjunto .="Content-Transfer-Encoding: base64".$DOS;
# abre el archivo
$fp = fopen($HTTP_POST_FILES['archivo']['tmp_name'], "r");
$buff = fread($fp, filesize($HTTP_POST_FILES['archivo']['tmp_name']));
fclose($fp);
# lo codifica en base64
$adjunto .=chunk_split(base64_encode($buff));
$adjunto .=$UNO."--$separador".$UNO;
# genera el cuerpo del mensaje con las tres partes (texto, html y adjunto)
$mensaje=$texto.$html.$adjunto;
}
# en caso de que no se haya subido ningún archivo
# generar el cuerpo del mensaje directamente con las partes de texto y html
else {
$mensaje=$texto.$html;
}
# Sentencia final que envía el mensaje e imprime en pantalla un texto
# dependiendo de si el mensaje se envió bien o no.
if ( mail($para,$_POST["asunto"],$mensaje,$cabecera)) {
echo "El mensaje ha sido enviado correctamente.<br />
Gracias por tomarte el tiempo para escribirlo"; }
else { echo "Hubo un error al enviar el mensaje<br />\n
Por favor regresa a la página anterior e intenta de nuevo"; }
?>
Última edición por AlvaroG; 22/06/2009 a las 21:55 |