Как лучше всего использовать шаблон электронной почты в Zend/PHP
-
19-09-2019 - |
Вопрос
Я работаю на веб -сайте, где пользователи создают свои учетные записи. Мне нужно отправить электронную почту пользователям во многих океанах. Например, при регистрации, забыл пароль, резюме заказа и т. Д. Я хочу использовать шаблоны электронных писем для этого. Мне нужны ваши предложения для этого. Я хочу использовать способ, если я изменю какой -либо шаблон электронной почты или войти в систему меньше времени и изменяется.
Я подумал о следующем:
У меня есть таблица для таких шаблонов электронной почты, как это:
id
emailSubject
emailBody
emailType
Например, когда пользователь забыл пароль:
я бы:
1
Тема письма:
ABC: Link for Password Change
Кордис по электронной почте:
<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
}
Я планировал использовать метод выше. Можете ли вы предложить лучший способ или какое -то изменение в логике выше.
Спасибо.
Решение
Я бы использовал Zend_View
. Анкет Храните свои шаблоны в /views/email/EMAILNAME.phtml
, создать Zend_View
Объект с необходимым шаблоном электронной почты и передайте его необходимые данные.
Другие советы
Вне моей головы, такой непроверенный ... но что -то подобное должно работать:
$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' ) );
Как упоминалось ранее, 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);
Затем настройте транспорт и отправьте.