Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка PHP 2008.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

11.3 Посылка писем через php

Одно из самых мощных средств PHP – возможность автоматической посылки писем по электронной почте, минуя использование внешних программ и утилит. Функция отсылки встроена в PHP.

Функция отправки письма

  • bool mail(string $to, string $subject, string $msg [,string $headers])

Функция mail() посылает сообщение с телом $msg (это может быть «многострочная строка», т. е. переменная, содержащая несколько строк, разделенных символом перевода строки) по адресу $to. Можно задать сразу нескольких получателей, разделив их адреса пробелами в параметре $to. Пример:

mail("rasmus@lerdorf.on.ca ca.ok@oklab.ru,

"My Subject", "Line 1\nLine 2\nLine 3");

Если указан четвертый параметр, переданная в нем строка вставляется между концом стандартных почтовых заголовков (таких как To, Content-type и т. д.) и началом текста письма. Этот параметр используется для задания дополнительных заголовков письма. Пример:

mail("ssb@guardian.no dk@dizain.ru",

"the subject",

"Line 1\nLine 2\nLine 3",

"From: webmaster@$SERVER_NAME\n".

"Reply-To: webmaster@$SERVER_NAME\n".

"X-Mailer: PHP/" . phpversion());

Гораздо лучше было бы включить указанные заголовки прямо в тело письма $msg (в начало тела), отделив их от самого письма пустой строкой (как в стандарте HTTP). То же самое применимо и к параметру $subject: лучше задавать в нем всегда пустую строку и указывать заголовок Subject в самом письме.

Посылка в указанной кодировке. Чтобы не возникало приблем с кодировками при отправке писем, нужно функции mail() передавать только адрес получателя и текст письма. Ни заголовков, ни темы – и то и другое должно присутствовать в самом письме. Пример:

$message=

"From: Лист рассылки

To: Иванов Иван Иванович

Subject: Пробная рассылка

Content-type: text/plain; charset=windows-1825

Уважаемый товарищ! Всего хорошего!";

Mail("ivanov@ivan.ivanovich.ru","",$message);

Заголовок Content-type (в некоторых системах он обязательно должен стоять последним) задает, что, во-первых, письмо доставляется как простой текст (text/plain), а во-вторых, что его кодировка – Windows. Тело письма отделяется от заголовков пустой строкой, с тем, чтобы почтовая программа могла понять, где кончаются заголовки и начинается тело.

Тема 12 Работа с www

12.1 Установка заголовков ответа

12.2 Работа с Cookies

12.1 Установка заголовков ответа

Рассмотрим средства PHP для работы с заголовками HTTP.

Вывод заголовка

  • int Header(string $string)

Функция предназначена для установки заголовков ответа, которые будут переданы браузеру – по одному заголовку на вызов. Она может быть вызвана только до первой команды вывода сценария (если до этого не использовалась функция буферизации ob_start()). Текст вне <? и ?> также рассматривается как оператор вывода, потому не нужно делать лишних пробелов до первой «скобки» <? в сценарии (и в особенности в файле, который этим сценарием включается) и, конечно, после последнего ограничителя ?> во включаемом файле. Пример:

// перенаправляет браузер на сайт PHP

Header("Location: http://www.php.net");

// принудительно завершаем сценарий

exit;

Запрет кэширования. Еще одно полезное приложение функции Header() – запрет кэширования документа браузером и Proxy-серверами. Большинство сценариев формируют документы, которые при каждом запуске программы изменяются. Выход – использовать в начале сценария следующие команды:

Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

// Дата в прошлом

Header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1

Header("Pragma: no-cache"); // HTTP/1.0

Header("Last-Modified:" .gmdate("D,dMYH:i:s")."GMT");

Для полного запрета кэширования нужно всегда посылать 4 указанных заголовка, и ни один пропустить нельзя – в противном случае не сработает либо браузер, либо Proxy-сервер.

Получение заголовков запроса. Для получения всех заголовков запроса следует воспользоваться функцией GetAllHeaders():

  • array GetAllHeaders()

Функция GetAllHeaders() возвращает ассоциативный массив, содержащий данные о HTTP-заголовках запроса клиента, породившего запуск сценария. Ключи массива содержат названия заголовков, а значения – их величины. Пример:

$headers = GetAllHeaders();

foreach($headers as $header=>$value)

echo "$header: $value<br>\n";

Функция GetAllHeaders() поддерживается PHP только в том случае, если он установлен в виде модуля Apache.