Как я могу отправить электронное письмо с помощью php, а затем добавить шаблон в электронную почту? Я использую это:
$to = "someone@example.com"; $subject = "Test mail"; $message = "Hello! This is a simple email message."; $from = "someonelse@example.com"; $headers = "From: $from"; mail($to,$subject,$message,$headers); echo "Mail Sent.";
И все отлично! Проблема заключается в том, как добавить шаблон.
Почему бы не попробовать что-то простое:
$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;
Ваш файл шаблона выглядит примерно так:
<html> <p>My name is {{ name }} and I am {{ age }} !</p> </html>
У меня есть небольшая трещина в этом 🙂
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. } }
Обратите внимание на функцию SetTemplate()
…
Heres a a small template class
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; } }
Вот небольшой пример, вам все равно нужно сделать ядро сценария, но это обеспечит вам приятный макет, с которого вы начнете.
$emails = array( 'bob@bobsite.com', 'you@yoursite.com' ); $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();
Это действительно все, что нужно, просто нужно знать, как использовать объекты и их довольно простые оттуда, ooh и шаблон выглядел бы примерно так:
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 );
Попробуй это….
$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);
Сначала вы должны создать 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>
Ниже код – это функциональный код почты с вашим шаблоном.
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: noreply@uandblog.com"; mail($to, $subject, $message, $headers); }
.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: noreply@uandblog.com"; mail($to, $subject, $message, $headers); }
Вы также можете скачать полный код с помощью шаблона с сайта http://www.uandblog.com
Ссылка: http://www.uandblog.com/How-to-Send-Mail-with-Email-or-HTMLTemplate-using-php
Вы можете использовать $this
в шаблоне, так как вы находитесь в вызывающем файле.
Вам нужно включить шаблон только после команды ob_start и получить его содержимое:
$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>
Мой простой пример
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; } } ?>
контакт-us.tpl
Name: {{ name }} Email: {{ email }} subject: {{ subject }} ------messages------ {{ messages }} ---------------------
main.php
<?php include_once 'template.php'; $name = "Your name"; $to = "someone@example.com"; $subject = "Test mail"; $message = "Hello! This is a simple email message."; $from = "someonelse@example.com"; $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>"; } ?>
Создайте файл шаблона, например,
/path/to/templates/template.twig:
Уважаемый {{name}},
Благодарим вас за сообщение о {{subject}}.
Затем следуйте инструкциям на странице https://twig.symfony.com/doc/2.x/api.html, чтобы установить и использовать движок шаблонов завивки с помощью Composer
require_once '/path/to/vendor/autoload.php'; $loader = new Twig_Loader_Filesystem('/path/to/templates'); $twig = new Twig_Environment($loader, array());
Затем отрисуйте и отправьте свой адрес электронной почты:
$to = "someone@example.com"; $subject = "Test mail"; $message = $twig->render('template.twig', array( 'name' => 'Fred', 'subject' => 'philately', )); $from = "someonelse@example.com"; $headers = "From: $from"; mail($to,$subject,$message,$headers);