Foros del Web » Programando para Internet » PHP »

Email para recuperacion de contraseña no llega

Estas en el tema de Email para recuperacion de contraseña no llega en el foro de PHP en Foros del Web. hola, trato de que un usuario recupere su contraseña. tengo un form que pasa el dato solo de username, depues hago las consultas y no ...
  #1 (permalink)  
Antiguo 02/03/2008, 18:44
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Email para recuperacion de contraseña no llega

hola, trato de que un usuario recupere su contraseña.

tengo un form que pasa el dato solo de username, depues hago las consultas y no me dan error, pero no me manda el email con el passwor, bueno es que no manda ningun email, el codigo que use es:


Código PHP:
verificamos si se han enviado ya las variables necesarias.
if (isset(
$_POST["username"])) {
    
$username $_POST["username"];
    
    
// Hay campos en blanco
    
if($username==NULL) {
        echo 
"un usuario está vacio.";
        
formRegistro();
    
        }else{
            
            
$query mysql_query("SELECT username, password, email FROM usuarios WHERE password='$username'");
            
$password "password";
            
$email "email";
            
mysql_query($query) or die(mysql_error());
            echo 
"clave enviada!<br/>";
            
            
            
                
                
$adireccion=($email);
                 
$asunto ="recuperacion de contraseña de: ".$username."";
                 
$contenidomail"Nombre usuario: ".$username."\n"
                                 
."Contraseña: ".$password."\n";
                                  
                 
$dedireccion"[email protected]";
                
$password=($password);
                 
$contenidomail=($contenidomail);
                    
mail ($adireccion$asunto$contenidomail$dedireccion);
                    
                
        
            
            }    
            }echo 
"Sus datos han sido enviados";
                
        }
    


?> 
  #2 (permalink)  
Antiguo 02/03/2008, 19:56
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Email para recuperacion de contraseña no llega

Tu proveedor de hosting te habilitó el servidor SMTP? Debes disponer de uno para poder enviar correos. Los servidores gratuitos (la mayoría) no ofrecen ese servicio (SPAM acaso?). Contacta con tu proveedor.

Si lo tienes desactivado, puedes usar PHPMailer para enviar mensajes de correo usando un servidor SMTP externo, como una cuenta de correo electrónico (Pss... yahoo.ca )

Saludos,
  #3 (permalink)  
Antiguo 03/03/2008, 02:34
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: Email para recuperacion de contraseña no llega

no okram tengo el servivio de smtp configurado y en servicio, tengo otro form de consulta de informacion que va muy bien,
es este codigo que puse que no me manda nada

gracias
  #4 (permalink)  
Antiguo 03/03/2008, 05:41
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: Email para recuperacion de contraseña no llega

He taratado de cambiar mi codigo con nlo que he visto en el foro pero no mando los emails, ya no es que lleguen vacion, sino que no llegan

os dejo el codigo, a ver si alguien ve algo,

Código PHP:
<?php

//datos para establecer la conexion con la base de mysql.
$conexionmysql_connect('localhost','user','9999')or die ('Ha fallado la conexión: '.mysql_error());
mysql_select_db('registro')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
                     
                         
                        
// verificamos si se han enviado ya las variables necesarias.
if (isset($_POST['username'])) {
    
$username $_POST['username'];
    

    
// Hay campos en blanco
    
if($username==NULL) {
        echo 
"un campo está vacio.";
        
formRegistro();


}else{
                
//realizamos una consulta a la bd
    
$query mysql_query("SELECT * FROM usuarios WHERE usuario='$username'"$conexion );
                
            
mysql_query($query) or die(mysql_error());
            
            
$array mysql_fetch_array($query);
            
$arrayemail $array["email"];
            
$arraypassword $array["password"];      
            
//$arrayusername = $array["username"];     
            
if ($_POST["username"]=="$arraypassword"){


        
            
            }else{    
                
$adireccion"[email protected]";
                 
$asunto ="recuperacion de contraseña: ".$username."";
                 
$contenidomail"Nombre Usuario: ".$username."\n"
                                 
."Contrseña: ".$arraypassword."\n";
                                  
                 
$dedireccion"[email protected]";
                
$comentario=($comentario);
                 
$contenidomail=($contenidomail);
                    
mail ($adireccion$asunto$contenidomail$dedireccion);}
                echo 
"La contraseña de'".username."' ha sido enviada de manera satisfactoria.<br />";    
                }
                }
                
                
                
