Foros del Web » Programando para Internet » PHP »

error en formulario

Estas en el tema de error en formulario en el foro de PHP en Foros del Web. Hola, al probar en localhost con Apache un formulario para enviar datos por email en PHP, me da este error: Warning: mail() [function.mail]: "sendmail_from" not ...
  #1 (permalink)  
Antiguo 21/07/2009, 09:19
 
Fecha de Ingreso: junio-2009
Mensajes: 45
Antigüedad: 14 años, 10 meses
Puntos: 0
error en formulario

Hola, al probar en localhost con Apache un formulario para enviar datos por email en PHP, me da este error:

Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in I : \ Servidor\Web\PhpProject2\contactar . php on line 64

La línea 64 es:

mail("XXX(mi correo)","Formulario recibido",$cuerpo);

¿Este error significa que no se pueden enviar formularios por email en localhost?¿o es otro tipo de error?

Un saludo y gracias.
  #2 (permalink)  
Antiguo 21/07/2009, 09:27
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: error en formulario

que es esto ?
XXX(mi correo)

mail("[email protected]","Formulario recibido",$cuerpo);

Debes recordar que para el envio de mail
tienes que configurar tu php.ini
Y tener un servidor stmp de donde enviar el correo.
  #3 (permalink)  
Antiguo 21/07/2009, 09:42
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 18 años, 2 meses
Puntos: 10
Respuesta: error en formulario

Exacto, para enviar un correo desde Windows es necesario configurar un servidor SMTP, tal y como apunta gjx2.

En Linux/Mac u otros sabores de Unix, puedes utilizar sendmail. (También puedes seguir con SMTP)

En el caso del SMTP, puedes optar, bien por crear tu propio servidor de correo (que convivirá alegremente con apache y demás familia) o bien utilizar el de un tercero, por ejemplo, tu cuenta (o una creada específicamente para ello).

Un saludo
__________________
Si te ha gustado lo que he dicho, puedes darme algún punto de reputación, que no te cuesta nada ^_^.

Di no a los juicios de valor!
  #4 (permalink)  
Antiguo 21/07/2009, 09:54
 
Fecha de Ingreso: junio-2009
Mensajes: 45
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: error en formulario

XXX(mi correo) es mi dirección, pero no me deja escribirla porque dice que llevo menos de 30 dias reigistrado y eso es spam :S:S

--

A lo que iba, me he perdido un poco, ¿Cual es la forma mas sencilla de hacer un formulario en php en windows para que funcione cuando yo lo suba a un servidor? ¿Así no vale? No me importa que no funcione ahora en las pruebas con Apache, pero sí que me funcione una vez subido.

Gracias.
  #5 (permalink)  
Antiguo 22/07/2009, 07:19
 
Fecha de Ingreso: junio-2009
Mensajes: 45
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: error en formulario

<?
if (!$HTTP_POST_VARS){
?>
<form action="contactar.php" method=post>
Nombre: <input type=text name="nombre" size=16>
<br>
Email: <input type=text name=email size=16>
<br>
Comentarios: <textarea name=coment cols=32 rows=6></textarea>
<br>
<input type=submit value="Enviar">
</form>
<?
}else{
//Estoy recibiendo el formulario, compongo el cuerpo
$cuerpo = "Formulario enviado\n";
$cuerpo .= "Nombre: " . $HTTP_POST_VARS["nombre"] . "\n";
$cuerpo .= "Email: " . $HTTP_POST_VARS["email"] . "\n";
$cuerpo .= "Comentarios: " . $HTTP_POST_VARS["coment"] . "\n";

//mando el correo...
mail("xxxx @ gmail . com","Formulario recibido",$cuerpo);

//doy las gracias por el envío
echo "Gracias por rellenar el formulario. Se ha enviado correctamente.";
}
?>

Este es mi código, no me funciona porque lo estoy probando en local con Apache, pero si lo subiera a una web si me funcionaría?

Gracias
  #6 (permalink)  
Antiguo 22/07/2009, 15:15
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 18 años, 2 meses
Puntos: 10
Respuesta: error en formulario

