функция mail () - отправка HTML-шаблона - PullRequest
2 голосов
/ 29 октября 2011

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

mail('email@email.com', 'subject here', include('email/template.html'), 'from@from.com');

Хотя это, похоже, не нравится, есть ли в любом случае сделать это, кроме как иметь действительно длинную строку сообщения?

С уважением

Ответы [ 3 ]

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

include() не возвращает содержимое файла. он выполняет файл. Это означает, что любой код PHP внутри файла выполняется, и любой «голый» html выводится клиенту. Единственное, что возвращает include () - это значение true / false, указывающее успех / неудачу.

Это плохой дизайн, но вы бы хотели что-то вроде этого:

ob_start();
include('email/template.html');
$email_text = ob_get_clean();

mail('email@gmail.com', 'subject', $email_text, ....);

Функции буферизации вывода захватят «выходные данные» включения и вернут его в переменную $ email_text, которую вы затем передаете в функцию mail ().

обратите внимание, что этот метод требуется, только если вы хотите, чтобы страница .html выполнялась как PHP. Если это действительно простой HTML, вы можете использовать вместо него file_get_contents (), что сохранит вам последовательность синтаксического анализа / компиляции / выполнения PHP.

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

Ваш оператор include () используется неправильно ... попробуйте это:

$template = file_get_contents('email/template.html');
mail('email@email.com', 'subject here', $template, 'from@from.com');

Не используйте директиву include, если вы на самом деле не включаете файл, который вы хотите интерпретировать какчасть страницы - это плохая практика программирования.Ответ выше, который использует ob_start () include () ob_get_clean ();работает противно;он фактически выполнит включение как скрипт PHP.Теперь, если шаблон ЗАПОЛНЕН пользователем и сохранен вами где-то, пользователь сможет использовать эту конструкцию для выполнения произвольного кода PHP на вашем сервере.ПЛОХО ПЛОХО ПЛОХО.

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

попробуйте file_get_contents вместо include.include обрабатывает файл и выводит его в поток (данные отправляются клиенту), а не просто возвращает содержимое - в противном случае вы будете echo include('...') все время.

Хотя реалистично, если выищите такую ​​«продвинутую» способность (и ваш хост поддерживает ее) PEAR Mail - лучший вариант.

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