PHP - no envia el mensaje

   
Vista:

no envia el mensaje

Publicado por aldo (824 intervenciones) el 05/01/2016 15:00:10
Que tal, estoy tratando con este codigo enviar un mensaje de correo para recuperar una contraseña pero no lo está enviando, solo lo envia a la base de datos, pero al correo no lo hace.
Si alguien pudiera ayudarme a ver donde esta el problemilla, ya he buscado muchas formas.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
$conexion = pg_connect("host=localhost port=5432 dbname=pediatria user=postgres password=movilnet");
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
require("PHPMailer-master/class.phpmailer.php");
require("PHPMailer-master/class.smtp.php");
 
$email = $_POST['email'];
$e_mail="SELECT email FROM usuarios WHERE email = '$email'";
 
 
$res = @pg_query($conexion,$e_mail);
  if(@pg_num_rows($res)>0)
  {
     $cadena = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  	 $passw ='';
	 $lng_cadena = strlen($cadena);
	 $longitud = 8;
 
	 	for($x=1;$x<=$longitud;$x++)
		{
				$aleatorio = mt_rand(0,$lng_cadena-1);
				$passw .= substr($cadena,$aleatorio,1);
				$contrasena = "UPDATE usuarios SET usuario_pass = '$passw' WHERE email = '$email'";
				$actualiza = @pg_query($conexion,$contrasena);
				$smtp=new PHPMailer();
				# Indicamos que vamos a utilizar un servidor SMTP
				$smtp->IsSMTP();
 
				# Definimos el formato del correo con UTF-8
				$smtp->CharSet="UTF-8";
 
				# autenticación contra nuestro servidor smtp
				$smtp->SMTPAuth   = true;						// enable SMTP authentication
				$smtp->Username   = "alecuello84@hotmail.com";	// MAIL username
				$smtp->Password   = "1234";			// MAIL password
 
				# datos de quien realiza el envio
				$smtp->From       = "alecuello84@hotmail.com"; // from mail
				$smtp->FromName   = "Alejandro"; // from mail name				
 
				$smtp->IsSMTP();
				# Definimos el formato del correo con UTF-8 
				$smtp->CharSet="UTF-8";
				//$smtp->SMTPDebug = 1;
				# autenticación contra nuestro servidor smtp
				$smtp->SMTPAuth = true; // enable SMTP authentication
				$smtp->SMTPSecure = "tls";
				$smtp->Host = "smtp.live.com"; // sets MAIL as the SMTP server
				$smtp->Username = $de; // MAIL username
				$smtp->Port = 587;
			    $mensaje = "Esta es su Contraseña";
 
			    $smtp->MsgHTML($mensaje);
 
				$smtp->AddAddress($email);
 
				$smtp->AltBody = $passw;
				$smtp->WordWrap = 50;
				//$smtp->Timeout=50;
				$smtp->IsHTML(true);
 
			   if ($smtp->Send())
				  {
					$respuesta ="El mensaje ha sido enviado";
				  }
			}
   }
   else
   {
   	 echo' <script language="javascript">alert("Atencion, su correo no existe");</script> ';
     echo "<script>location.href='passw.php'</script>";
 
   }
 
 
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

no envia el mensaje

Publicado por xve (5515 intervenciones) el 05/01/2016 15:43:31
Hola Aldo, pero muestra el mensaje de que se ha enviado???

