Отправка электронного письма с использованием файла шаблона - PullRequest
1 голос
/ 02 декабря 2011

Я пытаюсь найти наилучший способ отправки электронной почты из внешнего файла шаблона, на данный момент у меня есть файл шаблона, который выглядит следующим образом:

<code>Thank you, your order has been received, someone will review it and process it. No money has been taken from your account.
<?php
    echo date('Y-m-d H:i:s');
?>
<pre>
<?php print_r($this->data); ?>

И тогда мой метод отправки выглядит так:

public function notify($template) {
    // get the template from email folder
    $path = $_SERVER['DOCUMENT_ROOT'].'templates/email/'.$template.'.php';
    if(file_exists($path)) {
        ob_start();
        require_once($path);
        $body = ob_get_contents();
        ob_end_clean();
        $subject = 'email send';

        foreach($this->emailTo as $email)
            new Mail($email,$subject,$body);
    }
}

Это все работает нормально, когда я называю это так:

$notifications = new notifications();
$notifications->setData(array('order' => $order->order));
$notifications->addEmail($order->order->email);
$notifications->notify('orderReceived');

Однако, если я попытаюсь сделать два вызова метода «уведомить», то второе электронное письмо будет пустым, я знаю, что это потому, что объект буфера, но я не могу придумать другого способа сделать это.

Спасибо

Ian

Ответы [ 2 ]

3 голосов
/ 02 декабря 2011

Вы используете require_once, поэтому файл будет загружен только один раз.Попробуйте require.

Также рассмотрите возможность загрузки чистого текстового шаблона и используйте str_replace для замены переменных в шаблоне следующим образом:

<code>$template = "<pre>%DATA%
"; $ text = str_replace ('% DATA%',$ this-> data, $ template);
2 голосов
/ 02 декабря 2011

Я бы сделал это:

Файл шаблона

<code>Thank you, your order has been received, someone will review it and process it. No money has been taken from your account.

%s

<pre>
%s

Функция уведомления

public function notify($template) {
    // get the template from email folder
    $path = $_SERVER['DOCUMENT_ROOT'].'templates/email/'.$template.'.php';
    if (!file_exists($path)) {
        // Return false if the template is missing
        return FALSE;
    }
    // Create the message body and subject
    $body = sprintf(file_get_contents($path), date('Y-m-d H:i:s'), print_r($this->data, TRUE));
    $subject = 'email send';
    // Send the mail(s)
    foreach($this->emailTo as $email) {
        new Mail($email, $subject, $body);
    }
    // Return true for success
    return TRUE;
}

Это решит проблему - которую можно решить, изменив require_once на require.

Использование require_once означает, что файл шаблона будет загружен только один раз (подсказка в имени функции), поэтому второй вызов приведет к пустому телу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...