it-swarm.com.de

Senden Sie eine E-Mail mit einer Vorlage mit PHP

Wie kann ich eine E-Mail mit PHP senden und dann ein Vorlagen-Design in die E-Mail einfügen? Ich benutze das:

$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.";  

Und es funktioniert gut! Das Problem ist nur, wie man eine Vorlage hinzufügt.

31
anonymous123

Warum probieren Sie nicht etwas so einfaches:

$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;

Ihre Vorlagendatei ist etwa so:

<html>

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

</html>
75
Jivan

Lass uns einen kleinen Riss dabei haben :)

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.
    }
}

Beachten Sie die Funktion SetTemplate() ...

Hier ist eine kleine Vorlagenklasse

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;
    }
}

Hier ist ein kleines Beispiel. Sie müssen den Kern des Skripts noch ausführen, aber Sie erhalten damit ein schönes Layout, mit dem Sie beginnen können.

$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();

Das ist wirklich alles, was es zu bieten hat, man muss nur wissen, wie man Objekte benutzt und es ist ziemlich einfach von dort, ooh und die Vorlage würde ein bisschen so aussehen:

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.
44
RobertPitt
        $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 );
3
falko

Mein einfaches Beispiel

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;
  }
}
?>

contact-us.tpl

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

main.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>"; 
}
?>
1

Zuerst müssen Sie eine HTML-Vorlage erstellen. 

<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>

Der folgende Code enthält den Funktionscode für E-Mails mit Ihrer Vorlage.

    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); 
    }

Sie können den vollständigen Code mit Vorlage auch von www.uandblog.com herunterladen

Der Link lautet http://www.uandblog.com/Sohe-nach-Sende-Mail-mit-Email-oder-HTMLTemplate-using-php

0

Erstellen Sie Ihre Vorlagendatei, z.

/path/to/templates/template.twig:

Lieber {{Name}},

Vielen Dank, dass Sie uns über {{subject}} geschrieben haben.

Befolgen Sie dann die Anweisungen unter https://twig.symfony.com/doc/2.x/api.html , um die Twig Templating Engine mit Composer zu installieren und zu verwenden.

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

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

Dann rendern und senden Sie Ihre E-Mail:

$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);  
0
bdsl

Sie können $this in der Vorlage wie in der aufrufenden Datei verwenden.

Sie müssen die Vorlage nur nach dem Befehl ob_start einfügen und deren Inhalt abrufen:

$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
T30

Versuche dies.... 

$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
edCoder