Prueba a poner esto:
1
2
3
4
5
6
if ($smtp->Send())
{
	$respuesta ="El mensaje ha sido enviado";
}else{
	$respuesta="Error: ".$smpt->ErrorInfo;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

no envia el mensaje

Publicado por aldo (824 intervenciones) el 05/01/2016 15:53:48
Hola Xve, acabo de probarlo pero ni siquiera pasa por esta linea de codigo, no imprime nada. Esto es una locura.

Envío nuevamente el código. El For está bien esta finalizando despues del SEND()

1
2
3
4
5
6
7
8
9
if ($smtp->Send())
				  {
					$respuesta ="El mensaje ha sido enviado";
				  }
    		   else{
 
					$respuesta="Error: ".$smpt->ErrorInfo;
				}
	     }


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
if(@pg_num_rows($res)>0)
  {
     $cadena = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  	 $passw ='';
	 $lng_cadena = strlen($cadena);
	 $longitud = 8;
 
	 	for($x=1;$x<=$longitud;$x++)
		{
				$aleatorio = mt_rand(0,$lng_cadena-1);
				$passw .= substr($cadena,$aleatorio,1);
				$contrasena = "UPDATE usuarios SET usuario_pass = '$passw' WHERE email = '$email'";
				$actualiza = @pg_query($conexion,$contrasena);
				//mail($email,'Cambio de contraseña',"Estimado usuario hemos cambiado de su contraseña",'$passw');
				$smtp=new PHPMailer();
				# Indicamos que vamos a utilizar un servidor SMTP
				$smtp->IsSMTP();
 
				# Definimos el formato del correo con UTF-8
				$smtp->CharSet="UTF-8";
 
				# autenticación contra nuestro servidor smtp
				$smtp->SMTPAuth   = true;						// enable SMTP authentication
				$smtp->Username   = "alecuello84@hotmail.com";	// MAIL username
				$smtp->Password   = "Wrap*/1808";			// MAIL password
 
				# datos de quien realiza el envio
				$smtp->From       = "alecuello84@hotmail.com"; // from mail
				$smtp->FromName   = "Alejandro"; // from mail name				
 
				$smtp->IsSMTP();
				# Definimos el formato del correo con UTF-8 
				$smtp->CharSet="UTF-8";
				//$smtp->SMTPDebug = 1;
				# autenticación contra nuestro servidor smtp
				$smtp->SMTPAuth = true; // enable SMTP authentication
				$smtp->SMTPSecure = "tls";
				$smtp->Host = "smtp.live.com"; // sets MAIL as the SMTP server
				$smtp->Username = $de; // MAIL username
				$smtp->Port = 587;
			    $mensaje = "Esta es su Contraseña";
 
			    $smtp->MsgHTML($mensaje);
 
				$smtp->AddAddress($email);
 
				$smtp->AltBody = $passw;
				$smtp->WordWrap = 50;
				//$smtp->Timeout=50;
				$smtp->IsHTML(true);
 
			   if ($smtp->Send())
				  {
					$respuesta ="El mensaje ha sido enviado";
				  }
    		   else{
 
					$respuesta="Error: ".$smpt->ErrorInfo;
				}				  
	         }
   }
   else
   {
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

no envia el mensaje

Publicado por xve (5515 intervenciones) el 05/01/2016 18:40:48
Entonces, entiendo que @pg_num_rows($res) devuelve 0!!! has probado ha mostrar ese valor?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

no envia el mensaje

Publicado por aldo (824 intervenciones) el 05/01/2016 19:37:38
Hola Xve, si ya lo he probado; arroja esto:

1
Resource id #5
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

no envia el mensaje

Publicado por xve (5515 intervenciones) el 06/01/2016 09:00:23
Entonces, no se cumple la condición, ya que no es superior a 0, por lo que no envía ningún correo...

Te recomiendo que quites la @ de delante de cada instrucción, ya que eso hace que no se visualicen los errores de las instrucciones que lo llevan.
Puedes quitarlo y probar?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

no envia el mensaje

Publicado por aldo (824 intervenciones) el 06/01/2016 17:13:26
hola Xve, lo probaré ahora mismo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

no envia el mensaje

Publicado por aldo (824 intervenciones) el 06/01/2016 17:53:31
Hola Xve, si ya lo probé y nada no imprime nada, pero cuando envío una cuenta de correo que no existe si arroja el error del último ELSE
Y VUELVE NORMALMENTE AL FORMULARIO.

1
2
3
4
5
6
else
{
   	 echo' <script language="javascript">alert("Atencion, su correo no existe");</script> ';
         echo "<script>location.href='passw.php'</script>";
 
}

este es el formulario:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!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>CONSULTA DE CITAS</title>
 
</head>
<body>
<form action="generarcontrasena.php" method='POST'>
		<label>Email:</label>
		<input type="email" name="email" /><br />
		<input type="submit" value="Recuperar Contraseña" /><br  /><br />
  <?php
  error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
	if(isset($_GET["respuesta"])){
	   echo "<span>".$_GET["respuesta"] ."</span>";
 
	}
 
  ?>
</form>
</body>
</html>

Este es el codigo que genera la contraseña:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
$conexion = pg_connect("host=localhost port=5432 dbname=pediatria user=postgres password=movilnet");
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
require("PHPMailer-master/class.phpmailer.php");
require("PHPMailer-master/class.smtp.php");
 
$email = $_POST['email'];
$e_mail="SELECT email FROM usuarios WHERE email = '$email'";
$res = pg_query($conexion,$e_mail);
if(pg_num_rows($res)>0)
 {
     $cadena = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  	 $passw ='';
	 $lng_cadena = strlen($cadena);
	 $longitud = 8;
 
	 	for($x=1;$x<=$longitud;$x++)
		{
				$aleatorio = mt_rand(0,$lng_cadena-1);
				$passw .= substr($cadena,$aleatorio,1);
 
				$contrasena = "UPDATE usuarios SET usuario_pass = '$passw' WHERE email = '$email'";
				$actualiza = @pg_query($conexion,$contrasena);
 
				$smtp=new PHPMailer();
				# Indicamos que vamos a utilizar un servidor SMTP
				$smtp->IsSMTP();
 
				# Definimos el formato del correo con UTF-8
				$smtp->CharSet="UTF-8";
 
				# autenticación contra nuestro servidor smtp
				$smtp->SMTPAuth   = true;						// enable SMTP authentication
				$smtp->Username   = "alecuello84@hotmail.com";	// MAIL username
				$smtp->Password   = "1234";			// MAIL password
 
				# datos de quien realiza el envio
				$smtp->From       = "alecuello84@hotmail.com"; // from mail
				$smtp->FromName   = "Alejandro"; // from mail name				
 
				$smtp->IsSMTP();
				# Definimos el formato del correo con UTF-8 
				$smtp->CharSet="UTF-8";
				//$smtp->SMTPDebug = 1;
				# autenticación contra nuestro servidor smtp
				$smtp->SMTPAuth = true; // enable SMTP authentication
				$smtp->SMTPSecure = "tls";
				$smtp->Host = "smtp.live.com"; // sets MAIL as the SMTP server
				$smtp->Username = $de; // MAIL username
				$smtp->Port = 587;
			    $mensaje = "Esta es su Contraseña";
 
			    $smtp->MsgHTML($mensaje);
 
				$smtp->AddAddress($email);
 
				$smtp->AltBody = $passw;
				$smtp->WordWrap = 50;
				//$smtp->Timeout=50;
				$smtp->IsHTML(true);
       }
			   if ($smtp->Send())
				  {
    	    		$respuesta ="El mensaje ha sido enviado";
				  }
    		   else
			      {
					$respuesta="Error: ".$smpt->ErrorInfo;
  				  }
}
else
{
   	 echo' <script language="javascript">alert("Atencion, su correo no existe");</script> ';
     echo "<script>location.href='passw.php'</script>";
 
}
 
 
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

no envia el mensaje

Publicado por aldo (824 intervenciones) el 07/01/2016 16:44:09
Que tal Xve, cambié la lógica del codigo y ahora si esta imprimiendo por lo menos el mensaje de cuando no se pudo enviar:

1
2
3
4
5
6
7
8
9
if (!$smtp->Send())
					  {
						$respuesta ="El mensaje no se pudo enviar";
					echo $respuesta .="Error: " .$smtp->ErrorInfo;
					  }
				   else
					  {
						$respuesta ="El mensaje ha sido enviado";
					  }
el asunto es que la cuenta de correo si es correcta y edbiera enviar el mensaje, hay algo que no percibo que estaria mal formulado. A ver si puedes verlo. Gracias.

este es el codigo completo modificado:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
$conexion = pg_connect("host=localhost port=5432 dbname=pediatria user=postgres password=movilnet");
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
require("PHPMailer-master/class.phpmailer.php");
require("PHPMailer-master/class.smtp.php");
 
$email = $_POST['email'];
$e_mail="SELECT email FROM usuarios WHERE email = '$email'";
$res = pg_query($conexion,$e_mail);
if(pg_num_rows($res)>0)
 {
     $cadena = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  	 $passw ='';
	 $lng_cadena = strlen($cadena);
	 $longitud = 8;
 
	 	for($x=1;$x<=$longitud;$x++)
		{
				$aleatorio = mt_rand(0,$lng_cadena-1);
				$passw .= substr($cadena,$aleatorio,1);
		}
				$contrasena = "UPDATE usuarios SET usuario_pass = '$passw' WHERE email = '$email'";
				$actualiza = @pg_query($conexion,$contrasena);
				$smtp=new PHPMailer();
 
				$smtp->IsSMTP();
				# Definimos el formato del correo con UTF-8 
				$smtp->CharSet="UTF-8";
				//$smtp->SMTPDebug = 1;
				# autenticación contra nuestro servidor smtp
				$smtp->SMTPAuth = true; // enable SMTP authentication
				$smtp->SMTPSecure = "tls";
				$smtp->Host = "smtp.live.com"; // sets MAIL as the SMTP server
				$smtp->Username = $de; // MAIL username
				$smtp->Password = "h*12r*-k"; // MAIL password
				$smtp->Port = 587;
				# datos de quien realiza el envio
				//$smtp->From = $de; // from mail
				$smtp->FromName = "Alejandro"; // from mail name
				# Indicamos la dirección donde enviar el mensaje
				$para1= $email;
				//$nameTo=$para1;
				$smtp->AddAddress($para1);
				//$smtp->AddBCC($addcco,$nameTo);
				//$smtp->Subject = $asunto; 
			    $smtp->Body = $passw;
				$smtp->WordWrap = 50;
				$smtp->Timeout=50;
				$smtp->IsHTML(true);
				   if (!$smtp->Send())
					  {
						$respuesta ="El mensaje no se pudo enviar";
					echo $respuesta .="Error: " .$mail->ErrorInfo;
					  }
				   else
					  {
						$respuesta ="El mensaje ha sido enviado";
					  }
}
else
{
   	 echo' <script language="javascript">alert("Atencion, su correo no existe");</script> ';
     echo "<script>location.href='passw.php'</script>";
 
}
 
 
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

no envia el mensaje

Publicado por aldo (824 intervenciones) el 07/01/2016 16:56:39
Hola Xve, ahora arroja este mensaje:
con este en negritas:SMTP connect() failed.

2016-01-07 15:28:17 CLIENT -> SERVER: EHLO localhost 2016-01-07 15:28:17 CLIENT -> SERVER: STARTTLS 2016-01-07 15:28:18 CLIENT -> SERVER: EHLO localhost 2016-01-07 15:28:19 CLIENT -> SERVER: AUTH LOGIN 2016-01-07 15:28:19 CLIENT -> SERVER: 2016-01-07 15:28:19 CLIENT -> SERVER: bloxMz0qLVA= 2016-01-07 15:28:19 SMTP ERROR: Password command failed: 535 5.0.0 Authentication Failed 2016-01-07 15:28:19 CLIENT -> SERVER: QUIT 2016-01-07 15:28:19 SMTP connect() failed. El mensaje no se pudo enviarError:

Estoy encima de esto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

no envia el mensaje

Publicado por xve (5515 intervenciones) el 07/01/2016 22:58:53
Hola Aldo, te esta indicando que te falla la autenticación...

O la contraseña, o el tipo de autenticación...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

no envia el mensaje

Publicado por aldo (824 intervenciones) el 08/01/2016 02:14:03
Que tal Xve, La contraseña esta bien. Pero explicame lo de la autenticacion por favor, no se como acometer esto en realidad. Si es de alguna línea en el codigo donde deba hacer la autenticación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

no envia el mensaje

Publicado por xve (5515 intervenciones) el 08/01/2016 09:03:21
Hola Aldo, tu le estas diciendo, que tu servidor de correo necesita autenticación para enviar, y que se utiliza la seguridad TLS
1
2
$smtp->SMTPAuth = true; // enable SMTP authentication
$smtp->SMTPSecure = "tls";

puede ser que sea otro tipo de seguridad? como por ejemplo ssl
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

no envia el mensaje

Publicado por aldo (824 intervenciones) el 08/01/2016 13:42:31
Hola Xve, bueno es cierto; ahora no queda de parte mía , ya esta listo entonces debiera enviarlo, te comento que tengo otros formularios con identica funcion y si funcionan.

que me sugieres en este caso?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

no envia el mensaje

Publicado por aldo (824 intervenciones) el 09/01/2016 01:31:51
Hola Xve, aclaro que cuando señalé "que ahora no queda de parte mía" no me refería a que estas obligado a resolver este codigo, sino a que el codigo mismo debio efectuar la funcion. Aclaro esto por supuesto.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar