2010-09-14 15 views
23

¿Cómo puedo enviar un correo electrónico utilizando php a continuación, añadir una plantilla de diseño en el correo electrónico? Estoy usando esto:Enviar correo electrónico con una plantilla utilizando php

$to = "[email protected]"; 
$subject = "Test mail"; 
$message = "Hello! This is a simple email message."; 
$from = "[email protected]"; 
$headers = "From: $from"; 
mail($to,$subject,$message,$headers); 
echo "Mail Sent."; 

¡Y funciona bien! El problema es cómo agregar una plantilla.

Respuesta

39

Vamos a tener una pequeña grieta en este :)

class Emailer 
{ 
    var $recipients = array(); 
    var $EmailTemplate; 
    var $EmailContents; 

    public function __construct($to = false) 
    { 
     if($to !== false) 
     { 
      if(is_array($to)) 
      { 
       foreach($to as $_to){ $this->recipients[$_to] = $_to; } 
      }else 
      { 
       $this->recipients[$to] = $to; //1 Recip 
      } 
     } 
    } 

    function SetTemplate(EmailTemplate $EmailTemplate) 
    { 
     $this->EmailTemplate = $EmailTemplate;    
    } 

    function send() 
    { 
     $this->EmailTemplate->compile(); 
     //your email send code. 
    } 
} 

Aviso la función SetTemplate() ...

Heres aa pequeña clase de plantilla

class EmailTemplate 
{ 
    var $variables = array(); 
    var $path_to_file= array(); 
    function __construct($path_to_file) 
    { 
     if(!file_exists($path_to_file)) 
     { 
      trigger_error('Template File not found!',E_USER_ERROR); 
      return; 
     } 
     $this->path_to_file = $path_to_file; 
    } 

    public function __set($key,$val) 
    { 
     $this->variables[$key] = $val 
    } 


    public function compile() 
    { 
     ob_start(); 

     extract($this->variables); 
     include $this->path_to_file; 


     $content = ob_get_contents(); 
     ob_end_clean(); 

     return $content; 
    } 
} 

He aquí un pequeño ejemplo, todavía necesita hacer el núcleo del script, pero esto le proporcionará un diseño agradable para comenzar.

$emails = array(
    '[email protected]', 
    '[email protected]' 
); 

$Emailer = new Emailer($emails); 
//More code here 

$Template = new EmailTemplate('path/to/my/email/template'); 
    $Template->Firstname = 'Robert'; 
    $Template->Lastname = 'Pitt'; 
    $Template->LoginUrl= 'http://stackoverflow.com/questions/3706855/send-email-with-a-template-using-php'; 
    //... 

$Emailer->SetTemplate($Template); //Email runs the compile 
$Emailer->send(); 

Eso es realmente todo lo que hay que hacer, solo hay que saber cómo utilizar los objetos y su bastante simple a partir de ahí, ooh y la plantilla se vería algo como esto:

Welcome to my site, 

Dear <?php echo $Firstname ?>, You have been registered on our site. 

Please visit <a href="<?php echo $LoginUrl ?>">This Link</a> to view your upvotes 

Regards. 
+0

Simplemente genial! – Jeff

+0

Buen trabajo. ¿La declaración de extracción en el método de compilación no debe preceder a la instrucción de inclusión? –

+0

No, necesita ser llamado antes de cargarse, esto permite definir las variables de la plantilla y el alcance del contenido de la plantilla. – RobertPitt

55

Por qué no intentar algo tan simple como esto:

$variables = array(); 

$variables['name'] = "Robert"; 
$variables['age'] = "30"; 

$template = file_get_contents("template.html"); 

foreach($variables as $key => $value) 
{ 
    $template = str_replace('{{ '.$key.' }}', $value, $template); 
} 

echo $template; 

el archivo de plantilla de ser algo así como:

<html> 

<p>My name is {{ name }} and I am {{ age }} !</p> 

</html> 
+2

¡Esto es justo lo que estaba buscando! – CMH

+2

Me gusta más tu solución. Muy simple. –

+1

¡Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! Brillante! .... – kta

3
 $message_to_client = file_get_contents("client_email.html"); 
     //$message_to_client = "bla bla {{ EMAIL }} bla bla"; 


     $variables = array(
      'SITE_TITLE' => $SITE_TITLE, 
      'SITE_LOGO' => $SITE_LOGO, 
      'SITE_URL' => $SITE_URL, 
      'CLIENT_NAME' => strip_tags($data->clientname), 
      'PHONE' => strip_tags($data->phone), 
      'EMAIL' => strip_tags($data->email), 
      'CITY' => strip_tags($data->city), 
      'REGION' => strip_tags($data->region), 
      'COMMENT' => htmlentities($data->comment)     
     ); 

     $message_to_client = preg_replace_callback('/{{([a-zA-Z0-9\_\-]*?)}}/i', 
      function($match) use ($variables) { 
       return $variables[$match[1]]; 
     }, $message_to_client); 
