Как я могу сделать шаблон электронной почты в Zend Framework?
Я хочу сделать шаблоны электронной почты в Zend Framework.
например,
<html>
<body>
Dear {$username$},<br>
This is a invitation email sent by your {$friend$}.<br>
Regards,<br>
Admin
</body>
</html>
Я хочу сделать этот файл, получить его в Zend framework, установить эти параметры (имя пользователя, друг), а затем отправить по электронной почте.
Как я могу это сделать? Поддерживает ли это Zend?
2 ответа:
Привет это очень распространено.
создайте сценарий просмотра, например : / views/emails / template.phtml
<body> <?php echo $this->name; ?> <h1>Welcome</h1> <?php echo $this->mysite; ?> </body>
и при создании электронной почты :
// create view object $html = new Zend_View(); $html->setScriptPath(APPLICATION_PATH . '/modules/default/views/emails/'); // assign valeues $html->assign('name', 'John Doe'); $html->assign('site', 'limespace.de'); // create mail object $mail = new Zend_Mail('utf-8'); // render view $bodyText = $html->render('template.phtml'); // configure base stuff $mail->addTo('john@doe.com'); $mail->setSubject('Welcome to Limespace.de'); $mail->setFrom('support@limespace.de','Limespace'); $mail->setBodyHtml($bodyText); $mail->send();
просто чтобы завершить ответ Арнери здесь (что уже очень актуально), мне нравится иметь в своих проектах класс для обработки отправки электронной почты и разных шаблонов одновременно.
этот класс может быть в вашей библиотеке, например (/library/мой / Mail.php):
class My_Mail { // templates name const SIGNUP_ACTIVATION = "signup-activation"; const JOIN_CLUB_CONFIRMATION = "join-club-confirmation"; protected $_viewSubject; protected $_viewContent; protected $templateVariables = array(); protected $templateName; protected $_mail; protected $recipient; public function __construct() { $this->_mail = new Zend_Mail(); $this->_viewSubject = new Zend_View(); $this->_viewContent = new Zend_View(); } /** * Set variables for use in the templates * * @param string $name The name of the variable to be stored * @param mixed $value The value of the variable */ public function __set($name, $value) { $this->templateVariables[$name] = $value; } /** * Set the template file to use * * @param string $filename Template filename */ public function setTemplate($filename) { $this->templateName = $filename; } /** * Set the recipient address for the email message * * @param string $email Email address */ public function setRecipient($email) { $this->recipient = $email; } /** * Send email * * @todo Add from name */ public function send() { $config = Zend_Registry::get('config'); $emailPath = $config->email->templatePath; $templateVars = $config->email->template->toArray(); foreach ($templateVars as $key => $value) { if (!array_key_exists($key, $this->templateVariables)) { $this->{$key} = $value; } } $viewSubject = $this->_viewSubject->setScriptPath($emailPath); foreach ($this->templateVariables as $key => $value) { $viewSubject->{$key} = $value; } $subject = $viewSubject->render($this->templateName . '.subj.tpl'); $viewContent = $this->_viewContent->setScriptPath($emailPath); foreach ($this->templateVariables as $key => $value) { $viewContent->{$key} = $value; } $html = $viewContent->render($this->templateName . '.tpl'); $this->_mail->addTo($this->recipient); $this->_mail->setSubject($subject); $this->_mail->setBodyHtml($html); $this->_mail->send(); } }
мне нравится иметь некоторые параметры Zend_Mail (например, транспорт, имя отправителя по умолчанию и т. д.) установить в моем приложение.ini следующим образом:
;------------------------------------------------------------------------------ ;; Email ;------------------------------------------------------------------------------ resources.mail.transport.type = smtp resources.mail.transport.host = "192.168.1.8" ;resources.mail.transport.auth = login ;resources.mail.transport.username = username ;resources.mail.transport.password = password ;resources.mail.transport.register = true resources.mail.defaultFrom.email = info@example.com resources.mail.defaultFrom.name = "My Site Name" resources.mail.defaultReplyTo.email = info@example.com resources.mail.defaultReplyTo.name = "My Site Name" email.templatePath = APPLICATION_PATH "/modules/default/views/scripts/emails" email.template.newsletter = "My Site Name - Newsletter" // default templates
и теперь, от в любом месте моего приложения я могу просто отправить электронное письмо, используя, например:
$mail = new My_Mail; $mail->setRecipient("name@example.com"); $mail->setTemplate(My_Mail::SIGNUP_ACTIVATION); $mail->email = $user->email; $mail->token = $token; // generate token for activation link $mail->firstName = $user->firstName; $mail->lastName = $user->lastName; $mail->send();
это установит шаблон, и переменные шаблона через магия сеттер. Наконец, мои шаблоны локализованы в APPLICATION_PATH "/ modules / default/views / scripts / emails" (можно изменить в приложение.ini). Типичный шаблон будет:
// in /views/scripts/emails/signup-activation.tpl <p> Hi,<br /><br /> You almost done, please finish your registration:<br /> <a href="http://www.example.com <?= $this->url(array('controller' => 'account', 'action' => 'index', 'e' => $this->email, 't' => $this->token), 'default', true) ?> ">Click here</a> </p> // in /views/scripts/emails/signup-activation.subj.tpl My Site Name - Account Activation Link
здесь
$this->email
и$this->token
переменные шаблона.