Foros del Web » Programando para Internet » PHP »

enviar formulario por mail

Estas en el tema de enviar formulario por mail en el foro de PHP en Foros del Web. Hola, tengo algunos formularios que estaba enviando a un mail, todo funcionaba perfecto hasta que formatié mi computadora. Hice un par de cambios en la ...
  #1 (permalink)  
Antiguo 25/06/2008, 14:22
 
Fecha de Ingreso: julio-2007
Mensajes: 27
Antigüedad: 17 años, 4 meses
Puntos: 0
enviar formulario por mail

Hola, tengo algunos formularios que estaba enviando a un mail, todo funcionaba perfecto hasta que formatié mi computadora. Hice un par de cambios en la web que no tienen que ver con los formularios, pero los mails dejaron de llegar a destino. No sé si hay algo que tengo que configurar nuevamente o qué. Dejo el código para ver si me pueden ayudar...gracias!

archivo1.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Voluntario</title>
<script type="text/javascript">
function MM_validateForm() { //v4.0
if (document.getElementById){
var i,p,q,nm,test,num,min,max,errors='',args=MM_valida teForm.arguments;
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=document.getElementById(args[i]);
if (val) { nm=val.name; if ((val=val.value)!="") {
if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
} else if (test!='R') { num = parseFloat(val);
if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
min=test.substring(8,p); max=test.substring(p+1);
if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
} if (errors) alert('The following error(s) occurred:\n'+errors);
document.MM_returnValue = (errors == '');
} }
</script>
</head>


<div id="apDiv1">
<table width="458" border="0" align="right">
<tr class="otro">
<td width="132" class="style29"><a href="hagase_socio_2.php" class="otro"><span class="style18 style18"><strong> Socio colaborador</strong></span></a></td>
<td width="139" class="style29"><a href="apadrinar.php" class="otro"><span class="style18 style18"><strong>Apadrinar proyecto</strong></span></a></td>
<td width="100" class="style29"><a href="donacion_unica.php" class="otro"><span class="style18 style18"><strong>Donaci&oacute;n &uacute;nica</strong></span></a></td>
<td width="69" class="style29"><a href="../index.php" class="otro"><span class="style18 style18"><strong>Inicio</strong></span></a></td>
</tr>
</table>
<p align="center" class="style1"><span class="style28">__________________________________ ______________________</span></p>
<p align="center" class="style1">&nbsp;</p>
<p align="center" class="style1"><span class="style28">Para obtener informaci&oacute;n acerca de las formas de voluntariado complete el siguiente formulario y nos comunicaremos con usted</span></p>
<p class="style29"><a href="file:///C|/wamp2/www/cenfa2_10abril/index.php"></a></p>

<blockquote>
<form action="gracias_vol.php" method="post" name="form2" id="form2" onsubmit="MM_validateForm('nombre','','R','tel','' ,'RisNum','mail','','RisEmail');return document.MM_returnValue">
<table width="325" border="0" align="center" bgcolor="#FBD4AB">
<tr>
<td width="88" class="style13">Nombre:</td>
<td width="287"><label>
<input name="nombre" type="text" id="nombre" size="32" />
</label></td>
</tr>
<tr>
<td class="style13">Tel&eacute;fono:</td>
<td><input name="tel" type="text" id="tel" size="32" /></td>
</tr>
<tr>
<td class="style13">Correo electr&oacute;nico:</td>
<td><input name="mail" type="text" id="mail" size="32" /></td>
</tr>
<tr>
<td class="style13">Fecha</td>
<td><input name="fecha" type="text" id="fecha" value="<?php echo gmdate("Y-m-d");?>" size="32" /></td>
</tr>
<tr>
<td class="style13">Comentarios:</td>
<td><label>
<textarea name="mensaje" id="mensaje" cols="32" rows="5"></textarea>
</label></td>
</tr>
<tr>
<td class="style13">&nbsp;</td>
<td><label>
<input type="submit" name="button" id="button" value="Enviar" />
</label></td>
</tr>
</table>
</form>
<p>&nbsp;</p>
</blockquote>
<p>&nbsp;</p>
</div>
<p><a href="../index.php"><img src="../imagenes/logoindex.jpg" width="387" height="210" border="0" /></a></p>
<p>&nbsp;</p>
<table>
<tbody>
<tr>
<td width="100%"><span class="style16"> HAZ TU APORTE...</span></td>
</tr>
</tbody>
</table>
<table width="452" border="0" bordercolor="#F67A30">
<tbody>
<tr>
<td colspan="2" valign="top"><p align="justify" class="Estilo1">Done dinero a CENFA una sola vez, el que permitir&aacute; mantener y aumentar la atenci&oacute;n a aquellas familias de menores recursos a trav&eacute;s de dos opciones: donaciones en l&iacute;nea y por medio de un formulario que lo contactar&aacute; con nosotros.<br />
</p>
<p align="justify" class="Estilo1"><br />
</p>
<p class="style18">&nbsp;</p> </td>
</tr>
</tbody>
</table>
<p class="style1"><a href="file:///C|/wamp2/www/cenfa2_10abril/index.php">volver</a></p>
<p class="style1">&nbsp;</p>
<p class="style1">&nbsp;</p>
<p class="style1">&nbsp;</p>
<p class="style1">&nbsp;</p>
<blockquote>
<p class="style1"><span class="style151 style18 style18 style18 style18 style18 style18 Estilo2">Bellavista 61, Recoleta. Tel.: 7771025 / 7775419 / 9.4306603</span></p>
</blockquote>
</body>
</html>



archivo2.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Gracias</title>
</head>

<body>
<p><a href="../index.php"><img src="../imagenes/logochico.jpg" width="210" height="105" border="0" /></a></p>
<div align="center">
<p class="style1">Muchas gracias por comunicarse con CENFA Centro Nacional de la Familia. Muy pronto nos contactaremos con usted.</p>
<p class="style1"><a href="../index.php" class="Estilo19">Inicio</a></p>
</div>
</body>
</html>

<?php
function quitar($mensaje) //elimina simbolos indeseados
{
$mensaje = str_replace("<","&lt;",$mensaje);
$mensaje = str_replace(">","&gt;",$mensaje);
$mensaje = str_replace("\'","'",$mensaje);
$mensaje = str_replace('\"',"&quot;",$mensaje);
$mensaje = str_replace("\\\\","\",$mensaje);
return $mensaje;
}
//////////////////////////////////////////////////
$to = "[email protected]";// "[email protected]"; "[email protected]"; Aca el email donde llegara el mansaje

/* subject */
$subject = "Nuevo voluntario";

/* message */
$message = "Hay un nuevo voluntario para CENFA. El nombre del contacto es: "." ". $_POST['nombre']."<br>";
$message .= "email: "." " .$_POST['mail']."<br>";
$message .= "teléfono: "." " .$_POST['tel']."<br>";
$message .= "fecha: "." " .$_POST['fecha']."<br>";
$message .= "comentario: "." " .$_POST['mensaje']."<br>";


/* To send HTML mail, you can set the Content-type header. */
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

$headers .= "To: <[email protected]>\r\n";//Aca el email donde llegara el mansaje
$headers .= "From: Mensaje Web <[email protected]>\r\n";//Aca deves poner un email del sitio
//$headers .= "Cc: [email protected]\r\n"; //este es con copia
//$headers .= "Bcc: [email protected]\r\n";// este es con copia oculta

mail($to, $subject, $message, $headers);
?>
  #2 (permalink)  
Antiguo 25/06/2008, 15:00
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 9 meses
Puntos: 20
Respuesta: enviar formulario por mail

Aprecio que hayas puesto el título en grande para separar bien los archivos, pero por lo demás nos lo has dejado muy "sucio". Al menos dí qué error tienes para poder ayudarte
  #3 (permalink)  
Antiguo 25/06/2008, 15:05
 
Fecha de Ingreso: julio-2007
Mensajes: 27
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: enviar formulario por mail

jeje toda la razón...perdón!
El error no sé cuál es, no me dice nada. El usuario puede llenar sin problemas el formulario y le aparece el mensaje de agradeciemiento confirmando el correcto envío de su mail (archivo2.php). Pero los mails no llegan a destino....
  #4 (permalink)  
Antiguo 25/06/2008, 15:12
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 9 meses
Puntos: 20
Respuesta: enviar formulario por mail

Esta línea

Código PHP:
mail($to$subject$message$headers); 
Prueba a ponerla así:
Código PHP:
if (mail($to$subject$message$headers))
   {
      echo 
"E-mail enviado";
   }
else
   {
      echo 
"Error al enviar";
   } 
Así evalúa si el e-mail se ha podido enviar o no.

Si te dice que sí se ha podido enviar mira cosas como que haya podido llegar a la carpeta de "correo no deseado", y también ten en cuenta que no tiene por qué llegar al momento, según servidor puede tardar bastante.

Suerte
  #5 (permalink)  
Antiguo 25/06/2008, 17:31
 
Fecha de Ingreso: julio-2007
Mensajes: 27
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: enviar formulario por mail

Gracias David
Hice la prueba y efectivamente me imprime "error al enviar" o sea que los mail no están llegando
Qué podrá ser?
Hay algo que tenga que configurar o es un error en el código?
Gracias nuevamente
  #6 (permalink)  
Antiguo 25/06/2008, 17:36
 
Fecha de Ingreso: julio-2007
Mensajes: 27
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: enviar formulario por mail

repito mi código (esta vez más limpio)

archivo1.php

<form action="gracias_vol.php" method="post" name="form2" id="form2" onsubmit="MM_validateForm('nombre','','R','tel','' ,'RisNum','mail','','RisEmail');return document.MM_returnValue">
<table width="325" border="0" align="center" bgcolor="#FBD4AB">
<tr>
<td width="88" class="style13">Nombre:</td>
<td width="287"><label>
<input name="nombre" type="text" id="nombre" size="32" />
</label></td>
</tr>
<tr>
<td class="style13">Tel&eacute;fono:</td>
<td><input name="tel" type="text" id="tel" size="32" /></td>
</tr>
<tr>
<td class="style13">Correo electr&oacute;nico:</td>
<td><input name="mail" type="text" id="mail" size="32" /></td>
</tr>
<tr>
<td class="style13">Fecha</td>
<td><input name="fecha" type="text" id="fecha" value="<?php echo gmdate("Y-m-d");?>" size="32" /></td>
</tr>
<tr>
<td class="style13">Comentarios:</td>
<td><label>
<textarea name="mensaje" id="mensaje" cols="32" rows="5"></textarea>
</label></td>
</tr>
<tr>
<td class="style13">&nbsp;</td>
<td><label>
<input type="submit" name="button" id="button" value="Enviar" />
</label></td>
</tr>
</table>
</form>



Archivo2.php


<?php
function quitar($mensaje) //elimina simbolos indeseados
{
$mensaje = str_replace("<","&lt;",$mensaje);
$mensaje = str_replace(">","&gt;",$mensaje);
$mensaje = str_replace("\'","'",$mensaje);
$mensaje = str_replace('\"',"&quot;",$mensaje);
$mensaje = str_replace("\\\\","\",$mensaje);
return $mensaje;
}
//////////////////////////////////////////////////
$to = "[email protected]";// "[email protected]"; "[email protected]"; Aca el email donde llegara el mansaje

/* subject */
$subject = "Nuevo voluntario";

/* message */
$message = "Hay un nuevo voluntario para CENFA. El nombre del contacto es: "." ". $_POST['nombre']."<br>";
$message .= "email: "." " .$_POST['mail']."<br>";
$message .= "teléfono: "." " .$_POST['tel']."<br>";
$message .= "fecha: "." " .$_POST['fecha']."<br>";
$message .= "comentario: "." " .$_POST['mensaje']."<br>";


/* To send HTML mail, you can set the Content-type header. */
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

$headers .= "To: <[email protected]>\r\n";//Aca el email donde llegara el mansaje
$headers .= "From: Mensaje Web <[email protected]>\r\n";//Aca deves poner un email del sitio
//$headers .= "Cc: [email protected]\r\n"; //este es con copia
//$headers .= "Bcc: [email protected]\r\n";// este es con copia oculta

mail($to, $subject, $message, $headers);


?>
  #7 (permalink)  
Antiguo 25/06/2008, 17:44
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 568
Antigüedad: 19 años
Puntos: 25
Respuesta: enviar formulario por mail

estas seguro de que tienes la funcion mail habilitada?
__________________
www.marcher.com.uy - Web personal
Nerd's Corner - Desarrollo de software a medida
  #8 (permalink)  
Antiguo 25/06/2008, 18:08
 
Fecha de Ingreso: julio-2007
Mensajes: 27
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: enviar formulario por mail

lo tengo así:


[mail function]
; For Win32 only.
SMTP = localhost

en el php.ini
  #9 (permalink)  
Antiguo 25/06/2008, 18:45
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 568
Antigüedad: 19 años
Puntos: 25
Respuesta: enviar formulario por mail

entonces tienes un servidor smtp propio? esta bien configurado?
__________________
www.marcher.com.uy - Web personal
Nerd's Corner - Desarrollo de software a medida
  #10 (permalink)  
Antiguo 25/06/2008, 19:32
 
Fecha de Ingreso: julio-2007
Mensajes: 27
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: enviar formulario por mail

no...a ver si empiezo a entender, no tengo muy clara la configuración del php.ini.

Así está:

[mail function]
; For Win32 only.
SMTP = www.chileadmin.cl


y este es el error que me tira:

Cita:
Warning: mail() [function.mail]: SMTP server response: 501 <Mensaje Web <[email protected]>>: "@" or "." expected after "Mensaje" in C:\wamp\www\cenfa\menu_secundario\gracias_vol.php on line 78

Warning: mail() [function.mail]: SMTP server response: 501 <Mensaje Web <[email protected]>>: "@" or "." expected after "Mensaje" in C:\wamp\www\cenfa\menu_secundario\gracias_vol.php on line 80

repito las líneas de códgo que me devuelve como error:

Cita:
78 mail($to, $subject, $message, $headers);
79
80 if (mail($to, $subject, $message, $headers))
  #11 (permalink)  
Antiguo 25/06/2008, 20:30
 
Fecha de Ingreso: junio-2008
Mensajes: 4
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: enviar formulario por mail

Hola piripaz.
Lo q estuve viendo es q puede estar mal formateado el codigo en la parte de los headers trata de lograr algo asi:

$mailfrom:"[email protected]";
$mailto:"[email protected]";

$headers="";
$headers .= "From: \"".$mailfrom."\"\n";
$headers .= "To: \"".$mailto."\"\n";
  #12 (permalink)  
Antiguo 26/06/2008, 13:25
 
Fecha de Ingreso: julio-2007
Mensajes: 27
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: enviar formulario por mail

Gracias Rempty,
no hay caso...así quedó pero sigue sin enviarse el mail:

Cita:
$from.="[email protected]";
$to.="[email protected]";


/* subject */
$subject = "Nuevo voluntario";

/* message */
$message = "Hay un nuevo voluntario para CENFA. El nombre del contacto es: "." ". $_POST['nombre']."<br>";
$message .= "email: "." " .$_POST['mail']."<br>";
$message .= "teléfono: "." " .$_POST['tel']."<br>";
$message .= "fecha: "." " .$_POST['fecha']."<br>";
$message .= "comentario: "." " .$_POST['mensaje']."<br>";


/* To send HTML mail, you can set the Content-type header. */

$headers="";
$headers .= "From: \"".$from."\"\n";
$headers .= "To: \"".$to."\"\n";//



mail($to, $subject, $message, $headers);
Gracias por tu ayuda!
  #13 (permalink)  
Antiguo 26/06/2008, 14:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: enviar formulario por mail

Hola piripaz,

No puedes poner como SMTP un servidor externo a tu intranet, necesitas usar miniRelay para eso.

Saludos.
  #14 (permalink)  
Antiguo 26/06/2008, 14:50
 
Fecha de Ingreso: julio-2007
Mensajes: 27
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: enviar formulario por mail

muchas gracias!
Pero la verdad es que no entiendo nada, no sé qué es SMTP ni miniRelay. Mi página está subida a un servidor, tampoco tengo una intranet.
Que confusión!
Antes me funcionaba bien, no sé qué puedo haber cambiado. Claramente el error está en esa parte del php.ini, pero no sé qué es lo que debo poner

Saludos y gracias por cualquier pista que me den!
  #15 (permalink)  
Antiguo 26/06/2008, 15:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: enviar formulario por mail

Para enviar correos es FORZOSO que tengas un servidor SMTP, necesitas instalar uno para poder hacer el envío de correos electrónicos.

Saludos.
  #16 (permalink)  
Antiguo 26/06/2008, 16:45
 
Fecha de Ingreso: julio-2007
Mensajes: 27
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: enviar formulario por mail

Bueno, gracias nuevamente por la paciencia
Estos son los datos que tengo de mi servidor

Cita:
DATOS HOSTING
Dominio : cenfa.cl
Servidor : seti.tchile.com
Servidor de Correo : mail.cenfa.cl
Cuál es el que tengo que poner en el php.ini?
  #17 (permalink)  
Antiguo 26/06/2008, 16:47
 
Fecha de Ingreso: julio-2007
Mensajes: 27
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: enviar formulario por mail

también tengo esta información en mi phpinfo

Cita:
SMTP www.chileadmin.cl
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 12:55.