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