Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

carcleo

Endereçamento de classe dentro de outra classe

Mensagens Recomendadas

carcleo

Tenho o arquivo abaixo que envia e-mails autenticados normalmente:

<?php             

        ini_set("display_errors",true);
        ini_set("display_startup_erros",1);

        error_reporting(E_ALL && E_NOTICE);
    error_reporting( E_ALL | E_STRICT ); // PHP 5.3
    error_reporting( E_ALL ); // Todas as outras versões 
    
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    use PHPMailer\PHPMailer\SMTP;
    
    require_once 'PHPMailer/PHPMailer.php';
    require_once 'PHPMailer/Exception.php';
    require_once 'PHPMailer/SMTP.php';

    require_once '_global/_erros/erros.ini';
    require_once '_controles/_util/Constantes.php';
    
    $constantes = new Constantes();
    
    $caixaPostalServidorNome=$constantes->getTituloSite();
    $caixaPostalServidorEmail= $constantes->getEmailSite();
    $caixaPostalServidorSenha=$constantes->getSenhaEmailSite();

    $email = "carcleo@oi.com.br";    
    $nome = "Carlos";
    $assunto =  "Testando....";    
    $mensagem = "Indo bem";
    
    $mail = new PHPMailer(true);
     //Server settings
    $mail->SMTPDebug = 2;               
    $mail->isSMTP();                    
    $mail->Host = 'smtp.'.$constantes->getDominioSite();
    $mail->SMTPAuth = true;   
    $mail->Username  = $caixaPostalServidorEmail;
    $mail->Password  = $caixaPostalServidorSenha;
    $mail->SMTPSecure = 'TLS';               
    $mail->Port = 587;                                 
    
    //Recipients      
    $mail->From  = $caixaPostalServidorEmail;
    $mail->FromName  = utf8_decode($caixaPostalServidorNome); 
    $mail->Subject  = utf8_decode($assunto);
    $mail->Body  = utf8_decode($mensagem);
    
    
    $mail->AddAddress($email,utf8_decode($nome));
    
    if ($mail->send()) {
        
        $_SESSION["success"] = "Mensagem enviada com sucesso";
        
    } else {
        
        $_SESSION["danger"] = "Erro ao enviar mensagem " . $mail->ErrorInfo;
        
    }
?>

Então, resolvi colocar a parti do $mail em uma classe e chamá-la a partir de um arquivo e ficou assim:
Em tempo: Isso foi necessário pois o código acima foi feito a partir de um exemplo e sem as devidas validações, etc...

<?php                 

        ini_set("display_errors",true);
        ini_set("display_startup_erros",1);
        error_reporting(E_ALL && E_NOTICE);
    error_reporting( E_ALL | E_STRICT ); // PHP 5.3
    error_reporting( E_ALL ); // Todas as outras versões 

    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    use PHPMailer\PHPMailer\SMTP;    
         
    require_once "PHPMailer/PHPMailer.php";        
    require_once "PHPMailer/Exception.php";     
    require_once "PHPMailer/SMTP.php";
     
    require_once "_controles/_conexao/Conexao.php";
        require_once "_controles/_util/Constantes.php";
    require_once "_controles/_util/PhpUtil.php";       
    require_once "_controles/_models/Emails.php";
    require_once "_controles/_daos/EmailsDao.php";
    require_once "_controles/_models/EmailEnviar.php";
    require_once "_controles/_daos/EmailEnviarDao.php";
    
    $connection = new Conexao(); 
    $conexao = $connection->abreConexao();
        $constantes = new Constantes();  
        $phpUtil = new PhpUtil();    

    $_POST["nome"] = "Carlos";
    $_POST["email"] = "carcleo@oi.com.br";
    $_POST["telefone"] = "";
    $_POST["assunto"] = 2;
    $_POST["descricao"] = "Tentei né?";
    
        $assunto = $phpUtil->retornaContatoTipos($_POST["assunto"]);    
    $emailsDao = new EmailsDao($conexao);

    $qual = isset($_POST["qual"]) ? $_POST["qual"] : "";
    
    $_POST["telefone"] = preg_replace( '#[^0-9]#', '', $_POST["telefone"] );
    

    if (
          strlen($_POST["telefone"]) > 0 && 
          strlen($_POST["telefone"]) != 10 && 
          strlen($_POST["telefone"]) != 11) {

        echo "ERRO";

    } else {

        $email = new Emails(
                         date("Y-m-d"), 
                     "n", 
                     $_POST["nome"], 
                     $_POST["email"], 
                     $_POST["telefone"],
                     $_POST["assunto"], 
                     $_POST["descricao"]);
                         
        $email->setQual($qual);


        $emailsDao->cadastrar($email);
        // Apenas para popular o texto abaixo
        $assunto = $_POST["assunto"] == 4 ? $_POST["qual"] : $phpUtil->retornaContatoTipos($_POST["assunto"]);    
        
        $texto  = "<h2>".$constantes->getTituloSite()."</h2><br />";
        $texto .= "<img style='display:block; margin:0 auto;' src='".$constantes->getHttpSite()."/_img/logo.png' />";
        $texto .= "<b>Olá, você nos enviou um e-mail com a seguinte mensagem:</b><br /><br />";
        $texto .= "<b>Nome:</b> ".$_POST["nome"]."<br /><br />";
        $texto .= "<b>Telefone:</b> ".$phpUtil->formataTel($_POST["telefone"])."<br /><br />";
        $texto .= "<b>E-mail:</b> ".$_POST["email"]."<br /><br />";
        $texto .= "<b>Interesse:</b> ".$assunto."<br /><br />";
        $texto .= "<b>Descrição:</b><br />".nl2br($_POST["descricao"])."<br /><br /><br />";
        $texto .= "Estaremos respondendo o mais rápido possível<br /><br />";
            
        $emailEnviar = new EmailEnviar( 
              $_POST["nome"], 
              $_POST["email"],
              $constantes->getTituloSite(), 
              "contato@".$constantes->getDominioSite(), 
              "Re: ".$assunto,
              $texto
        );

        
        $emailEnviarDao = new EmailEnviarDao();
        
        $enviarEmail = $emailEnviarDao->enviaEmail($emailEnviar, $constantes);
        
        echo $enviarEmail["success"] == 1 ? "OK" : "ERRO";

    }
 