?><form action="<?php echo $_SERVER['PHP_SELF'?>" method="post">
          <table width="80%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td></td>
            </tr>
          </table>
          <table width="59%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td height="81" colspan="2"><div align="center"><span class="Estilo18"></span></div></td>
              </tr>
            <tr>
              <td height="81" colspan="2"><div align="center" class="Estilo17">recuperar contraseña</div></td>
              </tr>
            <tr>
              <td width="43%" height="31" bgcolor="#CCCCCC">Usuario (max 20):</td>
              <td width="49%" bgcolor="#CCCCCC"><input type="text" name="username" size="20" maxlength="20" /></td>
              </tr>
            <tr>
              <td height="29" bgcolor="#CCCCCC">&nbsp;</td>
              <td bgcolor="#CCCCCC">&nbsp;</td>
            </tr>
            <tr>
              <td height="29" bgcolor="#CCCCCC">&nbsp;</td>
              <td bgcolor="#CCCCCC">&nbsp;</td>
            </tr>
            <tr>
              <td height="29" bgcolor="#CCCCCC">&nbsp;</td>
              <td bgcolor="#CCCCCC">&nbsp;</td>
            </tr>
            <tr>
              <td height="40" colspan="2"><div align="center">
                <input type="submit" value="recuperar" />
              </div></td>
              </tr>
          </table>
          <a href="recuperar.php" class="Estilo18">Recuperar contrase&ntilde;a</a>
          </form>

Gracias.
  #5 (permalink)  
Antiguo 03/03/2008, 08:56
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: Email para recuperacion de contraseña no llega

Ya he conseguido que mediante un form un usuario pueda recuperar su contraseña enviandosela por e-mail

lo unico es que el codigo php lo tengo integrado en una tabla Html
y cada vez que se entra en la pagina para recuperar la contraseña el script se ejecuta solo y manda un primer email vacio,

despues si introduces el user en el campo del form me vuelve a llegar el email y esta vez con la informacion de la contraseña bien,

es solo eso que nada mas entrar en la pagina se carga el script solo y manda el email vacio, he provado a ponerle varios if pero no me funcionan,
les dejo aqui el codigo por si sabrian por que se ejecuta solo sin apretar el boton submit del form.


Código PHP:




<form action="recuperar.php" method="post" name="formrec" id="formrec">
          <table width="80%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td></td>
            </tr>
          </table>
          <table width="59%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td height="81" colspan="2"><div align="center"><span class="Estilo18"></span></div></td>
              </tr>
            <tr>
              <td height="81" colspan="2"><div align="center" class="Estilo17">recuperar contraseña</div></td>
              </tr>
            <tr>
              <td width="43%" height="31" bgcolor="#CCCCCC">Usuario (max 20):</td>
              <td width="49%" bgcolor="#CCCCCC"><input type="text" name="username" size="20" maxlength="20" /></td>
              </tr>
            <tr>
              <td height="29" bgcolor="#CCCCCC">&nbsp;</td>
              <td bgcolor="#CCCCCC">&nbsp;</td>
            </tr>
            <tr>
              <td height="29" bgcolor="#CCCCCC">&nbsp;</td>
              <td bgcolor="#CCCCCC">&nbsp;</td>
            </tr>
            <tr>
              <td height="29" bgcolor="#CCCCCC">&nbsp;</td>
              <td bgcolor="#CCCCCC">&nbsp;</td>
            </tr>
            <tr>
              <td height="40" colspan="2"><div align="center">
                <input type="submit" value="recuperar" />
              </div></td>
              </tr>
          </table>
          </form>            
<?php 

$conexion 
mysql_connect('localhost','user','9999')or die ('Ha fallado la conexión: '.mysql_error());
        
mysql_select_db('registro')or die ('Error al seleccionar la Base de Datos: '.mysql_error());





         
         
$query   "SELECT * FROM usuarios WHERE usuario='$username'";
         
$result mysql_query($query $conexion) or die ( mysql_error() );
         
$row   mysql_fetch_array($result);
    
          
     
          
// Datos del email

$nombre_origen    "Tuboolar Web";
$email_origen     "[email protected]";
$email_copia      "[email protected]";
$email_ocultos    "[email protected]";
//$email_destino    = "".$row['email'].""; 
$email_destino    "[email protected]";


$asunto           "".$row['usuario']." recuperar clave";

