Ir para conteúdo
Fórum Script Brasil
  • 0

envio de email


Ricardo_Soares

Pergunta

boa noite!

estou com este código montado para envio de email, porém não envia. alguém poderia me judar?

<?php
    require("conexao.php");
    require("./PHPMailer/PHPMailer.php");
    require("./PHPMailer/SMTP.php");


 
    Class SendMail{
        private $mail = null;
 
        public function settingsMail() {
            $this->mail = new PHPMailer\PHPMailer\PHPMailer();
            $this->mail->isSMTP();
 
            $this->mail->Port = "465";
            $this->mail->Host = "smtp.gmail.com";
            $this->mail->IsHTML(true);
            $this->mail->SMTPSecure = "ssl";
            $this->mail->Mailer = "smtp";
            $this->mail->CharSet = "UTF-8";
 
            $this->mail->SMTPAuth = true;
            $this->mail->Username = "Seuemail@gmail.com";
            $this->mail->Password = "Suasenha";
            $this->mail->SingleTo = true;
 
            $this->mail->From = "Seuemail@gmail.com";
            $this->mail->FromName = "Equipe Sistema de Acesso";
        }
 
        public function sendMailCadastro($nome, $email, $token){
            $file = file_get_contents("templates/cadastro.html");
            $file = str_replace("[NOME_USUARIO]", $nome, $file);
            $file = str_replace("[TOKEN]", $token, $file);
 
            $this->mail->addAddress($email);
            $this->mail->Subject = "Confirmação do endereço de email";
            $this->mail->Body = $file;
 
            if(!$this->mail->send()){
                return false;
            }
 
            return true;
        }
 
        public function sendMailEsqueci($nome, $email, $token){
            $file = file_get_contents("templates/esqueci.html");
            $file = str_replace("[NOME_USUARIO]", $nome, $file);
            $file = str_replace("[TOKEN]", $token, $file);
 
            $this->mail->addAddress($email);
            $this->mail->Subject = "Mudança de senha";
            $this->mail->Body = $file;
 
            if(!$this->mail->send()){
                return false;
            }
 
            return true;
        }
    };
 
    Class Acesso extends SendMail{
        private $con  = null;
 
        public function __construct($conexao){
            $this->con = $conexao;
            $this->settingsMail();
        }
 
        public function send(){
            if(empty($_POST) || $this->con == null){
                echo json_encode(array("erro" => 1, "mensagem" => "Ocorreu um erro interno no servidor."));
                return;
            }
 
            switch(true){
                case (isset($_POST["type"]) && $_POST["type"] == "login" && isset($_POST["email"]) && isset($_POST["senha"])):
                    echo $this->login($_POST["email"], $_POST["senha"]);
                    break;
 
                case (isset($_POST["type"]) && $_POST["type"] == "cadastro" && isset($_POST["email"]) && isset($_POST["senha"]) && isset($_POST["nome"])):
                    echo $this->cadastro($_POST["email"], $_POST["senha"], $_POST["nome"]);
                    break;
 
                case (isset($_POST["type"]) && $_POST["type"] == "esqueci" && isset($_POST["email"])):
                    echo $this->esqueciSenha($_POST["email"]);
                    break;
            }
        }
 
        public function esqueciSenha($email){
            $conexao = $this->con;
 
            $query = $conexao->prepare("SELECT email, nome, token FROM usuarios WHERE email = ?");
            $query->execute(array($email));
 
            if($query->rowCount()){
                $user = $query->fetchAll(PDO::FETCH_ASSOC)[0];
 
                if($this->sendMailEsqueci($user["nome"], $user["email"], $user["token"])){
                    return json_encode(array("erro" => 2, "mensagem" => "Olá {$user['nome']}, por favor verifique seu email"));
                }
            }else{
                return json_encode(array("erro" => 1, "mensagem" => "Email não encontrado"));
            }
        }
 
        public function login($email, $senha){
            $conexao = $this->con;
 
            $query = $conexao->prepare("SELECT * FROM usuarios WHERE email = ?");
            $query->execute(array($email));
 
            if($query->rowCount()){
                $user = $query->fetchAll(PDO::FETCH_ASSOC)[0];
 
                if($user["senha"] == $senha && $user["confirmado"]){
                    session_start();
                    $_SESSION["usuario"] = array($user["nome"], $user["adm"]);
                    return json_encode(array("erro" => 0));
                }
               
                if($user["senha"] == $senha && !$user["confirmado"]){
                    return json_encode(array("erro" => 2, "mensagem" => "Olá {$user['nome']}, por favor ative sua conta"));
                }
            }else{
                return json_encode(array("erro" => 1, "mensagem" => "Email e/ou senha incorretos."));
            }
        }
 
        public function cadastro($email, $senha, $nome){
            $conexao = $this->con;
            $geraToken = function() use(&$geraToken, $conexao){
                $length = 16;
                $a = str_split("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
                $b = array();
 
                for($i = 0; $i < $length; $i++){
                    $r = rand(0, (sizeof($a) - 1));
                    $b[$i] = $a[$r];
                }
 
                $token = join("", $b);
               
                $query = $conexao->prepare("SELECT token FROM usuarios WHERE token = ?");
                $query->execute(array($token));
 
                if($query->rowCount() > 0){
                    return $geraToken();
                }else{
                    return $token;
                }
            };
 
            $token = $geraToken();
            $query = $conexao->prepare("INSERT INTO usuarios (email, senha, nome, adm, token, confirmado) VALUES (?, ?, ?, ?, ?, ?)");
           
            if($query->execute(array($email, $senha, $nome, 0, $token, 0))){
                if($this->sendMailCadastro($nome, $email, $token)){
                    return json_encode(array("erro" => 2));
                }
            }else{
                return json_encode(array("erro" => 1, "mensagem" => "Ocorreu um erro ao cadastrar usuario."));
            }
        }
    };
 
    $conexao = new Conexao();
    $classe  = new Acesso($conexao->conectar());
    $classe->send();
?>
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

A listagem é parcial. Eu consegui encontrar o arquivo PHPMailer.php pelo comando composer require phpmailer/phpmailer e pelo Google encontrei o arquivo SMTP.php, e eu presumo que o arquivo conexao.php tenha a classe Conexao, mas eu não tenho a listagem dela. Tem jeito de você colocar uma cópia do código conexao.php para eu continuar estudando?

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Frank<

segue o código da conexão:

 

<?php
    Class Conexao{
        private $server = "127.0.0.1";
        private $usuario = "root";
        private $senha = "";
        private $banco = "videoaula";
 
        public function conectar(){
            try{
                $conexao = new PDO("mysql:host=$this->server;dbname=$this->banco", $this->usuario, $this->senha);
                $conexao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            }catch(PDOException $erro){
                $conexao = null;
            }
 
            return $conexao;
        }
    };  
?>
Link para o comentário
Compartilhar em outros sites

  • 0

O método send( ) da classe Acesso precisa de um requisição type, email e senha; aqui segue uma sugestão:

if(isset($_POST['teste'])){
      $conexao = new Conexao();
      $acesso  = new Acesso($conexao->conectar());
      $acesso->send();}
  echo "<form method=post>
        <input name=type value=login>
        <input name=email value=frankhosaka@gmail.com>
        <input name=senha value=1234>
    	<input type=submit name=teste>
        <form>";

Aqui não estou ensinando a usar o PHPMailer, mas sim como chamar um método de uma classe, no caso, o
$acesso->send( ). Eu também sou novo na área de classe, eu apanho muito para usá-la também.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...