Каков наилучший способ использовать шаблон электронной почты в Zend / PHP - PullRequest
4 голосов
/ 10 марта 2010

Я работаю над сайтом, где пользователи создают свои учетные записи. Мне нужно отправить электронное письмо пользователям во многих океанах. Например, при регистрации, забыл пароль, сводку заказа и т. Д. Я хочу использовать шаблоны электронной почты для этого Мне нужны ваши предложения для этого. Я хочу использовать способ, которым Если я изменю любой шаблон электронной почты или войду в систему за меньшее время и изменений.

Я думал о следующем пути:

У меня есть таблица шаблонов электронной почты, подобная этой:

id
emailSubject
emailBody
emailType

Например, когда пользователь забыл пароль:

Идентификатор:

1

почтовое сообщение:

ABC: Link for Password Change

emailBody:

<table border=0>
<tr><td>
   <b> Dear [[username]] <b/>
</td></tr>

<tr><td>
   This email is sent to you in response of your password recovery request. If you want to change your password, please click the following link:<br />
[[link1]]
<br/>
If you don't want to change your password then click the following link:<br/>
[[link2]]
</tr></td>

<tr><td>
   <b>ABC Team</b>
</td></tr>

</table>

EmailType:

ForgotPassword

Подготовить данные электронной почты:

$emailFields["to"] = "user@abc.com";
$emailFields["username"] = "XYZ";
$emailFields["link1"] = "http://abc.com/changepassword?code='123'";
$emailFields["link2"] = "http://abc.com/ignorechangepasswordreq?code='123'";
$emailFields["emailTemplate"] = "ForgotPassword";

Теперь передайте все поля этой функции для отправки электронной почты:

sendEmail( $emailFields ){
 // Get email template from database using emailTemplate name.
 // Replace all required fields(username, link1,link2) in body.
 // set to,subject,body
 // send email using zend or php
}

Я планировал использовать вышеуказанный метод. Можете ли вы предложить лучший способ или некоторые изменения в вышеупомянутой логике.

Спасибо.

Ответы [ 3 ]

8 голосов
/ 10 марта 2010

Я бы использовал Zend_View.Сохраните ваши шаблоны в /views/email/EMAILNAME.phtml, создайте объект Zend_View с требуемым шаблоном электронной почты и передайте ему необходимые данные.

5 голосов
/ 10 марта 2010

С макушки головы, такой непроверенный ... но должно сработать что-то похожее:

$view = new Zend_View();
$view->setScriptPath( '/path/to/your/email/templates' );
$view->assign( $yourArrayOfEmailTemplateVariables );
$mail = new Zend_Mail();
// maybe leave out phtml extension here, not sure
$mail->setBodyHtml( $view->render( 'yourHtmlTemplate.phtml' ) );
$mail->setBodyText( $view->render( 'yourTextTemplate.phtml' ) );
0 голосов
/ 10 марта 2010

Как упоминалось ранее, Zend_View - это путь. Вот как я это делаю:

$template = clone($this->view);
$template->variable = $value;
$template->myObject = (object)$array;
// ...
$html = $template->render('/path/filename.phtml');

Используйте Markdownify, чтобы преобразовать в обычный текст:

$converter = new Markdownify_Extra;
$text = $converter->parserString($html);

Настройка почты:

$mail = new Zend_Mail();
$mail->setBodyHtml($html);
$mail->setBodyText($text);

Затем настройте транспорт и отправьте.

...