Redefinição de senha - não consigo enviar o e-mail

PHP

PHPMailer

26/07/2022

Boa noite, amigos. Estou criando um sistema de login, com a funcionalidade de redefinir senha.

Criei o formulário:

<?php
   require_once '../classes/usuarios.php';
?>
<html lang="pt-br">
    <head>
        <meta charset="utf-8">
        <title>SGI - PAINEL DE CONTROLE</title>
         <link type="text/css" rel="stylesheet" media="screen" href="estilos.css" />
         
         <script type="text/javascript" language="javascript">
            function valida_form(){
            if(document.getElementById("email").value == ""){
            alert('Por favor, digite o E-mail do usuário!');
            document.getElementById("email").focus();
            return false
            }
        }
</script>
         
    </head>
        <body>
        <div style="text-align:center"><h2><font color="#ffffff">ESQUECI MINHA SENHA...</h2></font><br><br></div>
                <div id="form">
                    <form method="POST" action="envia-nova-senha.php" onsubmit="return valida_form(this)">
                    <label>Informe seu e-mail:</label><input type="email" id="email" name="email" placeholder="E-mail" maxlength="520"><br>
                                        <input type="submit" name="postar" value="SOLICITAR"><br>
            </form>
            <?php 
            
            ?>
            </div>
        </body>
    </head>
    
    
</html>


o arquivo "envia-nova-senha.php:

<?php
session_start();
//require_once "../config.php";

if(isset($_POST['postar'])){
    if(empty(trim($_POST["email"]))){
    header("location: redefine_password_usu.php");
    }else{
        $email = trim($_POST["email"]);
                $dsn = ("mysql:host=localhost;dbname="meu banco";charset=utf8");
                $user = "meu usuario";
                $pass = "minha senha";
                $pdo = new PDO($dsn,$user,$pass);
                $sql = ("SELECT * FROM usuarios WHERE email='$email'");
                $stm = $pdo->prepare($sql);  
                $stm->execute();  
                $dados = $stm->fetchAll(PDO::FETCH_OBJ);  
                foreach($dados as $reg):  
                    $id = $reg->id . "";
                    $nome = $reg->nome . "";
                    $senha = $reg->senha . "";
                    $mail = $reg->email . "";
                    $chave = sha1($id.$senha);
                    endforeach; 
                    if($chave){
                        header("location: altera_senha.php?$chave");
                        $_SESSION['destinatario'] = $mail;
                        $_SESSION['nome'] = $nome;
                    }else{
                        echo '<script> alert ("E-mail não consta em nosso banco de dados. Por favor, entre em contato com o administrador do sistema."); location.href=("redefine_password_usu.php")</script>';
                        }
               
            }
        }
?>


e o arquivo "altera_senha.php":

<?php
session_start();
$chave = $_SERVER['QUERY_STRING'];
$value = $_SESSION['destinatario'];
$name = $_SESSION['nome'];

if (empty($chave)) {
    echo '<script> alert ("E-mail não consta em nosso banco de dados."); location.href=("redefine_password_usu.php")</script>';
} else {
  $nome = $name;
  $email = $value;
  $link_adress = 'http://meu_dominio/alterar_senha_usu.php?chave='.$chave.'';

    $to      = $value;
    $subject = 'Redefinição de Senha - SGI';
    $message = 'Olá. Esqueceu a sua senha? Tudo bem, acontece! Vamos te ajudar a redefinir. Clique no link '.$link_adress.' e redefina. Ah, uma coisinha importante: Para a sua segurança, este link só é válido por 2 horas. Após este tempo, você vai precisar fazer um novo pedido de redefinição, tudo bem?';
    $headers = array(
    'From' => 'webmaster@meu_dominio',
    'Reply-To' => 'webmaster@meu_dominio',     
    'X-Mailer' => 'PHP/' . phpversion()
);

mail($to, $subject, $message, $headers);
  

}
?>



Só que não envia o e-mail. O que poderia estar errado ou faltando?
Edilson Santiago

Edilson Santiago

Curtidas 0

Melhor post

Alex William

Alex William

29/07/2022

Opa, amigo. Tudo bem?

Tentou dar um dump na sua session na página que envia o e-mail.

Estou desconfiado que seu session_start(), como a session não tem nome, ela inicia uma nova sessão vazia, e por isso não consegue pegar os dados gravados anteriormente.

Para testar mesmo, tente deixar assim:
<?php
    session_name('redefinir_senha');
    session_start();


Em todos os lugares que você precisa dessa sessão especifica, se funcionar era o que eu te disse anteriormente.

Se não, dê um var_dump() para verificar se está trazendo os dados corretos.

Espero ter ajudado. ;)
GOSTEI 1
POSTAR