Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Enviar mail con php

Estas en el tema de Enviar mail con php en el foro de PHP en Foros del Web. Buenas gente, tengo el siguiente form para restaurar la contraseña en caso de olvido. Tengo una funcion que me regenera la clave y me la ...
  #1 (permalink)  
Antiguo 09/04/2013, 12:24
Avatar de Nico0601  
Fecha de Ingreso: diciembre-2012
Ubicación: Buenos Aires, Zona Sur
Mensajes: 134
Antigüedad: 11 años, 4 meses
Puntos: 0
Enviar mail con php

Buenas gente, tengo el siguiente form para restaurar la contraseña en caso de olvido. Tengo una funcion que me regenera la clave y me la inserta en la DB(hasta aca todo bien), el tema es que no logro enviarla por mail porque el mail se encuentra en otra tabla y nose como relacionarlas. Intente con otra consulta pero nose si estoy haciendo bien.
En una tabla tengo,
usu_id, usu_cuit, usu_clave
Y en la otra tabla tengo
cont_id,cont_nombre.........usu_cuit
Como puedo hacer esto? Les paso el codigo que tengo
Código PHP:
<?php
$titulo
"Recuperar clave";

function 
gen_pass () { 
    
$i=0
    
$password=""
    
// Aqui colocamos el largo del password 
    
$pw_largo 8
    
// Colocamos el rango de caracteres ASCII para la creacion de el password 
    
$desde_ascii 50// "2" 
    
$hasta_ascii 122// "z" 
    // Aqui quitamos caracteres especiales 
    
$no_usar = array (58,59,60,61,62,63,64,73,79,91,92,93,94,95,96,108111); 
    while (
$i $pw_largo) { 
    
mt_srand ((double)microtime() * 1000000); 
    
// limites aleatorios con tabla ASCII 
    
$numero_aleat mt_rand ($desde_ascii$hasta_ascii); 
    if (!
in_array ($numero_aleat$no_usar)) { 
    
$password $password chr($numero_aleat); 
    
$i++; 
    } 

return 
$password

// Y aqui ejecutamos la funcion y la guardamos en $p_generado, luego simplemente la cargamos 
$p_gen gen_pass(); 

   include(
"conexion.php");

   if (isset(
$_POST["usu_cuit"])) {
    
$usu_cuit $_POST["usu_cuit"];  
    
$query "UPDATE usuarios SET usu_clave='".$p_gen."' WHERE usu_cuit='".$usu_cuit."'"
    
mysql_query($query) or die(mysql_error());
   
   
$email "SELECT cont_email FROM contactos WHERE usu_cuit='".$usu_cuit."'";
   
mysql_query($email) or die(mysql_error());
   
   echo 
"Su nuevo pass ha sido enviado!"
   
$asunto =    'Nuevo pass.';  
   
$mensaje =   "Su nuevo pass es: $p_gen";  
   
$cabeceras 'From: nicolas@*******.org.ar' "\r\n" .  
                         
'Reply-To: nicolas@******.org.ar' "\r\n" .  
                         
'X-Mailer: PHP/' phpversion();  
 
   @
mail($email$asunto$mensaje$cabeceras);   
}  
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <title><?php echo ($titulo); ?></title>
        <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type" />
        <script type="text/javascript">
        function ValidarCuit(cuit) 
        {
        var vec = new Array(10);
        var cuit = formulario.usu_cuit.value;
        esCuit=false;
        cuit_rearmado="";
        errors = ''
        for (i=0; i < cuit.length; i++)
        {   
            caracter=cuit.charAt( i);
            if ( caracter.charCodeAt(0) >= 48 && caracter.charCodeAt(0) <= 57 )
            {
                cuit_rearmado +=caracter;
            }
        }
        cuit=cuit_rearmado;
        if ( cuit.length != 11) {  // si no estan todos los digitos
            esCuit=false;
            errors = 'Cuit < 11 ';
            alert( "CUIT Menor a 11 Caracteres" );
        } else {
            x=i=dv=0;
            // Multiplico los dígitos.
            vec[0] = cuit.charAt(  0) * 5;
            vec[1] = cuit.charAt(  1) * 4;
            vec[2] = cuit.charAt(  2) * 3;
            vec[3] = cuit.charAt(  3) * 2;
            vec[4] = cuit.charAt(  4) * 7;
            vec[5] = cuit.charAt(  5) * 6;
            vec[6] = cuit.charAt(  6) * 5;
            vec[7] = cuit.charAt(  7) * 4;
            vec[8] = cuit.charAt(  8) * 3;
            vec[9] = cuit.charAt(  9) * 2;
                        
            // Suma cada uno de los resultado.
            for( i = 0;i<=9; i++) 
            {
                x += vec[i];
            }
            dv = (11 - (x % 11)) % 11;
            if ( dv == cuit.charAt( 10) )
            {
                esCuit=true;
            }
        }
        if ( !esCuit ) 
        {
            alert( "Verifique la CUIT ingresada" );
            document.formulario.usu_cuit.focus();
            errors = 'Verifique la CUIT ingresada';
            return false;
        }else{
            return true;
        }
        document.MM_returnValue1 = (errors == '');
        }
    </script>
    </head>
    <body>
        <h1><?php echo ($titulo); ?></h1>
        <!-- Inicio del desarrollo -->
        <br />
        <form method="post" action="<?=$_SERVER['PHP_SELF']?>" name="formulario">
        <div><label><strong>CUIT </strong></label>
             <td><input type="text" id="usu_cuit" name="usu_cuit" maxlength="11" /></td>
        </div>
        <input type="submit" id="guardar" value="Restaurar" onclick="return ValidarCuit()" />
        
        </form>
        
    </body>
</html>
__________________
Nico...
  #2 (permalink)  
Antiguo 09/04/2013, 12:38
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Enviar mail con php

Quizá te sirva: http://www.phpya.com.ar/temarios/descripcion.php?cod=45
  #3 (permalink)  
Antiguo 09/04/2013, 12:47
Avatar de Nico0601  
Fecha de Ingreso: diciembre-2012
Ubicación: Buenos Aires, Zona Sur
Mensajes: 134
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Enviar mail con php

Mmmm.....no es eso....yo necesito relacionar dos tablas, una para actualizar la clave(que ya lo hace con la $query) y buscar el mail en otra tabla.
__________________
Nico...
  #4 (permalink)  
Antiguo 10/04/2013, 10:03
Avatar de Nico0601  
Fecha de Ingreso: diciembre-2012
Ubicación: Buenos Aires, Zona Sur
Mensajes: 134
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Enviar mail con php

Alguna sugerencia?? Nadie sabe porque no me envia el mail con la nueva clave???
__________________
Nico...
  #5 (permalink)  
Antiguo 10/04/2013, 12:38
Avatar de Nico0601  
Fecha de Ingreso: diciembre-2012
Ubicación: Buenos Aires, Zona Sur
Mensajes: 134
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Enviar mail con php

Bueno, logre hacer el JOIN de las dos tablas asi busco el mail de acuerdo a la CUIT ingresada y creo la variable $email para almacenar el correo de esa cuit asi le envio la nueva clave. Pero sigue sin funcionar, este es el codigo modificado.
Alguien que me de una mano?

Código PHP:
<?php
if (isset($_POST["usu_cuit"])) {
    
$usu_cuit $_POST["usu_cuit"];  
    
$query "UPDATE usuarios SET usu_clave='".$p_gen."' WHERE usu_cuit='".$usu_cuit."'"
    
mysql_query($query) or die(mysql_error());
   
//Con este JOIN traigo el mail de la cuit ingresada
   
$email "SELECT contactos.cont_email
                FROM usuarios
                    INNER JOIN contactos ON usuarios.usu_cuit = '"
.$usu_cuit."'";
   
mysql_query($email);
   
   echo 
"Su nueva clave ha sido enviada.";
   
?>
   <meta http-equiv="refresh" content="2;url=form-login.php" /> 
   <?php
   $asunto 
=    'Nueva clave.';  
   
$mensaje =   "Su nueva clave es: $p_gen";  
   
$cabeceras 'From: nicolas@****.org.ar' "\r\n" .  
                         
'Reply-To: nicolas@****.org.ar' "\r\n" .  
                         
'X-Mailer: PHP/' phpversion();  
 
   @
mail($email$asunto$mensaje$cabeceras);   
}
__________________
Nico...
  #6 (permalink)  
Antiguo 10/04/2013, 15:29
 
Fecha de Ingreso: abril-2010
Ubicación: Saltillo Mexico
Mensajes: 83
Antigüedad: 14 años
Puntos: 4
Respuesta: Enviar mail con php

Según yo, estas enviando el correo a una cadena...

Código PHP:
Ver original
  1. $email = "SELECT cont_email FROM contactos WHERE usu_cuit='".$usu_cuit."'";
  2.  mysql_query($email) or die(mysql_error());

$email es string con la consulta. y nunca se lo asignas al mysql_query
Desconozco si se asigne por default, pero yo prefiero siempre volver a asignarlo.

hazlo así a ver si te funciona:

Código PHP:
Ver original
  1. $email = "SELECT cont_email FROM contactos WHERE usu_cuit='".$usu_cuit."'";
  2. $mail =  mysql_query($email) or die(mysql_error());
  3. $email = mysqli_fetch_row($mail);

Cuentame que pasa. Saludos.
  #7 (permalink)  
Antiguo 11/04/2013, 07:36
Avatar de Nico0601  
Fecha de Ingreso: diciembre-2012
Ubicación: Buenos Aires, Zona Sur
Mensajes: 134
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Enviar mail con php

Hola, gracias por la respuesta.
Pude hacerlo andar de esta manera.

Código PHP:
$email "SELECT DISTINCT cont_email
                FROM contactos
                    INNER JOIN usuarios ON contactos.usu_cuit = '"
.$usu_cuit."'";
   
$rs mysql_query($email) or die(mysql_error());
   
$mail mysql_fetch_array($rs);

// Y asi me manda el mail, le tuve que poner el nombre de la columna en el destinatario
mail($mail['cont_email'], $asunto$mensaje$cabeceras); 
Como vos me decis me tira este error.
Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, resource given in /home/u133075534/public_html/*****/restaurar-clave.php on line 39

Porque es mysqli_fetch_row??
__________________
Nico...
  #8 (permalink)  
Antiguo 11/04/2013, 14:15
 
Fecha de Ingreso: abril-2010
Ubicación: Saltillo Mexico
Mensajes: 83
Antigüedad: 14 años
Puntos: 4
Respuesta: Enviar mail con php

Cita:
Iniciado por Nico0601 Ver Mensaje
Hola, gracias por la respuesta.
Pude hacerlo andar de esta manera.

Código PHP:
$email "SELECT DISTINCT cont_email
                FROM contactos
                    INNER JOIN usuarios ON contactos.usu_cuit = '"
.$usu_cuit."'";
   
$rs mysql_query($email) or die(mysql_error());
   
$mail mysql_fetch_array($rs);

// Y asi me manda el mail, le tuve que poner el nombre de la columna en el destinatario
mail($mail['cont_email'], $asunto$mensaje$cabeceras); 
Como vos me decis me tira este error.
Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, resource given in /home/u133075534/public_html/*****/restaurar-clave.php on line 39

Porque es mysqli_fetch_row??
jaja... lo siento.... fue un error por la costumbre... lo que pasa es que yo uso mysqli ... y tu usas mysql ... solo quitale la "i".

De todos modos viene siendo lo mismo que tu solución, solo que en lugar de ser asociativo, el fetch_row() es numérico el array.

ej. mail($mail[0], $asunto, $mensaje, $cabeceras);

Como consejo. No estaría mal que te empezaras a cambiar a mysqli.

http://www.forosdelweb.com/f18/anunc...ecada-1008145/

Saludos
  #9 (permalink)  
Antiguo 11/04/2013, 14:19
Avatar de Nico0601  
Fecha de Ingreso: diciembre-2012
Ubicación: Buenos Aires, Zona Sur
Mensajes: 134
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Enviar mail con php

Gracias por la ayuda y los consejos!!
Tema solucionado.

Muchas gracias
__________________
Nico...

Etiquetas: formulario, html, mail, mysql, select, sql, tabla, usuarios
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:44.