Ir para conteúdo
ndias

PHP Mailer com Template

Recommended Posts

Baixei a class.phpmailer, coloquei em uma pasta phpmailer dentro de public do meu projeto POO-MVC e criei no Models uma classe Mensagem que recebe os parâmetros de envio.

 

Acontece que fiz um template pra separar o HTML do código.

 

Na função PHP Mailer eu consigo definir a Body com um file_get_contents, e recebo o e-mail com o meu template...

 

Até aí tudo bem...o problema que quero colocar conteúdo dinâmico no meu template...então dentro do meu template eu instancio a classe Mensagem que tem um objeto retornando o texto.

 

Porém, quando recebo e-mail com meu template, escreve meu objeto contet(); no lugar do texto...acredito que seja por no PHP Mailer eu ter definido a Body com um file_get_contents.

 

Alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

View.php

class View {

    public static function make($template, array $data = array()) {
        extract($data);
        ob_start();
	// crie uma pasta Views para organizar os templates
        $file = __DIR__ . '/Views/' . $template;
        if (!file_exists($file)) {
            throw new \Exception(sprintf('Arquivo %s não existe', $file));
        }
        require $file;
        return ob_get_clean();
    }

}

 

Controller.php

class Controller {
    
    public function sendMail() {
        $template = View::make('Template.php', array(
            'MODEL' => new MinhaModel(),
        ));

        $mail = new PHPMailer(true);
        ...
        $mail->Body = $template;
        $mail->send();
        ...
    }

}

 

Views/Template.php

<h1>Meu texto: <?php echo $MODEL->getMeuTexto() ?></h1>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
20 horas atrás, Snowden disse:

View.php


class View {

    public static function make($template, array $data = array()) {
        extract($data);
        ob_start();
	// crie uma pasta Views para organizar os templates
        $file = __DIR__ . '/Views/' . $template;
        if (!file_exists($file)) {
            throw new \Exception(sprintf('Arquivo %s não existe', $file));
        }
        require $file;
        return ob_get_clean();
    }

}

 

Controller.php


class Controller {
    
    public function sendMail() {
        $template = View::make('Template.php', array(
            'MODEL' => new MinhaModel(),
        ));

        $mail = new PHPMailer(true);
        ...
        $mail->Body = $template;
        $mail->send();
        ...
    }

}

 

Views/Template.php


<h1>Meu texto: <?php echo $MODEL->getMeuTexto() ?></h1>

 

