PHP - PHPMailer

 
Vista:
sin imagen de perfil
Val: 70
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

PHPMailer

Publicado por Orion (45 intervenciones) el 17/10/2017 18:30:16
Buenas tardes,

He hecho un formulario que cuando un usuario se le olvida la contraseña pueda recuperarla enviandole un mail a su cuenta de correo con una contraseña nueva. Sin embargo, el mail no se me envia.

¿Alguien ha conseguido enviar correos tanto en local como en un servidor? Os agradeceria mucho vuestra ayuda, no se donde puede estar el error en mi codigo.

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 xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

PHPMailer

Publicado por xve (6935 intervenciones) el 17/10/2017 19:43:52
Hola Orion, al utilizar phpmailer, hay la manera de que te indique el error de porque no se ha enviado... algo así:

1
2
3
if(!$mail->send()) {
    echo 'Error: ' . $mail->ErrorInfo;
}

Haber que mensaje te da...
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 (54 intervenciones) el 17/10/2017 19:59:06
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
sin imagen de perfil
Val: 70
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

PHPMailer

Publicado por Orion (45 intervenciones) el 18/10/2017 19:37:38
Hola Alejandro,

¿Lo que me has comentado sirve tanto para local como para el proyecto subido en el servidor?

Partiendo que la funcion es la 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
58
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();
 
    //header('Location: index.php');
	echo '<script>window.location.href = "index.php"</script>';
 
  }
}

Los parsedata los recojo de la base de datos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$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();


Segun tu informacion, deberia de colocarlo asi en la base de datos para que recoja esa informacion, verdad?:
1
2
3
4
5
6
$parsedata[0]: 'smtp.gmail.com';
$parsedata[1]: 587;
$parsedata[2]: Webmaster;
$parsedata[3]: orion@gmail.com;
$parsedata[4]: "micontraseña"
$messageone = $parsedata[6]: 3 (renewmessage)

Muchas gracias,

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
sin imagen de perfil
Val: 70
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

PHPMailer

Publicado por Orion (45 intervenciones) el 18/10/2017 19:30:00
Hola xve,

Esta es la funcion que tengo:

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
58
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();
 
    //header('Location: index.php');
	echo '<script>window.location.href = "index.php"</script>';
 
  }
}


En que parte de ese codigo meto el if siguiente?

1
2
3
4
5
if(!$mail->send()) {
 
    echo 'Error: ' . $mail->ErrorInfo;
 
}


Muchas gracias por la ayuda
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 xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

PHPMailer

Publicado por xve (6935 intervenciones) el 14/11/2017 07:42:26
Reemplaza el:
1
$mail->send();

por :

1
2
3
if(!$mail->send()) {
    echo 'Error: ' . $mail->ErrorInfo;
}

haber que te devuelve
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