Autor Tema: envío de correos de recuperación de contraseña con php  (Leído 7385 veces)

Jigsaw_MGO

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 113
    • Ver Perfil
Buenas disculpen que postee esto en un tema que no es mio, pero en vista de que nadie me responde y lo necesito de urgencia me veo en la necesidad de hacerlo

Código: [Seleccionar]
<!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" />
<link href="img/ico_fcnm.ico" rel="shortcut icon" type="image/x-icon" />
<link href="css/rc_base.css" rel="stylesheet" type="text/css"/>
<title>..:: cnm.gob.ve ::..</title>
</head>

<body>
<?php

include("lib.php");
$txt_cedula=$_GET['id'];
$opt=$_GET['opt'];
$txt_correo="";
$txt_user="";
$txt_pass="";
$alerta="";
$fecha_hora_actual date('Y-m-d H:i:s');
if(isset(
$_POST['btn_enter'])){
$txt_correo=htmlentities(trim(strip_tags(stripslashes($_POST['txt_correo']))), ENT_NOQUOTES"UTF-8");
if($txt_correo!=""){
if(filter_var($txt_correoFILTER_VALIDATE_EMAIL)==FALSE){
$alerta="ERROR - Debe introducir un correo electrónico valido.";
}else{
$correo=explode("@",$txt_correo);
$op1="hotmail"$op2="outlook"$op3="live"$op4="msn";
$res1=strpos($correo[1],$op1);
$res2=strpos($correo[1],$op2);
$res3=strpos($correo[1],$op3);
$res4=strpos($correo[1],$op4);
if($res1!==FALSE){ $alerta="ERROR - El dominio ".$correo[1]." no está permitido.";
}else if($res2!==FALSE){ $alerta="ERROR - El dominio ".$correo[1]." no está permitido.";
}else if($res3!==FALSE){ $alerta="ERROR - El dominio ".$correo[1]." no está permitido.";
}else if($res4!==FALSE){ $alerta="ERROR - El dominio ".$correo[1]." no está permitido.";
}else{
//$alerta="TODO BIEN";
$stamp=microtime();
$psswd=substr(md5($stamp),1,8);
$pass=md5(sha1($psswd));
//echo "PASS=".$psswd;
$sql_a=mysqli_query($link,"UPDATE sno_usuarios SET passper='".$pass."',
   emailper='"
.$txt_correo."',
   optper='1',
   stamp='"
.$stamp."'
   WHERE cedper='"
.$txt_cedula."'");
$sql_bb=mysqli_query($link,"SELECT userper FROM sno_usuarios WHERE cedper='".$txt_cedula."'");
list($userper)=mysqli_fetch_row($sql_bb);
$asunto ="..:: cnm.gob.ve ::.. Datos de Acceso";
$mensaje="Estimado Sr./Sra.\n\n".
 "Sus datos de acceso para la intranet de la FCNM son los siguientes:\n\n".
 "Usuario: ".$userper."\n".
 "Contraseña: ".$psswd."\n\n".
 "Podrá acceder al portal a traves de la siguiente dirección:\n\n".
 "http://www.cnm.gob.ve/int\n\n";
/*$cabecera="From: cnm.gob.ve <webmaster@cnm.gob.ve>\r\n".
  "Return-Path: cnm.gob.ve <webmaster@cnm.gob.ve>\r\n".
  "Reply-To: ".$txt_correo."\r\n".
  "X-Mailer: PHP/".phpversion();
@mail($txt_correo,$asunto,$mensaje,$cabecera);
print("<script language=\"javascript\">window.location.href=\"index.php?a=1\";</script>");*/

require("../docs/PHPMailer/class.phpmailer.php");
$mail = new PHPMailer();


//Definimos las propiedades y llamamos a los métodos 
  //correspondientes del objeto mail

  //Con PluginDir le indicamos a la clase phpmailer donde se 
  //encuentra la clase smtp que como he comentado al principio de 
  //este ejemplo va a estar en el subdirectorio includes
  $mail->PluginDir "../docs/PHPMailer/";

  //Con la propiedad Mailer le indicamos que vamos a usar un 
  //servidor smtp
  $mail->Mailer "smtp";

  //Asignamos a Host el nombre de nuestro servidor smtp
  $mail->Host "correo.mincultura.gob.ve";

  //Le indicamos que el servidor smtp requiere autenticación
  $mail->SMTPAuth true;

  //Le decimos cual es nuestro nombre de usuario y password
  $mail->Username "actualizacion.rrhh@mincultura.gob.ve"
  $mail->Password "";

  //Indicamos cual es nuestra dirección de correo y el nombre que 
  //queremos que vea el usuario que lee nuestro correo
  $mail->From "webmaster@cnm.gob.ve";
  $mail->FromName "David Matute";

  //el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar 
  //una cuenta gratuita, por tanto lo pongo a 30  
  $mail->Timeout=30;

  //Indicamos cual es la dirección de destino del correo
  $mail->AddAddress("direccion@destino.com");

  //Asignamos asunto y cuerpo del mensaje
  //El cuerpo del mensaje lo ponemos en formato html, haciendo 
  //que se vea en negrita
  $mail->Subject $asunto;
  $mail->Body $mensaje;

  //Definimos AltBody por si el destinatario del correo no admite email con formato html 
  $mail->AltBody "Mensaje de prueba mandado con phpmailer en formato solo texto";

  //se envia el mensaje, si no ha habido problemas 
  //la variable $exito tendra el valor true
  $exito $mail->Send();

  //Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como mucho 
  //para intentar enviar el mensaje, cada intento se hara 5 segundos despues 
  //del anterior, para ello se usa la funcion sleep
  $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";
   } 
}
}
}else{
$alerta="ERROR - Debe introducir un correo electrónico.";
}
}
if(isset(
$_POST['btn_login'])){
$txt_user=htmlentities(trim(strip_tags(stripslashes($_POST['txt_user']))), ENT_NOQUOTES"UTF-8");
$txt_pass=htmlentities(trim(strip_tags(stripslashes($_POST['txt_pass']))), ENT_NOQUOTES"UTF-8");
if($txt_user!=""){
if($txt_pass!=""){
$sql_bc=mysqli_query($link,"SELECT userper,passper,audit_fecha FROM sno_usuarios WHERE cedper='".$txt_cedula."'");
list($userper,$passper,$audit_fecha)=mysqli_fetch_row($sql_bc);
if($txt_user===$userper){
$txt_pass_fixed=md5(sha1($txt_pass));
if($txt_pass_fixed===$passper){
$sql_c=mysqli_query($link,"UPDATE sno_usuarios SET audit_fecha='".$fecha_hora_actual."'
WHERE cedper='"
.$txt_cedula."'");
ob_start();
@session_start();
$_SESSION['usuario'] = $userper;
$_SESSION['estado'] = 'Autenticado';
$_SESSION['cedula'] = $txt_cedula;
$_SESSION['last'] = $audit_fecha;
header("location:main.php");
ob_end_flush();
}else{
$alerta="ERROR - Contraseña incorrecta.";
}
}else{
$alerta="ERROR - Usuario incorrecto.";
}
}else{
$alerta="ERROR - Debe introducir su contraseña.";
}
}else{
$alerta="ERROR - Debe introducir su usuario.";
}
}
if(isset(
$_POST['btn_nopass'])){
print("<script language=\"javascript\">window.location.href=\"index.php?a=1\";</script>");
}
if(
$opt=="USERNO"){?>

<div id="backg_barra01"></div>
<div id="backg_barra02"></div>
<div id="block_full">
<img style="position:absolute; top:32px; left:0px;" src="img/lg_fcnm_.jpg" />
<div id="mid_form" style="height:190px;">
    <br/>Su usuario no ha sido activado.<br/><br/>Por favor introduzca su correo electrónico<br/>para enviarle su información de acceso.<br/>
        <label style="color:#FF0000;"><?php print $alerta?></label><br/>
        <form name="frm_inicio" method="post">
        <input type="text" name="txt_correo" class="text" maxlength="60" style="width:250px;"/>
            <br/><br/>
            <input type="submit" name="btn_enter" class="boton" value="Enviar" style="width:254px;" />
        </form>
        <br/><br/><br/><label style="color:#FF0000;">Por favor abstengase de utilizar<br/>direcciones de correo hotmail.com, outlook.com, live.com o msn.com</label><br/>
    </div>
</div>
</body>
</html>
<?php
}
if(
$opt=="USERSI"){?>

<div id="backg_barra01"></div>
<div id="backg_barra02"></div>
<div id="block_full">
<img style="position:absolute; top:32px; left:0px;" src="img/lg_fcnm_.jpg" />
<div id="mid_form" style="height:200px;">
    <br/>Introduzca sus datos para acceder al sistema.<br/>
        <label style="color:#FF0000;"><?php print $alerta?></label><br/>
        <form name="frm_inicio" method="post">
        Usuario<br/>
            <input type="text" name="txt_user" class="text" maxlength="60" style="width:250px;"/>
            <br/>
            Contraseña<br/>
            <input type="password" name="txt_pass" class="text" maxlength="60" style="width:250px;"/>
            <br/><br/>
            <input type="submit" name="btn_login" class="boton" value="Ingresar" style="width:254px;" />
        </form>
        <br/><br/><br/><label style="color:#0066CC;">¿Olvido su contraseña?<br/><a href="enter.php?id=<?php print $txt_cedula?>&opt=NOPASS">Clic Aquí</a></label><br/>
    </div>
</div>
</body>
</html>
<?php
}
if(
$opt=="NOPASS"){
$sql_np=mysqli_query($link,"SELECT userper,emailper,stamp FROM sno_usuarios WHERE cedper='".$txt_cedula."'");
list($userper,$emailper,$stamp)=mysqli_fetch_array($sql_np);
$email_c=explode("@",$emailper);
$email_l=strlen($email_c[0])-4;
$email_fixed=substr($email_c[0],0,2).str_repeat(".",$email_l).substr($email_c[0],-2,2)."@".$email_c[1];
$psswd=substr(md5($stamp),1,8);
$pass=md5(sha1($psswd));
$asunto="..:: cnm.gob.ve ::.. Datos de Acceso";
$mensaje="Estimado Sr./Sra.\n\n".
 "Sus datos de acceso para la intranet de la FCNM son los siguientes:\n\n".
 "Usuario: ".$userper."\n".
 "Contraseña: ".$psswd."\n\n".
 "Podrá acceder al portal a traves de la siguiente dirección:\n\n".
 "http://www.cnm.gob.ve/int\n\n";
$cabecera="From: cnm.gob.ve <webmaster@cnm.gob.ve>\r\n".
  "Return-Path: cnm.gob.ve <webmaster@cnm.gob.ve>\r\n".
  "Reply-To: ".$txt_correo."\r\n".
  "X-Mailer: PHP/".phpversion();
@mail($emailper,$asunto,$mensaje,$cabecera);
$sql_a=mysqli_query($link,"UPDATE sno_usuarios SET passper='".$pass."'
   WHERE cedper='"
.$txt_cedula."'");
?>

<div id="backg_barra01"></div>
<div id="backg_barra02"></div>
<div id="block_full">
<img style="position:absolute; top:32px; left:0px;" src="img/lg_fcnm_.jpg" />
<div id="mid_form" style="height:150px;">
    <br/>La información de su usuario ha sido enviada<br/>al siguiente correo electrónico:<br/><br/>
<label style="color:#FF0000;"><?php print $email_fixed?></label><br/><br/>
        <form name="frm_inicio" method="post">
            <input type="submit" name="btn_nopass" class="boton" value="Aceptar" style="width:254px;" />
        </form>
    </div>
</div>
</body>
</html>
<?php
}
?>


