在Zend / PHP中使用电子邮件模板的最佳方法是什么

时间:2010-03-10 10:50:28

标签: php zend-framework email-templates

我正在开设用户创建帐户的网站。我需要向许多海洋的用户发送电子邮件。例如,当注册,忘记密码,订单摘要等。我想使用电子邮件模板。我需要你的建议。我想使用一种方式,如果我更改任何电子邮件模板或登录更少的时间和更改。

我考虑过以下方式:

我有一个像这样的电子邮件模板表:

id
emailSubject
emailBody
emailType

例如,当用户忘记密码时:

ID:

1

Emailsubject的:

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 个答案:

答案 0 :(得分:8)

我使用Zend_View。将模板存储在/views/email/EMAILNAME.phtml中,使用所需的电子邮件模板创建Zend_View对象,并将其传递给所需的数据。

答案 1 :(得分:5)

脱离我的头顶,如此未经测试......但类似的东西应该有效:

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

答案 2 :(得分:0)

如前所述,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);

然后设置传输并发送。