Ver Mensaje Individual
  #5 (permalink)  
Antiguo 15/05/2011, 05:25
Avatar de KoswiDigital
KoswiDigital
 
Fecha de Ingreso: abril-2011
Ubicación: Galicia - España
Mensajes: 220
Antigüedad: 13 años, 11 meses
Puntos: 37
Respuesta: problema con formulario php

Hola.

Vamos a retocar un poco ese código... Lo primero, indiquemos el tipo de contenido que enviamos:

Código PHP:
Ver original
  1. $headers = "MIME-Version: 1.0 \r\n";
  2. $headers .= "Content-Type: text/html; charset=utf-8 \r\n";

En este caso, para el recoger el mensaje, mejor que un foreach, recoge directamente los datos y trátalos:

$mensaje = strip_tags($_POST['mensaje']); // mensaje en texto plano
$mensaje_html = preg_replace('/\n/' , '<br />' , $mensaje); // mensaje en html (el que utilizaremos)

Ahora comprobemos si realmente envía el e-mail. En el final del código, reemplaza mail() y header() por lo siguiente:

Código PHP:
Ver original
  1. if( !mail( $destino , $subject , $mensaje , $headers ) )
  2. {
  3.   echo 'el mail no se ha enviado';
  4.   exit();
  5. }
  6. else
  7. {
  8.   echo 'e-mail enviado';
  9.   exit();
  10. }


Y mezclándolo todo te quedaría lo siguiente:

Código PHP:
Ver original
  1. /*----------- FIN DE LA CONFIGURACION-----------------*/
  2. $headers = "MIME-Version: 1.0 \r\n";
  3. $headers .= "Content-Type: text/html; charset=utf-8 \r\n";
  4. $headers .= "From: $nombre <$email>\r\n";
  5. $headers .= "Reply-To: $email\r\n";
  6. $headers .= "Return-Path: $nombre <$email>\r\n";  
  7.  
  8. $mensaje = strip_tags($_POST['mensaje']);  // mensaje en texto plano
  9.   $mensaje_html = preg_replace('/\n/' , '<br />' , $mensaje); // mensaje en html (el que utilizaremos en este caso, ya que así lo hemos establecido en Content-Type)
  10.  
  11. if( !mail( $destino , $subject , $mensaje , $headers ) )
  12. {
  13.   echo 'el mail no se ha enviado';
  14.   exit();
  15. }
  16. else
  17. {
  18.   echo 'e-mail enviado';
  19.   exit();
  20. }


Podría ser que el hosting tenga inhabilitado el envío de e-mails a través de php... Pero ahora ya tienes un código un poco más optimizado. Además, si tu intención es que tus correos lleguen a la bandeja de entrada y no al correo no deseado, deberás utilizar algo un poco más complejo y al mismo tiempo sencillo: la clase PHPMailer. Así podrás enviar a través de un servidor smtp seguro. Además PHPMailer te da la posibilidad de enviar el correo en html y en texto plano (así utilizaríamos $mensaje y $mensaje_html), para clientes ftp que no soporten html o lo tengan deshabilitado.

También te recomiendo confeccionar un poco los e-mails a enviar en html, a poder ser utilizando tablas para una mayor compatibilidad.
__________________
http://www.koswidigital.com - Diseño web, Programación web, Fotografía profesional, Retoque digital.