Foros del Web » Programando para Internet » PHP »

Porque el correo no se manda (cuando la misma validación dice que sí).

Estas en el tema de Porque el correo no se manda (cuando la misma validación dice que sí). en el foro de PHP en Foros del Web. Tengo un problema, y es que bajé una librería en PHP y AJAX para mandar correos, y no manda nada. Aunque según la validación de ...
  #1 (permalink)  
Antiguo 06/08/2009, 12:40
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 4 meses
Puntos: 15
Porque el correo no se manda (cuando la misma validación dice que sí).

Tengo un problema, y es que bajé una librería en PHP y AJAX para mandar correos, y no manda nada. Aunque según la validación de esta librería dice que se ha mandado con éxito, no se que puede ser.

El sistema está en www.araguatehotel.com.

Les pongo el código de los archivos que lo conforman, (cambie el correo en este ejemplo para evitar spam).

config.php
Código:
<?php
// To
define("WEBMASTER_EMAIL", '[email protected]');

// Reply To
define("REPLY_TO", '[email protected]');
?>
contact.php
Código:
<?php
/*
Credits: Bit Repository
URL: http://www.bitrepository.com/
*/
include 'config.php';
error_reporting (E_ALL ^ E_NOTICE);

$post = (!empty($_POST)) ? true : false;

if($post)
{
include 'functions.php';

$name = stripslashes($_POST['name']);
$email = trim($_POST['email']);
$subject = stripslashes($_POST['subject']);
$message = htmlspecialchars($_POST['message']);

$error = '';

// Check name
if(!$name)
{
$error .= 'No has intruoducido tu nombre.<br />';
}

// Check email
if(!$email)
{
$error .= 'No has introducido tu e-mail.<br />';
}

if($email && !ValidateEmail($email))
{
$error .= 'Por favor escribe un email válido.<br />';
}

// Check message (length)
if(!$message || strlen($message) < 10)
{
$error .= "Por favor escribe tu mensaje. Debe tener al menos 10 caracteres.<br />";
}


if(!$error)
{
$mail = mail(WEBMASTER_EMAIL, $subject, $message,
     "From: ".$email."\r\n"
    ."Reply-To: ".REPLY_TO."\r\n"
    ."X-Mailer: PHP/" . phpversion());

if($mail)
{
echo 'OK';
}

}
else
{
echo '<div class="notification_error">'.$error.'</div>';
}

}
?>
feedback.php
Código:
<?php
/*
Credits: Bit Repository
URL: http://www.bitrepository.com/
*/

include 'config.php';

error_reporting (E_ALL ^ E_NOTICE);

$post = (!empty($_POST)) ? true : false;

if($post)
{
include 'functions.php';

$name = stripslashes($_POST['name']);
$message = htmlspecialchars($_POST['message']);

$error = '';

// Check name

if(!$name)
{
$error .= 'Please enter your name.<br />';
}

// Check message (length)

if(!$message || strlen($message) < 15)
{
$error .= "Please enter your message. It should have at least 15 characters.<br />";
}


if(!$error)
{
$mail = mail(WEBMASTER_EMAIL, 'Feedback', $message,
     "From: ".$email."\r\n"
    ."Reply-To: ".REPLY_TO."\r\n"
    ."X-Mailer: PHP/" . phpversion());

if($mail)
{
echo 'OK';
}

}
else
{
echo '<div class="notification_error">'.$error.'</div>';
}

}
?>
Sigo en el siguiente post...
  #2 (permalink)  
Antiguo 06/08/2009, 12:42
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 4 meses
Puntos: 15
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

cform.js

Código:
// JavaScript Document

<!--  
// When DOM is ready
$(document).ready(function(){

// ------- Submit First Form -------

$("#contact").submit(function(){

var str = $(this).serialize();

   $.ajax({
   type: "POST",
   url: "contact.php",
   data: str,
   success: function(msg){
    
$("#note").ajaxComplete(function(event, request, settings){

if(msg == 'OK') // Message Sent? Show the 'Thank You' message and hide the form
{
result = '<div class="notification_ok">Tu mensaje se ha enviado, te reponderemos lo mas pronto posible. </div>';
$("#fields").hide();
}
else
{
result = msg;
}

$(this).html(result);

});

}

 });

return false;

});

// ------- Submit Second Form -------

$("#feedback").submit(function() {

var str = $(this).serialize();

   $.ajax({
   type: "POST",
   url: "feedback.php",
   data: str,
   success: function(msg){
    
$("#note-two").ajaxComplete(function(event, request, settings){

if(msg == 'OK') // Message Sent? Show the 'Thank You' message and hide the form
{
result = '<div class="notification_ok">Tu mensaje se ha enviado, te reponderemos lo mas pronto posible. </div>';
$("#fields-two").hide();
}
else
{
result = msg;
}

$(this).html(result);

});

}

 });

return false;

});

});
-->
index.php (donde está el formulario). Solo agrego el formulario y los llamados a Javascript porque lo demás no tiene relevancia ponerlo.