Obrigado. Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por erick.major
      Oi pessoal,
      Eu desenvolvi um template Volt e pretendo usá-lo como um padrão para os outros. Há um exemplo do meu código abaixo:
      {# LOCKED MODE #} {% if session.get('locked_mode', true) is not empty and session.get('locked_mode', true) is true %}     {{ partial('locked_mode_view') }} {# UNLOCKED MODE #} {% else %} <div class="row">     {{ partial('unlocked_mode_view') }}     {% block content %}         {{ partial('unlocked_mode_content') }}     {% endblock %} </div> {% endif %} Enquanto ele estava compilando, o compilador mostrava esse erro:
      Embedding blocks into other blocks is not supported in... Eu não entendi esse erro. O que posso fazer nesta situação?
    • Por isaque_cb2
      Olá! eu estava aqui fazendo meu site, quando me deparei com o problema de fazer um menu "bonito" baixei este template depois de ver o exemplo na net, mas ele é muito complicado pra mim, não sou profissional (mas sou programador iniciante em c#)
      TEMPLATE
      mas se alguém puder me ajudar a criar uma pagina deste tipo, sem tantos códigos, eu agradeço, pois do jeito que está eu não consigo nem alterar as cores...
      pode ser com tutoriais, dicas, videos, etc...
       
      ~Grato desde já~
    • Por maurohpg
      Boa Tarde Srs. estou com uma duvida que parece ser muito simples mais como nunca usei estou empacado nisso, vejam se podem me ajudar. Eu tenho um formulário com campos dinâmicos que o usuário pode ir adicionando conforme deseja, é uma listagem de compras de um supermercado.
       
      <label>Preencha os campos abaixo com os produtos que deseja comprar:</label> <br /> <table border="0" cellpadding="5" id="listas"> <tr> <th style="color:#000;" align="center">Produto/Descrição</th> <th style="color:#000;" align="center">Marca</th> <th style="color:#000;" align="center">Quantidade</th> </tr> <tr> <td align="center"><input type="text" name="produto[]" id="produto" maxlength="150"></td> <td align="center"><input type="text" name="marca[]" id="marca" maxlength="150"></td> <td align="center"><input type="text" name="quantidade[]" id="quantidade" maxlength="10"></td> </tr> </table> <br /> <input type="button" id="add_field" value="Adicionar"> Quando a pessoa envia o formulário os dados que a pessoa preenche Marca, Produto e Quantidade não vem junto com o form. Fiz de algumas formas para recuperar esse array, mais não estou conseguindo. Vejam como estou fazendo no momento.
       
      <?php if(strpos($_SERVER['HTTP_REFERER'],'super.com.br')) { session_start(); // chamada da classe phpmailer require_once('mailer/class.phpmailer.php'); require_once('mailer/class.smtp.php'); // resgatando os dados passados pelo form $assunto = "Compras Online"; $nome=$_POST["nome"]; $email=$_POST["email"]; $telefone=$_POST["telefone"]; $celular=$_POST["celular"]; $endereco=$_POST["endereco"]; $horario=$_POST["horario"]; $pagamento=$_POST["pagamento"]; $produto=$_POST["produto"]; $marca=$_POST["marca"]; $quantidade=$_POST["quantidade"]; $cartao=$_POST["cartao"]; $cpf=$_POST["cpf"]; $data = date("d/m/y"); //hidden $hora = date("H:i"); //hidden $ip = $_SERVER['REMOTE_ADDR']; //hidden $navegador = $_SERVER['HTTP_USER_AGENT']; //hidden // faço a chamada da classe $Email = new PHPMailer(); $Email->IsSMTP(); // set mailer to use SMTP $Email->SMTPAuth = true; // turn on SMTP authentication $Email->Port = 587; $Email->Host = "smtp"; $Email->Username = "site@"; $Email->Password = "senha"; $Email->IsMail(); // ativa o envio de e-mails em HTML, se false, desativa. $Email->Mailer = "smtp"; $Email->SetLanguage("br"); // esta chamada diz que o envio será feito através da funçao mail do php. Voce mudar para sendmail, qmail, etc // se quiser utilizar o programa de email do seu unix/linux para enviar o email //$Email->IsMail(); // ativa o envio de e-mails em HTML, se false, desativa. $Email->IsHTML(true); // email do remetente da mensagem $Email->From = "site@super.com.br"; // nome do remetente do email $Email->FromName = $nome; // Endereço de destino do emaail, ou seja, pra onde voce quer que a mensagem do formulário vá? $Email->AddAddress("aqui vai o e-mail que recebe","Compras Online"); // informando no email, o assunto da mensagem $Email->Subject = $assunto; // Define o texto da mensagem (aceita HTML) $Email->Body .= " $amount=6; //amount shows the number of data I want to repeat for( $i = 0; $i < $amount; $i++ ) { <html xmlns='http://www.w3.org/1999/xhtml'> <head> <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' /> </head> <body bgcolor='#ffffff'> <table width='100%' border='0' cellspacing='0' cellpadding='5'> <tr> <td height='50' colspan='3' bgcolor='#ffffff'><font face='Arial, Helvetica, sans-serif' size='3' color='#8f211e'><img src='http://www.super.com.br/img/logo-topo.png'></font></td> </tr> <tr> <td colspan='3'>&nbsp;</td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>Nome: $nome</font></td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>E-mail: $email </font></td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>Telefone: $telefone</font></td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>Telefone: $celular</font></td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>Endere&ccedil;o de entrega: $endereco</font></td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>Hor&aacute;rio de entrega: $horario</font></td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>Forma de pagamento: $pagamento</font></td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>Cart&atilde;o Coperclube: $cartao</font></td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>CPF: cpf</font></td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>Data: $data</font></td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>IP: $ip</font></td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>Navegador: $navegador</font></td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>Hora: $hora</font></td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'>&nbsp;</td> </tr> <tr> <td width='43%' bgcolor='#3A6014'><font face='Arial, Helvetica, sans-serif' size='2' color='#FFFFFF'>Produto/Descri&ccedil;&atilde;o</font></td> <td width='28%' bgcolor='#3A6014'><font face='Arial, Helvetica, sans-serif' size='2' color='#FFFFFF'>Marca</font></td> <td width='29%' bgcolor='#3A6014'><font face='Arial, Helvetica, sans-serif' size='2' color='#FFFFFF'>Quantidade</font></td> </tr> <tr> <td bgcolor='#ffffff'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>'.$produto[$i].'</font></td> <td bgcolor='#ffffff'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>'.$marca[$i].'</font></td> <td bgcolor='#ffffff'><font face='Arial, Helvetica, sans-serif' size='2' color='#3A6014'>'.$quantidade[$i].'</font></td> </tr> <tr> <td colspan='3' bgcolor='#FFFFFF'>&nbsp;</td> </tr> <tr> <td colspan='3' bgcolor='#3A6014'><font face='Arial, Helvetica, sans-serif' size='2' color='#FFFFFF'>www.super.com.br</font></td> </tr> </table> </body> </html> } " ; if(!$Email->Send()) { echo "<h2>A mensagem nao foi enviada. </h2><p><br>"; echo "Erro: " . $Email->ErrorInfo; }else{ echo " <META HTTP-EQUIV=REFRESH CONTENT='0; URL=../obrigado.php'> "; } } ?>  
    • Por PeeWee
      Estou há horas com um problema no meu código, tenho a pagina Auth.php onde há algumas function que funcionam normalmente, porém a seguinte apresenta problemas.
      function getMemberNivel($nivel) {
              $db_handle = new DBController();
              $query = "Select * from members where nivel = ?";
              $result = $db_handle->runQuery($query, 's', array($nivel));
              return $result;
          }
       
      Na Index.php faço a chamada dela da seguinte forma:
       
      $teste = $auth->getMemberByUsername($nivel);
       
      Ocorre que preciso utilizar a variavel $teste, só que exibe erro como se a variavel nao existisse. As demais variaveis vindas da pagina funcionam normalmente. 
      Espero que algum dos colegas possa me ajudar. 
    • Por Enlibra
      Boa tarde,
      Estou a desenvolver uma plataforma php mysql crm no dominio "abcd.com" (falso) em que dois clientes diferentes partilham a mesma plataforma nesse dominio.
      Eu queria que numa dada página desse para enviar emails para os clientes dos meus clientes e para isso queria usar os emails com autenticação smtp dos respetivos dominios. Por exemplo: meu cliente 1 (geral@cliente1.com) meu cliente 2 (geral@www.cliente2.com).
      Eu tenho os dados de acesso aos emails (user, password, servidor smtp).
      Dá para fazer isto?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.