Ricardo_Soares Postado Junho 16, 2023 Denunciar Share Postado Junho 16, 2023 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(); ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frank K Hosaka Postado Junho 17, 2023 Denunciar Share Postado Junho 17, 2023 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ricardo_Soares Postado Junho 17, 2023 Autor Denunciar Share Postado Junho 17, 2023 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; } }; ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frank K Hosaka Postado Junho 17, 2023 Denunciar Share Postado Junho 17, 2023 (editado) 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 Junho 17, 2023 por Frank K Hosaka Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ricardo_Soares Postado Junho 20, 2023 Autor Denunciar Share Postado Junho 20, 2023 valeu meu caro, somo dois, eu estou começando agora, apanhando muito. Obrigado, vou tentar. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Ricardo_Soares
boa noite!
estou com este código montado para envio de email, porém não envia. alguém poderia me judar?
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
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.