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 프레임 워크에서 가져 와서 해당 매개 변수 (사용자 이름, 친구)를 설정 한 다음 이메일을 보내고 싶습니다.
어떻게 할 수 있습니까? Zend는 이것을 지원합니까?
안녕하세요 이것은 정말 일반적입니다.
다음과 같은보기 스크립트를 작성하십시오. /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();
ArneRie의 답변을 완료하기 위해 (이미 매우 관련성이 있음) 프로젝트에서 이메일 전송과 다른 템플릿을 동시에 처리하는 수업을 갖고 싶습니다.
이 클래스는 예를 들어 라이브러리에있을 수 있습니다 (/ 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 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();
}
}
다음과 같이 내 application.ini에 일부 Zend_Mail 옵션 (예 : 전송, 기본 발신자 이름 등)이 설정되어 있습니다.
;------------------------------------------------------------------------------
;; 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
And now, from anywhere in my application, I can simply send an email using for instance:
$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();
This will set the template, and template variables through a magic setter. At last, my templates are localized in APPLICATION_PATH "/modules/default/views/scripts/emails" (can be changed in the application.ini). A typical template would be:
// 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
where $this->email
and $this->token
are the template variables.
참고URL : https://stackoverflow.com/questions/1218191/how-can-i-make-email-template-in-zend-framework
'Programing' 카테고리의 다른 글
REST 웹 서비스 테스트 (0) | 2020.11.24 |
---|---|
CoreData 레코드의 재정렬을 구현하는 방법은 무엇입니까? (0) | 2020.11.24 |
HashMap을 초기화하는 올바른 방법과 HashMap이 다른 값 유형을 보유 할 수 있습니까? (0) | 2020.11.24 |
git : 두 커밋 사이에 변경된 모든 파일 표시 (0) | 2020.11.24 |
자식 복제 후 분기가 표시되지 않습니다. (0) | 2020.11.24 |