Foros del Web » Programando para Internet » PHP »

enviar formulario e-mail

Estas en el tema de enviar formulario e-mail en el foro de PHP en Foros del Web. Hola, primero comentaros que estoy empezando en esto del php asi que si pregunto cosas muy obvias perdonadme. El tema es que quiero que a ...
  #1 (permalink)  
Antiguo 18/04/2009, 07:37
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
Exclamación enviar formulario e-mail

Hola,
primero comentaros que estoy empezando en esto del php asi que si pregunto cosas muy obvias perdonadme.

El tema es que quiero que a traves de un formulario de contacto, el usuario de la web pueda enviar alguna consulta a una direccion de correo que tengo configurada en el servidor. Buscando por google he encontrado el codigo y he descargado la carpeta de phpmailer con el class.phpmailer.php y class.smtp.php.
He creado dos archivos un *formulario.html con el codigo para visualizar el formulario:

Código:
<form name="contacto" action="" method="post">
<table width="100%">
	<tr>
		<td width="20%">Nombre:</td>
		<td><input type="text" name="nombre" size="30px" /></td>
	</tr>
	<tr>
		<td>Direcci&oacute;n de correo:</td>
		<td><input type="text" name="direccion" size="30px" /></td>
	</tr>
	<tr>
		<td>Asunto:</td>
		<td><input type="text" name="asunto" size="30px" /></td>
	</tr>
	<tr>
		<td valign="top">Mensaje:</td>
		<td>
			<textarea name="mensaje" cols="30"></textarea>
		</td>
	</tr>
	<tr>
		<td colspan="2" align="center">
			<input type="submit" name="enviar" value="Enviar" />
		</td>
	</tr>
</table>
</form>
y por otro lado el archivo contacto.php con el siguiente codigo que saque de internet:

Código:
<?php
	include("includes/phpmailer/class.phpmailer.php");
	$mail = new PHPMailer();
	$mail->PluginDir = "includes/phpmailer";
	$mail->Mailer = "smtp";
	$mail->Host = "smtp.hotpop.com";
	$mail->SMTPAuth = true;
	$mail->Username = "nombre_micuenta[arroba]HotPOP.com"; 
	$mail->Password = "micontraseña";
	$mail->From = "cuenta_usuario[arroba]direccion.com";
	$mail->FromName = "Nombre Usuario";
	$mail->Timeout=30;
	$mail->AddAddress("nombre_micuenta[arroba]HotPOP.com");
	$mail->Subject = "Prueba de phpmailer";
	$mail->AltBody = "Mensaje de prueba mandado con phpmailer en formato solo texto";
	$exito = $mail->Send();
	$intentos=1; 
	while ((!$exito) && ($intentos < 5)) {
		sleep(5);
     	//echo $mail->ErrorInfo;
     	$exito = $mail->Send();
     	$intentos=$intentos+1;
	}
	if(!$exito) {
		echo "Problemas enviando correo electrónico a ".$valor;
		echo "<br>".$mail->ErrorInfo;
	} else {
		echo "Mensaje enviado correctamente";
	} 
?>
la carpeta "phpmailer" la tengo dentro de otra llamada "includes", asi que por ahi bien. el problema es que no se como relacionar esos 2 archivos html y php, por lo que creo tal vez deberia ir en el action del formulario la llamada a contacto.php, pero como tambien quiero obligar a que se cumplimenten todos los campos no se como lo hacer.
y que quiere decir "->" en las sentencias como $mail->Mailer = "smtp"; no habia visto hasta ahora usar en php "->"

no lo he llegado a probar porque no se como conectarlo, si me podeis corregir el codigo si hay algo mal y orientarme sobre que pasos seguir una vez en el diseño del formulario os lo agradeceria. me he liado un poco con "username, from, addaddress". en username creo entender que va mi direccion de correo al igual que en addaddress y en from la del usuario que envia el mensaje. he buscado otra funcion para comprobar que el formato de e-mail del emisor sea correcto, aunque de momento solo quiero comprobar que el correo llegue a mi cuenta

he creado una cuenta de hotpop, para hacer pruebas antes de subirlo al servidor, estoy trabajando en local con windows xp, y un servidor apache, mysql y php.

Si hay algo raro que no se entienda o que este sin explicar decidmelo, he estado dandole tantas vueltas que ya casi ni se por donde ando

Muchas gracias

Última edición por drasan; 18/04/2009 a las 07:55
  #2 (permalink)  
Antiguo 18/04/2009, 08:02
Avatar de By_George  
Fecha de Ingreso: abril-2009
Ubicación: localhost
Mensajes: 629
Antigüedad: 15 años
Puntos: 19
Respuesta: enviar formulario e-mail

Cita:
Iniciado por drasan Ver Mensaje
creo tal vez deberia ir en el action del formulario la llamada a contacto.php
efectivamente el action del formulario lo tienes que direccionar al segundo documento

Cita:
Iniciado por drasan Ver Mensaje
pero como tambien quiero obligar a que se cumplimenten todos los campos no se como lo hacer.
no se si entendi bien pero lo que quieres es evaluar los campos de tu formulario par que eusuario los rellene los que sean necesario, si es asi se puede hacer del laddo del cliente con javascript mandando a llamar en el onsubmit del formulario la funcion javascript que te evalues los campos, pero t recomiendo que lo hagas del lado servidor con php al momento de recibir los datos en el segundo documento
  #3 (permalink)  
Antiguo 18/04/2009, 08:34
 
Fecha de Ingreso: abril-2009
Mensajes: 23
Antigüedad: 15 años
Puntos: 0
Respuesta: enviar formulario e-mail

Haz lo siguente:

