62


39

Zend Frameworkでメールテンプレートを作成するにはどうすればいいですか?

Zend Frameworkでメールテンプレートを作りたいです。

例えば、

Dear {$username$},

This is a invitation email sent by your {$friend$}.

Regards,

Admin

このファイルを作成し、Zendフレームワークで入手し、それらのパラメータ(ユーザー名、友達)を設定してからメールを送信します。

どうやってやるの? Zendはこれをサポートしていますか?

2 Answer


103


こんにちはこれは本当に一般的です。

/views/emails/template.phtmlのようなビュースクリプトを作成します。

名;ようこそmysite; ?

そして電子メールを作成するとき:

// 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( '[email protected]'); $ mail-> setSubject( 'Welcome to Limespace.de'); $ mail-> setFrom ('[email protected] '、' Limespace '); $ mail-> setBodyHtml($ bodyText); $ mail-> send();


22


ここでArneRieの答えを完成させるために(これはすでに非常に関連性があります)、私は自分のプロジェクトにEメール送信とさまざまなテンプレートを同時に処理するクラスを用意したいと思います。

このクラスはあなたのライブラリ(例えば/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();
    }
}

次のようにZend_Mailのオプション(トランスポート、デフォルトの送信者名など)を* application.ini *に設定するのが好きです。

;------------------------------------------------------------------------------
;; 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    = [email protected]
resources.mail.defaultFrom.name     = "My Site Name"
resources.mail.defaultReplyTo.email = [email protected]
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

そして今、私のアプリケーションのどこからでも、例えば以下を使ってEメールを送ることができます。

    $mail = new My_Mail;
    $mail->setRecipient("[email protected]");
    $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();

これは_magic setter_を通してテンプレートとテンプレート変数を設定します。 最後に、私のテンプレートは* APPLICATION_PATH "/ modules / default / views / scripts / emails" *にローカライズされています(_application.ini_で変更できます)。 典型的なテンプレートは次のようになります。

// in /views/scripts/emails/signup-activation.tpl
 Hi,

 You almost done, please finish your registration:

Click here


// in /views/scripts/emails/signup-activation.subj.tpl
My Site Name - Account Activation Link

ここで、 $ this→ email`と $ this→ token`はテンプレート変数です。