PHP-код в HTML-почте - PullRequest
       3

PHP-код в HTML-почте

1 голос
/ 29 октября 2011

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

Я хочу использовать другой дизайн HTML, поэтому я сохранил его в таблице с некоторым PHP-кодом.

Но проблема в том, что я не выполняю код PHP при отправке почты с использованием этого содержимого HTML.

Я использую PHPMailer для отправки почты и сохранения HTML-содержимого с использованием аддешлаша и получения обратной полосы.

Спасибо.

1 Ответ

3 голосов
/ 29 октября 2011

Сохраненное HTML-содержимое с использованием надстрочных черт и повторное использование полосок.

Это плохо.Я не знаю, почему вы это сделали, но если вы намеревались избегать запросов, используйте mysql_real_escape_string () или функцию analgoue для вашего драйвера БД (или используйте параметризованные запросы).Если вы хотите, я не знаю, продезинфицировать HTML?ну, это бесполезно.Поэтому нет необходимости добавлять косые черты здесь по любой причине.

Но проблема в том, что я не получаю код PHP, выполняемый при отправке почты с использованием этого содержимого HTML.

Поскольку ваш контент возвращается в виде строки, поэтому PHP будет читать его как таковой, включая теги.

Самое грязное решение, И ВЫСОКО ОБЕСПЕЧЕННОЕ , использует eval () чтобы оценить код php и выполнить его.Но это очень рискованно и может привести к серьезным проблемам с безопасностью, поэтому я даже не собираюсь показывать вам пример:)

BEST SOLUTION - использовать какой-то видшаблонной системы.Я не предлагаю использовать Smarty или другой полноценный шаблонизатор, но вы можете развернуть простой анализатор пользовательского кода, который может работать следующим образом:

Вы сохраняете свои переменные, используя заполнитель, например

{{variable_text}}  {{recipient}} {{address}}

или что-то в этом роде.Вы просто замените то, что вам нужно, поэтому в вашем PHP-скрипте, который читает это письмо, вы можете сделать так:

$change = array('recipient' => 'John Smith',
                'address' => 'Unknown Avenue, 666',
                'variable_text' => 'We are glad to invite you to');

$text = '<p>To: {{recipient}}.</p>
         <p>Address: {{address}}.</p>
         Message: Dear{{recipient}}<br />{{variable_text}}';
foreach($change as $k => $v)
{
   $text = str_replace('{{'.$k.'}}', $v, $text);
}
...