En el Formulario debes ponerle en action. (si no no sabe donde ir ).
Código:
<form name="contacto" action="contacto.php" method="post">
Para Que se cumplan los campos debes poner una secuensa case o if-elseif en contacto.php.
Tampoco necesitas el PHPMailer, hazlo tu mismo, es bastante sencillo. Se hace uso de la Funcion mail() y el metodo $_REQUEST o $_POST (para obtener los datos del formulario anterior).Tambien puedes usar la funcion strlen para la longitud de texto.


Aca esta contacto.php completo:

Código PHP:
<?php
//verificamos que ningun campo tenga menos de 4 cararacteres con strlen()

if (strlen($_POST['nombre']) <= || strlen($_POST['direccion']) <= || strlen($_POST['asunto']) <= || strlen($_POST['mensaje']) <= 4  )
{
echo 
"Completar todos los campos, min.: 4 caracteres";
}
else
{
$nombre "Nombre de la persona:" $_POST['nombre'] . "\n"//si te fijas el nombre del $_POST es el valor que tiene el campo de texto en name
$correo "From: " "<" $_POST['direccion'] . ">\r\n" "Reply-To: " $_POST['direccion'];
$asunto $_POST['asunto'];
$mensaje $nombre $_POST['mensaje'];
$tuemail "[email protected]";

mail($tuemail$asunto$mensaje$correo);

echo 
"Email enviado con exito";
}

?>
Ya esta el codigo del envío.

Yapa:
Asi funciona la funcion mail().

mail("email remitente", "asunto del mail","mensaje del mail", "email emisor");

y listo, te lo envía, pero yo tengo una cuenta en gmail y a estos mensaje los recibo como Span. Pero no importa, los puedo leer.

PD = con "\n" bajas una linea y "||" quiere decir o u or.
  #4 (permalink)  
Antiguo 18/04/2009, 08:40
Avatar de By_George  
Fecha de Ingreso: abril-2009
Ubicación: localhost
Mensajes: 629
Antigüedad: 15 años
Puntos: 19
Respuesta: enviar formulario e-mail

ok tienes todo la razon disculapa tratare de mejorar mis respuestas bueno no soy un experto jejeje
  #5 (permalink)  
Antiguo 18/04/2009, 08:43
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
Respuesta: enviar formulario e-mail

gracias por la rapidez en responder, probare ahora mismo el codigo y os cuento. he leido que phpmailer se utiliza si quieres enviar archivos adjuntos y yo solo quiero enviar la informacion del textarea, asi que mucho mas sencillo :)
hay algun otro caso especifico que sea obligatorio usar esa funcion, lo digo por si mas adelante hiciese falta.
George efectivamente lo que quiero es que me rellene todos los campos

bueno voy a probar


Lo acabo de probar, pero a la hora de enviar los datos me sale este mensaje

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in E:\PHP\web\contacto.php on line 19
Email enviado con exito

lo unico que he cambiado es que puse la direccion de correo que acabo de crear en gmail, pero no llego ningun correo

Última edición por drasan; 18/04/2009 a las 08:52
  #6 (permalink)  
Antiguo 18/04/2009, 09:14
Avatar de By_George  
Fecha de Ingreso: abril-2009
Ubicación: localhost
Mensajes: 629
Antigüedad: 15 años
Puntos: 19
Respuesta: enviar formulario e-mail

sera que no tienes configurado el php.ini en la seccion de [mail function] en el php.ini hay una parte que dice smtp debe de estar si es desde tu maquina local localhost y en smt_port el puerto de salida por default 25 y si tienes algun firewall debes de habilitar el puerto 25
  #7 (permalink)  
Antiguo 18/04/2009, 09:30
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
Respuesta: enviar formulario e-mail

george gracias por las guias pero sigue practicamente igual :S

Warning: mail() [function.mail]: Failed to connect to mailserver at "smtp.hotpop.com" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in E:\\PHP\web\contacto.php on line 19
Email enviado con exito

el contenido de php.ini en la parte de configuracion mail es la siguiente

[mail function]
; For Win32 only.
SMTP = smtp.hotpop.com
smtp_port = 25

; For Win32 only.
sendmail_from = [email protected]

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_paramaters =

ahh, se me olvidaba permiti el acceso al puerto 25 en el firewall
  #8 (permalink)  
Antiguo 18/04/2009, 10:14
Avatar de By_George  
Fecha de Ingreso: abril-2009
Ubicación: localhost
Mensajes: 629
Antigüedad: 15 años
Puntos: 19
Respuesta: enviar formulario e-mail

ok el error es por que falta un servidor smtp checa este link aqui se trata ese problema y dan la solucion checalo servidor smtp
  #9 (permalink)  
Antiguo 18/04/2009, 11:04
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
Respuesta: enviar formulario e-mail

gracias George! me baje ese programita y al menos el error ya no sale, pero sigo sin poder enviar e-mails...
no es problema del codigo porque probe con gmail y hotmaill y con ninguno llega y sale el mismo aviso con las dos direcciones, que se trata de ip's dinamicas y para evitar spam ninguno de ellos admite el correo, aunque en verdad si que se llega a enviar nunca llega porque lo paran los filtros anti-spam.

he estado buscando por sr. google pero no encuentro nada para evitar que no rechacen el correo, se puede agregar, modificar o eliminar algo en el cuerpo del mensaje para que no lo bloqueen

una cosilla mas, sabes que significa el operador (me imagino que sea un operador) "->" nunca antes lo habia visto y en muchas de las lineas despues hay un "=" asi que me desoriento del todo

muchas gracias de nuevo, poco a poco pero va saliendo :)
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 09:28.