Código:
<script type="text/javascript" src="cform.js"></script>
<script src='js/jquery-1.3.2.min.js' type='text/javascript'></script>

<div id="fields">
          
<h2><form id="contact" name="form" action="javascript:alert('success!');">
<label>Nombre</label><INPUT class="textbox" type="text" name="name" value=""><br />

<label>E-Mail</label><INPUT class="textbox" type="text" name="email" value=""><br />

<label>Asunto</label><INPUT class="textbox" type="text" name="subject" value=""><br />

<label>Comentarios</label><TEXTAREA class="textbox" NAME="message" ROWS="5" COLS="25"></TEXTAREA><br />

<label>&nbsp;</label><INPUT id="submit" class="button" type="submit" name="submit" value="Enviar Mensaje"><div id="loading"></div><span id="dots"></span>
</form></h2>

		<br /><br />
	<br /><br />
			</div>
  #3 (permalink)  
Antiguo 06/08/2009, 12:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

La función mail() solo te indica si el correo fue entregado correctamente al servidor SMTP, no te indica si el correo fue enviado o no, esa ya es tarea del servidor SMTP.

Saludos.
  #4 (permalink)  
Antiguo 06/08/2009, 12:45
Avatar de fcdragons  
Fecha de Ingreso: agosto-2008
Ubicación: echo $_REQUEST['ubicacion'];
Mensajes: 474
Antigüedad: 15 años, 8 meses
Puntos: 13
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

Bueno, pues supongo que tu servidor, o no tiene activado la funcion mail() o no te da servidor smtp, o ninguno de los dos, contacta con el administrador del sitio.

Si no te deja, busca un hosting que te aloje mail() y permita smtp
__________________
SumarioWeb
@sumarioweb
BasicNews
  #5 (permalink)  
Antiguo 06/08/2009, 12:46
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 4 meses
Puntos: 15
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

¿Entonces es cosa del servidor?
  #6 (permalink)  
Antiguo 06/08/2009, 12:47
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

Si no te sale enviar un mail sencillo es problema del servidor
Código PHP:
Ver original
  1. mail("email @dominio.com","Titulo","Texto sencillo");
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 06/08/2009, 12:58
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 4 meses
Puntos: 15
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

Cita:
Iniciado por abimaelrc Ver Mensaje
Si no te sale enviar un mail sencillo es problema del servidor
Código PHP:
Ver original
  1. mail("email @dominio.com","Titulo","Texto sencillo");
Hice la prueba y si me lo mandó. Entonces algo ha de haber mal en el código, lo que no se es que...
  #8 (permalink)  
Antiguo 06/08/2009, 13:09
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

Te sugiero que antes de implementar el codigo vayas tu creando por partes para ver si todo se envia correcto. Por ejemplo crea variables que esten fuera de la funcion mail() y ahi empieza a declarar todo. Cuando hayas visto que se envio en forma sencilla, empieza a enviar un email con html, busca en el web que hay muchos tutoriales que te dicen como enviar un mail con html. Si logras hacerlo entonces implementa lo que encontraste y verifica si lo envia.

Ejemplo de lo que te digo
Código PHP:
Ver original
  1. $to = "EMAIL";
  2. $subject = "Titulo";
  3. $body = "Mensaje sencillo primero y luego con html";
  4. $headers = "Headers que son requerible para enviar html";
  5. $headers .= "Continuacion de los headers";
  6. mail($to, $subject, $body, $headers)
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 06/08/2009, 15:03
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 4 meses
Puntos: 15
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

Ya lo intenté y nada de nada, no se que haya en el código que esté deteniendo eso.
  #10 (permalink)  
Antiguo 06/08/2009, 15:11
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

¿Pero probaste haciendolo primero tu? Como te indique
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 06/08/2009, 15:11
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 4 meses
Puntos: 15
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

Si, y si se envió. El problema parece ser el código y no el servidor.

Lo modifiqué para que quedara así, pero sigue sin pasar nada

Código:
<?php
/*
Credits: Bit Repository
URL: http://www.bitrepository.com/
*/
;
error_reporting (E_ALL ^ E_NOTICE);

$post = (!empty($_POST)) ? true : false;

