Comment puis-je créer un modèle de courrier électronique dans Zend Framework?

Je veux créer des modèles de courrier électronique dans Zend Framework.

Par exemple,

  Dear {$username$},
This is a invitation email sent by your {$friend$}.
Regards,
Admin

Je veux créer ce fichier, l’obtenir dans le cadre de Zend, définir ces parameters (nom d’utilisateur, ami), puis envoyer le courrier électronique.

Comment puis je faire ça? Est-ce que Zend supporte ça?

Salut c’est vraiment commun.

Créez un script de vue tel que: /views/emails/template.phtml

  name; ?> 

Welcome

mysite; ?>

et lors de la création de l’e-mail:

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

Juste pour compléter la réponse d’ArneRie ici (qui est déjà très pertinente), j’aime avoir dans mes projets une classe pour gérer l’envoi de courrier électronique et différents modèles en même temps.

Cette classe pourrait être dans votre bibliothèque par exemple (/ library / My /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 ssortingng $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 ssortingng $filename Template filename */ public function setTemplate($filename) { $this->templateName = $filename; } /** * Set the recipient address for the email message * * @param ssortingng $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(); } } 

J’aime avoir des options Zend_Mail (telles que le transport, le nom de l’expéditeur par défaut, etc.) définies dans mon application.ini comme suit:

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

Et maintenant, de n’importe où dans mon application, je peux simplement envoyer un courrier électronique en utilisant, par exemple:

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

Cela définira le modèle et les variables de modèle via un setter magique . Enfin, mes modèles sont localisés dans APPLICATION_PATH “/ modules / default / views / scripts / emails” (peuvent être modifiés dans le fichier application.ini ). Un modèle typique serait:

 // in /views/scripts/emails/signup-activation.tpl 

Hi,

You almost done, please finish your registration:
Click here

// in /views/scripts/emails/signup-activation.subj.tpl My Site Name - Account Activation Link

$this->email et $this->token sont les variables du modèle.