Zend framework 如何在Zend Framework中制作电子邮件模板?

Zend framework 如何在Zend Framework中制作电子邮件模板?,zend-framework,templates,zend-mail,Zend Framework,Templates,Zend Mail,我想在Zend框架中制作电子邮件模板 比如说, <html> <body> Dear {$username$},<br> This is a invitation email sent by your {$friend$}.<br> Regards,<br> Admin </body> </html> 亲爱的{$username$}, 这是您的{$friend$}发送的邀请电子邮件。 问候, 管理 我想创建

我想在Zend框架中制作电子邮件模板

比如说,

<html>
<body>
Dear {$username$},<br>
This is a invitation email sent by your {$friend$}.<br>
Regards,<br>
Admin
</body>
</html>

亲爱的{$username$},
这是您的{$friend$}发送的邀请电子邮件。
问候,
管理
我想创建这个文件,在Zend framework中获取它,设置这些参数(用户名、朋友),然后发送电子邮件


我该怎么做?Zend支持这一点吗?

嗨,这很常见

创建一个视图脚本,如:/views/emails/template.phtml

<body>
<?php echo $this->name; ?>
<h1>Welcome</h1>
<?php echo $this->mysite; ?>
</body>

为了完成ArneRie在这里的回答(这已经非常相关),我希望在我的项目中有一个类来同时处理电子邮件发送和不同的模板

该类可以位于您的库中,例如(/library/My/Mail.php):

我希望在我的应用程序ini中设置一些Zend_邮件选项(如传输、默认发件人名称等),如下所示:

;------------------------------------------------------------------------------
;; 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
现在,在我的应用程序中的任何地方,我都可以通过以下方式发送电子邮件:

    $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();
这将通过一个神奇的setter设置模板和模板变量。 最后,我的模板被本地化到应用程序路径“/modules/default/views/scripts/email”(可以在APPLICATION.ini中更改)。典型的模板是:

// 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
//在/views/scripts/email/signup-activation.tpl中
您好,

您快完成了,请完成您的注册:

//在/views/scripts/email/signup-activation.subc.tpl中 我的网站名称-帐户激活链接

其中,
$this->email
$this->token
是模板变量。

值得注意的是,如果您处于控制器操作中,并且没有偏离默认的MVC架构太远,您可以简单地利用现有的视图实例,而不是创建一个新实例(如果您不担心变量作用域)。
$bodyText=$this->view->render('template.phtml')
在大多数情况下都足够了。亲爱的Robert Jones,这是您的John Smith发出的邀请。问候,管理员:)+1,采用类似的方式,但我扩展的是Zend_邮件,而不是可怜人的DI
    $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();
// 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