0

Prueba esto ....

$body='<table width="90%" border="0"> 
     <tr> 
     <td><b>Name:</b></td> <td>'.$name.'</td> 
     </tr> 
     <tr> 
     <td><b>Email:</b></td> <td>'.$email.'</td> 
     </tr> 
     <tr> 
     <td><b>Message:</b></td> <td>'.$message.'</td> 
     </tr> 
     <tr></table>'; 

    mail($to,$subject,$body,$headers); 
0

En primer lugar hay que hacer una plantilla HTML.

<form action="#" id="ContactForm" method="post" enctype="multipart/form-data"> 
    <table border="0" cellspacing="5" cellpadding="5" style="background-color:#CCCCCC; text-align:center;"> 
     <tr> 
      <td width="15%">Name:</td> 
      <td width="85%"><input name="name" type="text" required></td> 
     </tr> 
      <tr> 
      <td>Email:</td> 
      <td><input name="email" type="email" required></td> 
     </tr> 

     <tr> 
      <td colspan="2"><input name="sub" type="submit" value="Submit"></td> 
     </tr> 

    </table> 

A continuación código es el código funcional electrónico con su plantilla.

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    $name=$_REQUEST['name']; 
    $email=$_REQUEST['email']; 
    $to=$email; //change to ur mail address 
    $subject="UandBlog - Send Email Template Demo"; 
    $message = file_get_contents('Your template path'); // Your Template   
    $headers = 'MIME-Version: 1.0'."\r\n"; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n"; 
    $headers .= "From: [email protected]"; 

    mail($to, $subject, $message, $headers); 
    } 

También puede descargar el código completo con la plantilla de www.uandblog.com

El enlace es http://www.uandblog.com/How-to-Send-Mail-with-Email-or-HTMLTemplate-using-php

0

Usted puede utilizar $this en la plantilla que se encuentre en el archivo llamado.

Sólo es necesario para incluir la plantilla después del comando ob_start y recuperar su contenido:

$this->customer = 1234; //* This variable is used in the template 
ob_start(); 
include 'template.php'; 
$template = ob_get_clean(); 
var_dump($template);  //* Outputs '<b>1234</b>' 

// template.php 
<b><? echo $this->customer ?></b> 
0

Mi ejemplo sencillo

template.php

<?php 
class Template 
{ 
    function get_contents($templateName, $variables) { 
    $template = file_get_contents($templateName); 

    foreach($variables as $key => $value) 
    { 
     $template = str_replace('{{ '.$key.' }}', $value, $template); 
    } 
    return $template; 
    } 
} 
?> 

contacto us.tpl

Name: {{ name }} 
Email: {{ email }} 
subject: {{ subject }} 
------messages------ 
{{ messages }} 
--------------------- 

principal.php

<?php 
include_once 'template.php'; 

$name = "Your name"; 
$to = "[email protected]"; 
$subject = "Test mail"; 
$message = "Hello! This is a simple email message."; 
$from = "[email protected]"; 
$headers = "From: $from"; 

$text = Template::get_contents("contact-us.tpl", array('name' => $name, 'email' => $from, 'subject' => $subject, 'messages' => $message)); 
echo '<pre>'; 
echo $text; 
echo '<pre>'; 

$mail = @mail($to, $subject, $text, $headers); 
if($mail) { 
    echo "<p>Mail Sent.</p>"; 
} 
else { 
    echo "<p>Mail Fault.</p>"; 
} 
?> 
0

Crear el archivo de plantilla, por ejemplo,

/path/to/templates/template.twig:

Estimado {{nombre}},

Gracias por escribiéndonos sobre {{subject}}.

A continuación, siga las instrucciones en https://twig.symfony.com/doc/2.x/api.html de instalar y utilizar el motor de plantillas ramita con Composer

require_once '/path/to/vendor/autoload.php'; 

$loader = new Twig_Loader_Filesystem('/path/to/templates'); 
$twig = new Twig_Environment($loader, array()); 

A continuación, procesar y enviar su correo electrónico:

$to = "[email protected]"; 
$subject = "Test mail"; 
$message = $twig->render('template.twig', array(
    'name' => 'Fred', 
    'subject' => 'philately', 
)); 
$from = "[email protected]"; 
$headers = "From: $from"; 
mail($to,$subject,$message,$headers); 
Cuestiones relacionadas