Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
("COMSPEC")) { 
if(!@is_dir("debug")) mkdir("debug",0755); 
$f=fopen("debug/_debug_mail.txt","a+"); 
fputs($f,"> to: $to\n"); 
fputs($f,"$head\n--------\n"); 
fputs($f,"$msg\n-----------------------------------------\n\n"); 
fclose($f); 
} 
return $Result; 
} 
// Функция PostMail() "разворачивает" шаблон $msg, делая доступным для 
// него переменные из массива $Vars (см. описание функций 
// ExpandTemplate() и ExpandFile()). Затем она переводит результирующий 
// текст в кодировку, заданную в $encTo (сам текст при этом 
// рассматривается в кодировке $encFrom), и посылает его по электронной 
// почте по адресу $to. Если строка $msg начинается с префикса 
// file:, за которым следует имя файла, то шаблон письма загружается из 
// этого файла при помощи ExpandFile(). В противном случае в качестве 
// шаблона рассматривается сам параметр $msg. 
function PostMail($to,$msg,$encTo=DefaultCode, 
$Vars=false,$encFrom=DefaultCode) 
{ if(eregi("^file:(.*)(\n|\$)",$msg,$P)) 
$Text=ExpandFile(trim($P[1]),$Vars); 
else 
$Text=ExpandTemplate($msg,$Vars); 
// Посылаем письмо. 
return SendMail($to,$Text,$encTo,$encFrom); 
} 
?> 
Отличительной особенностью функции EncodeString() (а также всех остальных 
почтовых функций) является то, что она умеет перекодировать текст в транслит. 
Термин "транслит" (сокращение от "транслитерация") означает такую кодиров- 
ку кириллицы, при которой все "русские" буквы контекстно заменяются на за- 
писанные в соответствии с английской транскрипцией. Например, vot stroka, 

Глава 32. Почтовые шаблоны 493 
zapisannaya translitom. Эта кодировка особенно полезна для пользователей 
Unix, которые забыли установить у себя "русскую" таблицу символов. 
Пример 
Напоследок рассмотрим пример применения описанных выше функций. Предполо- 
жим, в некотором текстовом файле хранится список подписчиков, каждая строка ко- 

торого оформлена в следующем формате: 
Имя_подписчика|адрес|timestamp_подписки|кодировка_письма 
Напишем сценарий, который будет посылать каждому подписчику из этой простей- 
шей базы данных "личное" письмо с самыми последними новостями сайта. Предпо- 
ложим для простоты, что эти новости в программе уже сохранены в массиве $News. 
Для начала создадим шаблон письма (листинг 32.3): 
Листинг 32.3. Шаблон "личного" письма: mail.txt 
Content-type: text/plain 
From: Система рассылки  
To: . 
Subject: Свежие новости 
Content-type: text/plain 
~StartOfMail 
Уважаемый ! 
Вы подписались на наш лист рассылки . 
Предлагаем Вашему вниманию последние новости. 
--------------------------------------------------------------- 
$v) {?> 
. 
 
Как видим, шаблон практически ничем не отличается от небольшого сценария на 
PHP. Он получает данные из переменных $User (данные пользователя) и $News 
(блоки новостей), которые должны устанавливаться запускающей программой. Вско- 
ре мы рассмотрим процедуру более подробно, а пока обратите внимание на некото- 
рые моменты при написании этого шаблона. 
r Мы указали заголовок Content-type сразу в двух местах шаблона — в начале и 
конце. В силу рассуждений, приведенных в главе 20, это необходимо для того, 
чтобы помочь некоторым "недогадливым" почтовым программам в определении 
кодировки письма. 

Часть V. Приемы программирования на PHP 494 
r Заметьте, что в конце заголовка To стоит точка. Зачем она нужна? Дело в том, 
что закрывающий тэг PHP ?>, если он занимает последние символы строки, нико- 
гда не генерирует знака перевода строки \n. Это, видимо, сделано для того, 
чтобы 
уменьшить количество пустых строк в страницах, которые создает интерпретатор. 
В нашем случае отсутствие разделителя может сильно помешать, если не поста- 
вить после тэга ?> какой-нибудь знак. Вообще-то, лучше здесь использовать про- 
бел, но в листинге он был бы совершенно незаметен, — вот почему я и выбрал 
точку. 
r Наконец, чтобы каждая строка новостей, которые получит пользователь, была не 
длиннее 60 символов, мы задействуем встроенную в PHP функцию WordWrap(). Под- 
робнее о ней можно прочитать в главе 12 настоящей книги. 
В листинге 32.4 приведен код, который, собственно, и занимается рассылкой писем.
 
Листинг 32.4. Код рассылки писем 

		
 
<<-[Весь Текст]
Страница: из 287
 <<-