Приступим ко второй части нашей задачи — напишем функцию PostMail(), которая будет отправлять письмо адресату, преобразовав его предварительно в нужную кодировку. Вот какие возможности она будет обеспечивать:
r вставку заголовка From
в письмо, если он еще не присутствует в сообщении;
r преобразование письма в нужную кодировку кириллицы;
r вставку соответствующего значения в заголовок Content-type, чтобы письмо было "понятно" любой почтовой программе;
r поддержку функций мини-шаблонизатора, который мы уже написали.
В листинге 32.2 приведен исходный код функции. Как обычно, мы помещаем функцию в отдельный модуль библиотекаря (библиотекарь описан в главе 29). Этот модуль будет использовать возможности, предоставляемые библиотекой Minitemplate.phl.
Листинг 32.2. Функция PostMail(): Mail.phl
<?
Uses("Minitemplate");
// Кодировка по умолчанию для исходного текста.
define("DefaultCode","w");
// Функция возвращает строку $st, переведенную из кодировки
// $from в кодировку $to. Возможные значения этих параметров:
// w[indows] — windows-1251
// k[oi8-r] — koi8-r
// m[ac] — x-mac-cyrillic
// i[so] — iso-8859-5
// t[ranslit] — translit ("английскими"
буквами — "русские" слова)
// Замечание: квадратными скобками помечены необязательные символы.
// параметр $from не может равняться "t", потому что трудно
// восстанавливать текст из транслита (хотя эта задача и разрешима).
// Функция полезна и сама по себе, но все-таки чаще всего ее
// применяют для работы с почтой. Именно поэтому я включаю
// ее в этот модуль.
function EncodeString($st,$to,$from=DefaultCode)
{ // Оставляем только первые буквы названий кодировок
$from=strtolower(substr($from,0,1));
$to =strtolower(substr($to,0,1));
// Пытаемся воспользоваться встроенной в PHP функцией