Podría funcionar.. si el servidor remoto está excepcionalmente bien configurado.
Cuando estés enviando un email, debes aportar una dirección desde la que envías (Cabecera From:).
Según el manual de PHP ( mail() ), las líneas en los mensajes deben ir separadas por LF ("\n"), no obstante, las cabeceras deben ir separadas por CRLF ("\r\n").
Es decir, utilizarías algo como
Código PHP:
$headers 'From: [email protected]"\r\n" .
    
'Reply-To: [email protected]"\r\n" .
    
'X-Mailer: PHP/' phpversion();

mail($to$asunto$mensaje$headers); 
Y en mi sincera opinión personal, la primera línea, if(!$HTTP_POST_VARS) debería actualizarse (a menos que trabajes en PHP4 sin soporte para las superglobales cortas) por un if(empty($_POST)), o bien if($_SERVER['REQUEST_METHOD'] != 'POST')

Por lo demás, a menos que alguien con más vista que yo vea otro problema de cabeceras.. debería de estar todo correcto.

Saludos
__________________
Si te ha gustado lo que he dicho, puedes darme algún punto de reputación, que no te cuesta nada ^_^.

Di no a los juicios de valor!

Última edición por santhy; 22/07/2009 a las 15:19 Razón: Añadido link a php.net/mail
  #7 (permalink)  
Antiguo 23/07/2009, 09:13
 
Fecha de Ingreso: junio-2009
Mensajes: 45
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: error en formulario

Gracias santhy, entonces primero cambiaría la primera parte y la dejaría así:

<?
if($_SERVER['REQUEST_METHOD'] != 'POST'){
?>

Y luego, la 2ª parte que me has puesto

Cita:
$headers = 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

mail($to, $asunto, $mensaje, $headers);
¿La tendría que añadir o la sustituiría por algo de mi código?, estoy aprendiendolo poco a poco y aun no lo consigo dominar.

Gracias.
  #8 (permalink)  
Antiguo 23/07/2009, 14:44
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 18 años, 2 meses
Puntos: 10
Respuesta: error en formulario

Pues mira,más o menos lo dejarías así:

Código PHP:
<?
if($_SERVER['REQUEST_METHOD'] != 'POST') {
?>
<form action="contactar.php" method=post>
Nombre: <input type=text name="nombre" size=16>
<br>
Email: <input type=text name=email size=16>
<br>
Comentarios: <textarea name=coment cols=32 rows=6></textarea>
<br>
<input type=submit value="Enviar">
</form>
<?
}else{
    
//Estoy recibiendo el formulario, compongo el cuerpo
    
$cuerpo "Formulario enviado\n";
    
$cuerpo .= "Nombre: " $_POST["nombre"] . "\n";
    
$cuerpo .= "Email: " $_POST["email"] . "\n";
    
$cuerpo .= "Comentarios: " $_POST["coment"] . "\n";

    
$headers 'From: [email protected]"\r\n" .
        
'Reply-To: [email protected]"\r\n" .
        
'X-Mailer: PHP/' phpversion();

    
//mando el correo...
    
mail("xxxx @ gmail . com","Formulario recibido",$cuerpo$headers);

    
//doy las gracias por el enví*o
    
echo "Gracias por rellenar el formulario. Se ha enviado correctamente.";
}
?>

Me he tomado la libertad de cambiar tus long-superglobales por las equivalentes actualizadas (pues han sido deprecadas en favor de estas). Es decir, $HTTP_POST_VARS ahora se llama $_POST (lo mismo con $_ENV, $_GET, $_COOKIE, $_REQUEST y $_SERVER).

Un saludo.
__________________
Si te ha gustado lo que he dicho, puedes darme algún punto de reputación, que no te cuesta nada ^_^.

Di no a los juicios de valor!
  #9 (permalink)  
Antiguo 24/07/2009, 03:02
 
Fecha de Ingreso: junio-2009
Mensajes: 45
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: error en formulario

Gracias Santhy, me parece que lo voy a dejar tal y como tu lo has puesto. Muchas gracias.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 03:31.