$mensaje          '<table width="629" border="0" cellspacing="1" cellpadding="2">
  <tr>
    <td width="623" align="left"></td>
  </tr>
  <tr>
    <td bgcolor="#2EA354"><div style="color:#FFFFFF; font-size:14; font-family: Arial, Helvetica, sans-serif; text-transform: capitalize; font-weight: bold;"><strong>   '
.$row['usuario'].'  su clave a sido recuperada</strong></div></td>
  </tr>
  <tr>
    <td height="95" align="left" valign="top"><div style=" color:#000000; font-family:Arial, Helvetica, sans-serif; font-size:12px; margin-bottom:3px;"> '
.$row['usuario'].'</strong>, usted ordeno recuperar su clave..<br>
          <strong>Su Clave es : </strong>'
.$row['password'].'<br>
    </div>
    </td>
  </tr>
</table>'
;



$formato          "html";

//*****************************************************************//
$headers  "From: $nombre_origen <$email_origen> \r\n";
$headers .= "Return-Path: <$email_origen> \r\n";
$headers .= "Reply-To: $email_origen \r\n";
$headers .= "Cc: $email_copia \r\n";
$headers .= "Bcc: $email_ocultos \r\n";
$headers .= "X-Sender: $email_origen \r\n";
$headers .= "X-Mailer: [naptel venezuela : emailer] \r\n";
$headers .= "X-Priority: 3 \r\n";
$headers .= "MIME-Version: 1.0 \r\n";
$headers .= "Content-Transfer-Encoding: 7bit \r\n";
$headers .= "Disposition-Notification-To: \"$nombre_origen\" <$email_origen> \r\n";
//*****************************************************************//
 
if($formato == "html")
 { 
$headers .= "Content-Type: text/html; charset=iso-8859-1 \r\n";  }
   else
    { 
$headers .= "Content-Type: text/plain; charset=iso-8859-1 \r\n";  }

if (@
mail($email_destino$asunto$mensaje$headers)) 
    { echo 
"Le hemos enviado un correo electronico con su clave ";  } 
     else 
    {  echo 
"Error "; }

        
    
     
     
     
        
        
?></td>
        </tr>
      </table>
este archivo se llama recuperar.php, se llama a el mismo.


Gracias por la ayuda, no mse que mas hacer.
  #6 (permalink)  
Antiguo 03/03/2008, 09:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Email para recuperacion de contraseña no llega

El problema es que no estas poniendo algun condicional para limitar que no se envie el mail si el usuario no ha presionado, prueba esto:
Código PHP:




<form action="recuperar.php" method="post" name="formrec" id="formrec">
          <table width="80%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td></td>
            </tr>
          </table>
          <table width="59%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td height="81" colspan="2"><div align="center"><span class="Estilo18"></span></div></td>
              </tr>
            <tr>
              <td height="81" colspan="2"><div align="center" class="Estilo17">recuperar contraseña</div></td>
              </tr>
            <tr>
              <td width="43%" height="31" bgcolor="#CCCCCC">Usuario (max 20):</td>
              <td width="49%" bgcolor="#CCCCCC"><input type="text" name="username" size="20" maxlength="20" /></td>
              </tr>
            <tr>
              <td height="29" bgcolor="#CCCCCC">&nbsp;</td>
              <td bgcolor="#CCCCCC">&nbsp;</td>
            </tr>
            <tr>
              <td height="29" bgcolor="#CCCCCC">&nbsp;</td>
              <td bgcolor="#CCCCCC">&nbsp;</td>
            </tr>
            <tr>
              <td height="29" bgcolor="#CCCCCC">&nbsp;</td>
              <td bgcolor="#CCCCCC">&nbsp;</td>
            </tr>
            <tr>
              <td height="40" colspan="2"><div align="center">
                <input type="submit" name="submit" value="recuperar" />
              </div></td>
              </tr>
          </table>
          </form>            
