| |
Windows-кодировке, а в KOI-8R. Для перекодирования можно восполь-
зоваться уже известной нам функцией convert_cyr_string(). И, конечно, нужно в
Content-type заменить charset на koi8-r. Вот что у нас получится:
$message=
"From: Лист рассылки
To: Иванов Иван Иванович
Subject: Пробная рассылка
Content-type: text/plain; charset=koi8-r
Уважаемый товарищ! Это письмо послано почтовым роботом.
Всего хорошего!";
$message=convert_cyr_string($message,"w","k");
Mail("[email protected]","",$message);
Теперь вы понимаете, почему я говорил о том, чтобы все заголовки и Subject
нахо-
дились внутри тела письма? Этим мы достигаем того, что одной командой
convert_cyr_string() перекодируется сразу все письмо, включая поля From, To,
Subject и др. Иначе пришлось бы применять эту функцию дополнительно для пере-
кодировки параметров $subject и $headers...
Проблема с заголовками
Есть одна проблема, возникающая при подобном использовании заголовка
Contenttype.
Дело в том, что существуют почтовые программы, которые понимают заголо-
вок Content-type, но не понимают русский текст в поле Subject, если это поле
стоит до Content-type. В то же время, другие почтовые клиенты обязывают нас
задавать Content-type последним заголовком в списке. Чтобы обойти этот закол-
дованный круг, проще всего разместить поле Content-type сразу в двух местах —
перед первым и после последнего заголовка:
$message=
"Content-type: text/plain; charset=koi8-r
From: Лист рассылки
To: Иванов Иван Иванович
Subject: Пробная рассылка
Content-type: text/plain; charset=koi8-r
Уважаемый товарищ! Это письмо послано почтовым роботом.
Всего хорошего!";
$message=convert_cyr_string($message,"w","k");
Mail("[email protected]","",$message);
Часть IV. Стандартные функции PHP 288
Да, это может показаться весьма искусственным приемом, но зато работает "на
ура".
Теперь вы можете быть уверены, что ваше письмо прочитает любой пользователь
(особенно если оно послано в кодировке KOI8), даже если его почтовая программа
вообще не настроена ни на какую кодировку. Можете похвастать этим достижением
перед начальством, предложив ему поставить у себя в Outlook Express по
умолчанию
японскую кодировку, а затем попросив принять письмо, сгенерированное роботом по
указанной схеме.
Перспективы: создание "умной"
функции для отправки писем
Возможно, вам уже пришла в голову идея сделать универсальную функцию для рас-
сылки писем — чтобы она сама добавляла к полю To в письме E-mail в угловых
скобках (как в примере выше), проставляла нужную кодировку у письма (которая
задается в параметрах при вызове функции), ну и т. д. Это вполне осуществимо.
Функция может выглядеть, например, так:
bool PostMail(string $ToAddress, string $Encode, string $Message)
Посылает письмо $Message по адресу $ToAddress, перекодировав его предвари-
тельно в кодировку, заданную в $Encode. Параметр $Encode может принимать сле-
дующие значения:
r w — Windows
r k — KOI8-R
r m — Mac
r i — Iso Latin
r t — Translit
В письме автоматически проставляется Content-type...charset (если заголовок
Content-type уже присутствует в письме, то он не портится, а просто у него
меняет-
ся поле charset на нужное значение). Также корректируется поле To в письме. Од-
новременно правильно обрабатываются вставки PHP-кода в тело письма (можно ис-
пользовать глобальные переменные и оператор echo). Для этого, как обычно,
применяются "скобки" и ?>.
Реализацию поставленной задачи мы отложим до части V, где описаны и другие
приемы, облегчающие работу на PHP. Для этого нам понадобится техника регуляр-
ных выражений, которыми мы вскоре займемся, а также еще некоторые навыки. Если
вы уже сейчас хотите использовать функцию PostMail(), можете сразу открыть
часть V книги и скопировать оттуда ее исходный код на PHP.
Глава 21
Работа с WWW
Мы уже рассматривали основы протокола HTTP в ча
|
|