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:
La funcion congifurationmailrecover():
Y para el envio de correo en base de datos tengo:
- $parsedata[0]: mail.localhost.com
- $parsedata[1]: 587
- $parsedata[2]: Webmaster
- $parsedata[3]: [email protected]
- $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.
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]: [email protected]
- $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
0