РНР 5 в подлиннике

Страница 256 из 554


Глава 27. Посылка писем через РНР

517

// Перехватываем выходной поток. ob_start();

// Запускаем файл как программу на РНР.

extract($vars, EXTR_OVERWRITE);

include ($_fname) ;

// Получаем перехваченный текст. Stext = ob_get_contents() ; ob_end_clean{) ; return $text;

}

?>

Как видите, мы используем функцию extract о, превращающую в переменные элементы массива для более легкого доступа к ним. Этим способом мы можем явно указать, какие переменные доступны шаблону напрямую, а какие — нет.

С использованием данной библиотеки мы могли бы переписать наш сценарий отправки почты так, как показано в листинге 27.8.

.■^■■«■■^■■(■«■•■■■■•«■■■'■■■■'■■■■'•■•■•'■'••••'>)1>*'1*1*>'""<",">*1а1'>"*'*''*'>'"""<><'1,<1|<1||1|||МММ|

I -:: ... : -._ "- ' - ' " " -. -. .-'

! Листинг 27.8. Файл maiLphp.php.php

<?php ## Отправка почты с использованием активного шаблона. // Подключаем функции. include_once "lib/mailx.php"; include__once "lib/mailenc.php"; include__once "lib/template .php"; $text - "Well, now, ain't this a surprise?"; $tos = array("Пупкин Василий <poupkinne@mail.ru>"); $a - 1;

foreach ($tos as $to) {

// "Разворачиваем" шаблон, передавая ему $to и $text. Smail = template("mail.php.eml", array(

"to" => $to,

"text" => $text,

■ ) ) ;

// Дальше как обычно: кодируем и отправляем. $mail = maiiencf$mail); mailx ($mail) ;

}

■■^■■■■■■■■■■■■■■■•lililiii>tliI't»iiiililililiililikliiltlilliHll1illi.iiitiliiiiiIliiiiiiiitt.iiitllii(>itlt>l»tlttiltiIill>l*l>III^tIi

Шаблон же теперь будет выглядеть следующим образом (листинг 27.9).

■ - ■- ■ " ". --'.'^ ' - '-. - ■ . : . . - -- -!' - ■" .т^-'-^й?.:-.---

Листинг 27.9. Файл mail.php.eml " V;Г."""V':: .":\";>:V.^1

.«l"il.ilbbiiniItlltl"lt«">'''i">'*">»>'"t'«""i(ll»*'t*l«t''tit"<'<<**<"*"<*,"*,'"*"""''',*,"|H'"ii"ii"iiii'i"""ii'i"""»l'>'t.>.l^ "1

From: Почтовый робот <somebody@mail.ru> То: <?=$to?> Subject: Добрый день! Content-type: text/plain;

charset=windows-1251

518

Часть IV. Стандартные функции РНР

Привет, <?=$to?>! <?=$text?>

Содержимое переменных окружения на момент отправки письма: <?print_r($_SERVER)?>

Это сообщение сгенерировано роботом — не отвечайте на него.

Внимание!

Ь

Учтите, что в РНР все символы переводов строки и табуляции, расположенные после тега ?>, удаляются! К счастью, данный факт не касается пробелов. Это значит, что вы должны явно указать после ?> хотя бы один пробел (или любой другой символ, отличный от возврата каретки), если не хотите, чтобы следующая строка "приклеилась" к предыдущей. В листинге этих пробелов не видно, но на самом деле они там есть, Еще раз: если пропустить пробел после <?=$to?>, то поле subject "приклеится в хвост" полю то, и получится, конечно же, совсем не то, на что вы рассчитывали.

Настройки РНР

В РНР существуют две взаимоисключающих директивы для настройки поведения функции mail о. Они задаются в файле php.ini, а одна из них может быть изменена и при помощи функции ini_set() (см. гл. 23). Давайте рассмотрим директивы подробнее.

s endmai х__ра tn

□ Возможные значения: путь к исполняемому файлу.

□ Где устанавливается: php.ini.

Данная настройка имеет наивысший приоритет. Она определяет путь к программе sendmail, которая в Unix традиционно занимается доставкой почты адресату. Вопреки уверениям разработчиков РНР, данная директива прекрасно работает не только в Unix, но и в Windows (что позволяет, например, использовать "почтовую заглушку" в комплексе Денвер (см. гл. 6) вместо отправки почты; это неоценимо при отладке сценариев).

SMTP

□ Возможные значения: имя SMTP-сервера провайдера.

□ Где устанавливается: php.ini, .htaccess, ini_set().

В Windows имеется возможность отправлять почту не через sendmail, а с использованием SMTP-сервера провайдера (почтового сервера, который вы обычно указываете в настройках своей почтовой программы). Необходимо заметить, что РНР не поддерживает SMTP-авторизацию, а значит, отправка почты возможна только на сервер, который явно вам это разрешит (например, на сервер провайдера).

Внимание!

Указать вместо SMTP-сервера сторонний хост, вроде maii.ru, не получится! В противном случае спам наводнил бы Интернет в масштабе, в сотни раз превышающий современный. Впрочем, если вы посылаете письмо как раз на mail. ru, указание его адреса




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006