<?php 
if( !empty( $_POST['submit'] ) ) {
$conexion mysql_connect('localhost','user','9999')or die ('Ha fallado la conexión: '.mysql_error());
        
mysql_select_db('registro')or die ('Error al seleccionar la Base de Datos: '.mysql_error());





         
         
$query   "SELECT * FROM usuarios WHERE usuario='$username'";
         
$result mysql_query($query $conexion) or die ( mysql_error() );
         
$row   mysql_fetch_array($result);
    
          
     
          
// Datos del email

$nombre_origen    "Tuboolar Web";
$email_origen     "[email protected]";
$email_copia      "[email protected]";
$email_ocultos    "[email protected]";
//$email_destino    = "".$row['email'].""; 
$email_destino    "[email protected]";


$asunto           "".$row['usuario']." recuperar clave";

$mensaje          '<table width="629" border="0" cellspacing="1" cellpadding="2">
  <tr>
    <td width="623" align="left"></td>
  </tr>
  <tr>
    <td bgcolor="#2EA354"><div style="color:#FFFFFF; font-size:14; font-family: Arial, Helvetica, sans-serif; text-transform: capitalize; font-weight: bold;"><strong>   '
.$row['usuario'].'  su clave a sido recuperada</strong></div></td>
  </tr>
  <tr>
    <td height="95" align="left" valign="top"><div style=" color:#000000; font-family:Arial, Helvetica, sans-serif; font-size:12px; margin-bottom:3px;"> '
.$row['usuario'].'</strong>, usted ordeno recuperar su clave..<br>
          <strong>Su Clave es : </strong>'
.$row['password'].'<br>
    </div>
    </td>
  </tr>
</table>'
;



$formato          "html";

//*****************************************************************//
$headers  "From: $nombre_origen <$email_origen> \r\n";
$headers .= "Return-Path: <$email_origen> \r\n";
$headers .= "Reply-To: $email_origen \r\n";
$headers .= "Cc: $email_copia \r\n";
$headers .= "Bcc: $email_ocultos \r\n";
$headers .= "X-Sender: $email_origen \r\n";
$headers .= "X-Mailer: [naptel venezuela : emailer] \r\n";
$headers .= "X-Priority: 3 \r\n";
$headers .= "MIME-Version: 1.0 \r\n";
$headers .= "Content-Transfer-Encoding: 7bit \r\n";
$headers .= "Disposition-Notification-To: \"$nombre_origen\" <$email_origen> \r\n";
//*****************************************************************//
 
if($formato == "html")
 { 
$headers .= "Content-Type: text/html; charset=iso-8859-1 \r\n";  }
   else
    { 
$headers .= "Content-Type: text/plain; charset=iso-8859-1 \r\n";  }

if (@
mail($email_destino$asunto$mensaje$headers)) 
    { echo 
"Le hemos enviado un correo electronico con su clave ";  } 
     else 
    {  echo 
"Error "; }

        
    
     
     
     
}        
        
?></td>
        </tr>
      </table>
Saludos.
  #7 (permalink)  
Antiguo 03/03/2008, 09:07
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: Email para recuperacion de contraseña no llega

es que si le pongo ese if, entonces el script no funciona, no manda correo y no busca en la DB
lo mismo me ha pasado con otros scripts

Gracias.
  #8 (permalink)  
Antiguo 03/03/2008, 09:38
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Email para recuperacion de contraseña no llega

Teóricamente ese if debería solucionar tu problema. Prueba usando
Código PHP:
if( strtolower$_SERVER['REQUEST_METHOD'] ) == 'post' ) { 
Saludos,
  #9 (permalink)  
Antiguo 03/03/2008, 10:35
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: Email para recuperacion de contraseña no llega

si le pongo el if este, Okram

if( strtolower( $_SERVER['REQUEST_METHOD'] ) == 'post' ) {

Tampoco rula el script, no de absolutamente ningun error de codigo, mi configuracion smtp va bien, de hecho si quito el if, el codigo rula, oero es eso nada mas entrar en la pagina ejecuta solo el script
  #10 (permalink)  
Antiguo 03/03/2008, 10:49
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: Email para recuperacion de contraseña no llega

ahora rula bien el script con el if que puso Okram, pero sacando la conexion con la DB fuera del if, asi:

Código PHP:
$conexion mysql_connect('localhost','user,'9999')or die ('Ha fallado la conexión'.mysql_error());
        mysql_select_db('
registro')or die ('Error al seleccionar la Base de Datos'.mysql_error());



    
if( strtolower( $_SERVER['
REQUEST_METHOD'] ) == 'post' ) {  





if($username==NULL) {
        echo "un campo está vacio.";    
    }else{

         $query   = "SELECT * FROM usuarios WHERE usuario='
$username";
         $result = mysql_query($query , $conexion) or die ( mysql_error() );
         $row   = mysql_fetch_array($result); 

Gracias por la ayuda.
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:10.