Foros del Web » Programando para Internet » PHP »

Formulario php fail

Estas en el tema de Formulario php fail en el foro de PHP en Foros del Web. Hola gente, como estan, Espero me puedan ayudar con lo siguiente. Cree un formulario de contacto con php pero no funciona, me sale el siguiente ...
  #1 (permalink)  
Antiguo 24/12/2011, 18:05
 
Fecha de Ingreso: julio-2011
Ubicación: Rosario
Mensajes: 39
Antigüedad: 12 años, 8 meses
Puntos: 0
Formulario php fail

Hola gente, como estan, Espero me puedan ayudar con lo siguiente.

Cree un formulario de contacto con php pero no funciona, me sale el siguiente error

Warning: mail() [function.mail]: SMTP server response: 554 No se permite el envio de correo sin especificar una cuenta valida desde donde sale el correo. in \\HMFSW\WEB\DTC007\hostaldelsolsrl.com\public_html \send.php on line 20
Mensaje enviado correctamente

y el código no es el problema:

<?

$nombre = $_POST['nombre'];
$mail = $_POST['mail'];
$empresa = $_POST['empresa'];

$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje = "Este mensaje fue enviado por " . $nombre . ", de la empresa " . $empresa . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Mensaje: " . $_POST['mensaje'] . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());

$para = '[email protected]';
$asunto = 'Contacto desde Mi Web';

mail($para, $asunto, utf8_decode($mensaje), $header);

echo 'Mensaje enviado correctamente';
?>


Eh leído que puede ser la configuración de php.ini

pero me es imposible encontrarlo. ya probe con info.php, me dice que se encuentra en C:/windows pero no esta ahí


Espero me puedan ayudar. desde ya muchas gracias

Saludos
  #2 (permalink)  
Antiguo 24/12/2011, 22:53
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 8 meses
Puntos: 1567
Respuesta: Formulario php fail

En teoría el error se produce porque $mail no es una dirección de correo válida, la función mail() se ejecuta correctamente en tu script, porque si lees el mensaje de error verá que efectivamente estás recibiendo una respuesta del servidor SMTP (código 554).

Como no todos los SMTP tienen la misma config. sería bueno que envíes un mensaje desde tu correo electrónico al servidor que estas ejecuntando para mail() (Gmail, yahoo, hotmail, u el que sea) y analices la cabeceras completas

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 25/12/2011, 00:17
 
Fecha de Ingreso: mayo-2011
Mensajes: 62
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Formulario php fail

Me parece que es un error de la configuración del servidor SMTP...
Fijate abri el php.ini y lee esto si te sirve
http://www.desarrolloweb.com/faq/con...-ini-smtp.html
  #4 (permalink)  
Antiguo 25/12/2011, 15:36
 
Fecha de Ingreso: julio-2011
Ubicación: Rosario
Mensajes: 39
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Formulario php fail

Gracias por las respuestas muchachos. Punto 1: el correo es valido ya que mando mail de cualquier lado y llegan bien.

Punto 2: Como dije antes, ya busque php.ini pero no puedo encontrarlo. En info.php me dice esta en c:/windows. pero no lo encuentro.
Hay otra forma de encontrarlo?
  #5 (permalink)  
Antiguo 25/12/2011, 15:50
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 8 meses
Puntos: 1567
Respuesta: Formulario php fail

ah, estás con windows? y que usas xampp? y a traves de que cuenta de email estás mandando? gmail, hotmail, otra?
dame esos datos y te digo como mandar correo con ese sistema

Te insisto el problema no esta en tu php, es una limitación que te esta poniendo el administrador de tu smtp
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Última edición por emprear; 25/12/2011 a las 15:59
  #6 (permalink)  
Antiguo 25/12/2011, 21:13
 
Fecha de Ingreso: julio-2011
Ubicación: Rosario
Mensajes: 39
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Formulario php fail

Windows xp. No uso xampp. y la cuenta de mail es de un dominio que tengo. no es ni hotmail, ni gmail ni ninguno. sino que es del dominio.
  #7 (permalink)  
Antiguo 25/12/2011, 21:28
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 13 años, 11 meses
Puntos: 461
Respuesta: Formulario php fail

