PHP - phpmailer

 
Vista:
sin imagen de perfil
Val: 73
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

phpmailer

Publicado por Orion (45 intervenciones) el 16/10/2017 22:20:42
Buenas noches,

Quiero que cuando a un usuario se le haya olvidado la contraseña se le envie una por correo. Uso el phpmailer.

Despues realizo lo siguiente:

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
function recoverypass($email){
 
  // Strip Email
  $stripemail = strip_tags($email);
 
  // conexion de base de datos
  $conexion = Conexion::singleton_conexion();
 
  $SQL = 'SELECT * FROM '.SSPREFIX.'usuarios WHERE email = :email LIMIT 1';
  $sentence = $conexion -> prepare($SQL);
  $sentence -> bindParam(':email',$stripemail, PDO::PARAM_STR);
  $sentence -> execute();
  $resultados = $sentence -> fetchAll();
  if (empty($resultados)){
 
    return 1;
 
  }else{
 
    // Generamos Password y lo ciframos    
    $passgenerated = generateRandomString();
    $newpass = sha1(SALT.$passgenerated.PEPER);
 
    $NewPassSQL = 'UPDATE '.SSPREFIX.'usuarios SET password = :password WHERE email = :email';
    $stnpass = $conexion -> prepare($NewPassSQL);
    $stnpass -> bindParam(':password', $newpass , PDO::PARAM_STR);
    $stnpass -> bindParam(':email', $stripemail, PDO::PARAM_STR);
    $stnpass -> execute();
 
    $dataexplode = congifurationmailrecover();
    $parsedata = explode("|", $dataexplode);
 
    $htmlhead = '<!DOCTYPE html><html><body>';
    $htmlfooter = '</body></html>';
    $messageone = '<p>'.$parsedata[6].'</p></p><p></p>';
    $activationlink = '<p><label>Tu nueva contraseña es: <strong>'.$passgenerated.'</strong></label></p>';
 
    // Envio de Correo 
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->Host = $parsedata[0]; // especiificar el servidor smtp
    $mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => true, 'verify_peer_name' => false, 'allow_self_signed' => true ) );
    $mail->SMTPSecure = 'tls';
    $mail->Username = $parsedata[3]; // correo desde el que se enviara
    $mail->Password = $parsedata[4]; // password del correo
    $mail->Port = $parsedata[1];     // el puerto por defecto para SMTP es 587 pero puede ser otro
    $mail->setFrom($parsedata[3], $parsedata[2]);  // remitente, el segundo paramtero es el nombre
    $mail->addAddress($stripemail);   // destino
    $mail->isHTML(true);
    $mail->Subject = 'Recuperación de Cuenta';   // Asunto
    $mail->Body = $htmlhead.$messageone.$activationlink.$htmlfooter;
    $mail->send();
 
	echo '<script>window.location.href = "index.php"</script>';
 
  }
}


La funcion congifurationmailrecover():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function congifurationmailrecover(){
   // conexion de base de datos
   $conexion = Conexion::singleton_conexion();
 
   $SQL = 'SELECT * FROM '.SSPREFIX.'socialconfig WHERE id = 1';
   $sentence = $conexion -> prepare($SQL);
   $sentence -> execute();
   $resultados = $sentence -> fetchAll();
   if(empty($resultados)){
   }else{
      foreach ($resultados as $key){
        $data = $key['smtp'].'|'.$key['port'].'|'.$key['fromname'].'|'.$key['mail'].'|'.$key['password'].'|'.$key['url'].'|'.$key['renewmessage'];
        return $data;
      }
   }
}


Y para el envio de correo en base de datos tengo:

- $parsedata[0]: mail.localhost.com
- $parsedata[1]: 587
- $parsedata[2]: Webmaster
- $parsedata[3]: noreply@site.com
- $parsedata[4]: passma
- $parsedata[5]: http://wwww.thesiteurl.com/
- $parsedata[6]: 3


Cuando meto mi correo para recuperar contraseña que es yahoo.es, no funciona ...¿Por que podria ser?

Muchas gracias,

Un saludo.
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 Alejandro

phpmailer

Publicado por Alejandro (55 intervenciones) el 16/10/2017 22:40:03
Que tal Orion,

Existen varios problemas, por los cuales no estas recibiendo el email,

- Puedes tener problema en tu código, sería bueno que revises tu log del email
- Quizás tu dominio se encuentra lista de negra (spam)
- Probaste un test de envió de emial?, me refiero a usar script sencillo de envió?

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
sin imagen de perfil
Val: 73
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

phpmailer

Publicado por Orion (45 intervenciones) el 17/10/2017 16:56:42
¿Podría ser que estos datos fijos estuvieran mal o me funcionaran con otros datos? No veo algo del codigo que pudiera estar mal.


Quizas cambiar el puerto? el host?

- $mail->Host = $parsedata[0]: mail.localhost.com
- $mail->Port = $parsedata[1]: 587
- $parsedata[2]: Webmaster (fromName)
- $mail->Username = $parsedata[3]: noreply@site.com
- $mail->Password = $parsedata[4]: passma
- $messageone = $parsedata[6]: 3 (renewmessage)

No veo algo del codigo que pudiera estar mal, lo unico raro que he visto es:

// Envio de Correo
$mail = new PHPMailer; -- Poner parentesis.

cambiar eso por ----> $mail = new PHPMailer()

Un saludo.

Un saludo.
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 Alejandro

phpmailer

Publicado por Alejandro (55 intervenciones) el 17/10/2017 19:54:05
De partida ningún, servidor de correos va aceptar tus email,
ya que estas usando información que no existe,
debes usar la información de tu hosting, o usar una cuenta como gmail

Configuración con gmail:

1
2
3
4
5
$mail->Host  = 'smtp.gmail.com';
$mail->Port   = 587;
$mail->Username   = "tucuenta@gmail.com";
$mail->Password   = "tucontraseña";
$messageone = $parsedata[6]: 3 (renewmessage)

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