if($post)
{
include 'functions.php';

$webmastermail = "[email protected]";
$replyto = "[email protected]";
$name = stripslashes($_POST['name']);
$email = trim($_POST['email']);
$subject = stripslashes($_POST['subject']);
$message = htmlspecialchars($_POST['message']);

$error = '';

// Check name
if(!$name)
{
$error .= 'No has intruoducido tu nombre.<br />';
}

// Check email
if(!$email)
{
$error .= 'No has introducido tu e-mail.<br />';
}

if($email && !ValidateEmail($email))
{
$error .= 'Por favor escribe un email válido.<br />';
}

// Check message (length)
if(!$message || strlen($message) < 10)
{
$error .= "Por favor escribe tu mensaje. Debe tener al menos 10 caracteres.<br />";
}


if(!$error)
{
$mail = mail($webmastermail, $subject, $message,
     "From: ".$email."\r\n"
    ."Reply-To: ".$replyto."\r\n"
    ."X-Mailer: PHP/" . phpversion());
	
	 mail($webmastermail, $subject, $message,
     "From: ".$email."\r\n"
    ."Reply-To: ".$replyto."\r\n"
    ."X-Mailer: PHP/" . phpversion());

if($mail)
{
echo 'OK';
}

}
else
{
echo '<div class="notification_error">'.$error.'</div>';
}

}
?>
  #12 (permalink)  
Antiguo 06/08/2009, 15:13
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

Trata de crear tu mismo el codigo de ajax para enviar el formulario y cuando tengas dudas nos preguntas para poder ayudarte. Porque trabajar con un codigo ya fabricado es un poco complicado
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #13 (permalink)  
Antiguo 06/08/2009, 15:16
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 4 meses
Puntos: 15
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

Lo malo es que casi no se nada de Ajax.

El ajax (el form.js) si logra mandar las variables a contact.php, tan es así que el php si las valida (cada campo tiene una orden de validación), de lo contrario no estaría pasando nada.

El problema creo está dentro del php, porque la variable que dice el correo a donde se tiene que mandar ya la declaré y la puse en la función mail()

Cuando se termina de ejecutar el php, se vuelve a comunicar con ajax para decirle si se envió y que abajo te aparezca el mensaje de "gracias, te contestaremos" (que es el que me aparece) o un mensaje de error.
  #14 (permalink)  
Antiguo 06/08/2009, 15:24
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

En realidad para lo que tu quieres hacer no es muy complicado en ajax te sugiero estudiar este tutorial para que entiendas como hacer una aplicación con ajax. Lo unico que la parte del codigo del servidor lo hace con ASP pero implementa lo que enseñan con PHP.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #15 (permalink)  
Antiguo 06/08/2009, 15:26
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 4 meses
Puntos: 15
muchas gracias

Mira, cuanto trato de enviarlo desde el localhost me aparece esto:


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:\Servidor\Apache2\htdocs\Clientes\Araguate\conta ct.php on line 51

Lo que quiere decir que en el servidor si se está logrando conectar al SMTP, la duda es ¿porque no llega el correo a donde tiene que llegar?.

Última edición por GatorV; 06/08/2009 a las 17:08
  #16 (permalink)  
Antiguo 06/08/2009, 15:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

No tienes un SMTP SERVER instalado, busca uno, instalalo y luego trata
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #17 (permalink)  
Antiguo 06/08/2009, 15:53
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 4 meses
Puntos: 15
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

Cita:
Iniciado por abimaelrc Ver Mensaje
No tienes un SMTP SERVER instalado, busca uno, instalalo y luego trata
Ah a lo que me refería es que ese error en el localhost me dice que está tratando de hacer la conexión al SMTP, que como tu bien dijiste, no lo tengo instalado en local.

Pero en el sitio web me dice que el correo se ha enviado. Lo que quiere decir que ha superado la prueba y se ha logrado comunicar con el SMTP, pero no está llegando nada en el correo. No es un problema del servidor, porque hice la prueba con un código sencillo y si me llegó.

Parece que no es el ajax, porque claramente el que envía la información es el php con el mail().

El ajax creo que mas bien envía los datos y recibe la confirmación de que se ha enviado.
  #18 (permalink)  
Antiguo 06/08/2009, 15:58
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Porque el correo no se manda (cuando la misma validación dice que sí).

Ok, primero si estas enviando html el problema no es ni el codigo ni el servidor es que por ejemplo hotmail considera que tu email es un spam, por eso el problema ya no es ninguno de los dos (ni codigo, ni servidor). Si quieres haz varias prueba con texto sencillo sin html y uno con html pero sin <a .... > y si te llega el email trata entonces de colocar los <a .....> para ver si llega el email. Pero ya en tu caso el envio de email no es el codigo ni el servidor tuyo sino mas bien donde se envia el email que tiene unas serie de reglas para evitar los spam.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
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 14:38.