?>

Até a linha abaixo tudo vai bem:

$enviarEmail = $emailEnviarDao->enviaEmail($emailEnviar, $constantes);

Mas quando entra na classe que criei para envio:

<?php             
  
  class EmailEnviarDao {
      
    public function __construct() {}
        
    public function enviaEmail($email, $constantes)  {
        
       $caixaPostalServidorNome=$constantes->getTituloSite();
       $caixaPostalServidorEmail= $constantes->getEmailSite();
       $caixaPostalServidorSenha= $constantes->getSenhaEmailSite();
       $host = 'smtp.'.$constantes->getDominioSite();
        
       $enviaFormularioParaNome = $email->getNomeAlvo();
       $enviaFormularioParaEmail = $email->getEmailAlvo();      
       $assunto =  $email->getAssunto();      
       $mensagem = $email->getDescricao();

       $mail = new PHPMailer(true);

       //Server settings
       $mail->SMTPDebug = 2;               
       $mail->isSMTP();                    
       $mail->Host = $host;
       $mail->SMTPAuth = true;   
       $mail->Username  = $caixaPostalServidorEmail;
       $mail->Password  = $caixaPostalServidorSenha;
       $mail->SMTPSecure = 'TLS';               
       $mail->Port = 587;                                 
        
        //Recipients      
       $mail->From  = $caixaPostalServidorEmail;
       $mail->FromName  = utf8_decode($caixaPostalServidorNome); 
       $mail->Subject  = utf8_decode($assunto);
       $mail->Body  = utf8_decode($mensagem);
  
       $mail->AddAddress($enviaFormularioParaEmail,utf8_decode($enviaFormularioParaNome));
  
       if($mail->Send()){
            
            return array("success"=>1,"errors"=>"0K");
      
       } else {
            
            return array("success"=>0,"errors"=>$mail->ErrorInfo);
            
       } 
      
    }    
      
  }

?>


Então recebo um erro  mas não consigo depurar.

Eis o erro:

Citação

Fatal error: Uncaught Error: Class 'PHPMailer' not found in C:\Program Files\Apache24\Apache24\htdocs\funerariasaopedro.net.br\_controles\_daos\EmailEnviarDao.php:19 Stack trace: #0 C:\Program Files\Apache24\Apache24\htdocs\funerariasaopedro.net.br\enviar.php(93): EmailEnviarDao->enviaEmail(Object(EmailEnviar), Object(Constantes)) #1 {main} thrown in C:\Program Files\Apache24\Apache24\htdocs\funerariasaopedro.net.br\_controles\_daos\EmailEnviarDao.php on line 19
Parece erro de endereçamento da classe dentro da outra mas não estou conseguindo fazer dar certo e entender.

Peço ajuda a vocês

 

Pode ser visto em http://funerariasaopedro.net.br/novo/enviar.php

Editado por carcleo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.