Como el amigo dueño de este post, yo también necesito enviar correos de recuperación de contraseña, verán les explico el proceso:

Tengo que desarrollar la parte del ingreso al módulo de recibos de pago de mi aplicación, los empleados ya están registrados con su cedula en la base de datos de la empresa entonces el paso 1 es acceder a la intranet:

Paso 1:
https://www.dropbox.com/s/5dqv5nxlai4nwsb/Captura%20de%20pantalla%202015-07-04%2022.09.29.png?dl=0

Nos enviará a la parte del login

Paso 2:
https://www.dropbox.com/s/rem8newviiotae2/Captura%20de%20pantalla%202015-07-04%2022.12.36.png?dl=0

Aquí viene el problema y es que cuando quiero recuperar mi contraseña, me envía a la siguiente página pero nunca llegan los mensajes

Paso 3:
https://www.dropbox.com/s/d35vblcuav0xoz0/Captura%20de%20pantalla%202015-07-04%2022.14.07.png?dl=0

Qué necesitan para poder probar su funcionalidad y que me ayuden? así no puedo avanzar, y de nuevo no me caigan encima por postear en posts de otros
« Última modificación: 15 de Julio 2015, 19:07 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Re:Enviar e-mail desde formulario php con el contenido del formulario
« Respuesta #1 en: 15 de Julio 2015, 19:07 »
Hola Jigsaw_MGO es nuestra obligación como moderadores mantener los foros ordenados y para ello esperamos la colaboración de todos. Por tanto no hay más alternativa que recordar que no se debe escribir en posts de otros (de hecho así puede ser más difícil que una consulta obtenga respuesta ya que puede entenderse que es un tema ya respondido). Voy a dividir la consulta en un nuevo tema. Saludos cordiales.
Responsable de departamento de producción aprenderaprogramar.com

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:envío de correos de recuperación de contraseña con php
« Respuesta #2 en: 15 de Julio 2015, 19:20 »
Hola, si no me equivoco el problema se presenta en este fragmento de código:

if($opt=="NOPASS"){

...

}

Tendrías que ir comprobando paso a paso qué sucede con este código. En primer lugar, cuál es la consulta que se ejecuta

Usa mensajes echo para depurar, por ejemplo:

Código: [Seleccionar]
echo 'Como dato de partida tenemos el txt_cedula cuyo valor es el siguiente'.$txt_cedula;
echo '<br/>';
$sql_np=mysqli_query($link,"SELECT userper,emailper,stamp FROM sno_usuarios WHERE cedper='".$txt_cedula."'");
echo 'La consulta que se va a ejecutar es la siguiente: 'SELECT userper,emailper,stamp FROM sno_usuarios WHERE cedper='.$txt_cedula.';

Comprueba en phpMyAdmin que la consulta se ejecuta correctamente. Si hasta aquí todo es correcto continúa depurando de forma similar...

Saludos
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".