Jump to content
Carlos Rocha

Endereçamento de classe dentro de outra classe

Recommended Posts

Carlos Rocha

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

Edited by carcleo

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.