el problema si no estoy viendo mal es el siguiente, estas colocando en el From es la cuenta que estan llenando los usuarios y el para estas colocando la cuenta de tu host, entonces tu script deberia de quedar asi
Código PHP:
Ver original
  1. $nombre = $_POST['nombre'];
  2. $mail = $_POST['mail'];
  3. $empresa = $_POST['empresa'];
  4.  
  5. $header = "From: [email protected]  \r\n";
  6. $header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
  7. $header .= "Mime-Version: 1.0 \r\n";
  8. $header .= "Content-Type: text/plain";
  9.  
  10. $mensaje = "Este mensaje fue enviado por " . $nombre . ", de la empresa " . $empresa . " \r\n";
  11. $mensaje .= "Su e-mail es: " . $mail . " \r\n";
  12. $mensaje .= "Mensaje: " . $_POST['mensaje'] . " \r\n";
  13. $mensaje .= "Enviado el " . date('d/m/Y', time());
  14.  
  15. $asunto = 'Contacto desde Mi Web';
  16.  
  17. mail($mail, $asunto, utf8_decode($mensaje), $header);
  18.  
  19. echo 'Mensaje enviado correctamente';
acá algunos ejemplos, prueba y nos comentas a ver
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #8 (permalink)  
Antiguo 25/12/2011, 22:21
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 8 meses
Puntos: 1567
Respuesta: Formulario php fail

En primer lugar le hago una aclaración a @carlos_belisario, en tanto esté recibiendo algunas de estas respuestas
550 relaying denied, 572 relay not authorized, 554 relay access denied

Basicamente significa que el administrador del smtp donde tiene registrada su cuenta tiene configurado el mismo para denegar el servicio de relay, que es lo que permite el intercambio de correos entre los diferentes servidores. Esto lo hacen habitualmente para prevenir el spam, la restricción puede ser que solo puedas enviar correos desde una PC en la propia red, ó lo que es más probable, te exija una forma de autentificación.

la función de php mail(), usa como primer parámetro el "to", es decir la dirección de correo a la que se envía, supongamos e el ejemplo [email protected] , el valor de from: sería $_POST['mail'], que es lo que el usuario ingresó en el formulario, y se usa para construir el encabezado (headers), y debería tener un formato válido (hay que hacer la correspondiente validación en el php.

@elcanalla86:
Ahora, para mandar mensajes desde tu localhost con php, lo que deberías hacer es:

Primero descargarte http://glob.com.au/sendmail/
Descomprimis el zip en, por ejemplo
c:/sendmail
El paso siguiente es configurar el archivo sendmail.ini (incluido en el zip)
entre otras cosas vas a encontrarte con esto
auth_username=
auth_password=
donde tenes que poner
[email protected]
auth_password=tupassword


El resto de los valores están bien explicados, pero no todos son obligatorios
los que deberias completar son
smtp_server=smtp.gmail.com
smtp_port=465
smtp_ssl=auto
default_domain=gmail.com
error_logfile=error.log
debug_logfile=debug.log
[email protected]
auth_password=xxxxxxx
hostname=gmail.com

como verás uso una cuenta de gmail, vos deberás pòner los que correspondan a tu server y tu cuenta, los archivos .log se crean en la misma carpeta, y son buenos para analizar posibles fallos.
Un detalle, ejecutándose en Windows 7, sendmail.exe, si hay un error en el envio, falla y porduce un error , y win 7 genera una advertencia y te pide cerrar la aplicación, asi y todo, vas a ver en el navegador la leyenda "mensaje enviado" de tu php, es decir para mail(), el resultado es true, con solo haberse comunicado con con sendmail.exe, de ninguna manera verifica si el envio se hizo (digo esto porque no se en xp hace lo mismo, me parece que no te da opcion a cerrarla y hay que ir al administrador de tareas para eso). Para hacer ese tipo de comprobaciones tenes que usar librerías como phpmailer, que incluyen clases mas avanzadas que utilizan una conexión directa con tu smtp.


una vez hecho esto, abris el archivo php.ini y buscas la seccion mail function

Código INI:
Ver original
  1. [mail function]
  2. ; For Win32 only.
  3. ; http://php.net/smtp
  4. SMTP = localhost
  5. ; http://php.net/smtp-port
  6. smtp_port = 25
  7.  
  8. ; For Win32 only.
  9. ; http://php.net/sendmail-from
  10. sendmail_from = [email protected]
  11.  
  12. ; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
  13. ; http://php.net/sendmail-path
  14. sendmail_path = "C:\sendmail\sendmail"

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: fail, formulario, html
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.
Respuesta




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