Рано или поздно каждый владелец сайта сталкивается с необходимостью отправки писем
непосредственно с сайта через скрипт, а не через почновые программы.
Это могут быть письма, отправляемые скриптом гостевой книги,
сообщающее владельцу сайта что у него в гостевой появилось новое сообщение,
или форумом, для опошещения о новом вопросе.
Во всех этих случаях необходима именно автоматическая отправка писем миную
разнообразные почтовые программы и утилиты.
Сделать это можно при помощи функции mail(), которую мы сейчас и будем изучать.
Синтаксис функции mail():
bool mail(string $to, string $subject, string $msg [, string $header]);
Функция mail() посылает письмо с темой $subject и содержанием $msg по адресу $to.
Если Вы хотите, чтобы письмо ушло по нескольким адресам, разделите их пробелами.
Само сообщение может быть многострочным. Для перехода на новую строку поставте
знак перехода на новую строку "n" в конце каждой строки.
mail("name@mail.ru", "my subject", "stroka1nstroka2nstroka3");
Или тотже самое можно записать так:
mail("name@mail.ru", "my subject", "stroka1
stroka2
stroka3");
В четвертом необязательном параметре $header можно указать заголовки нашего сообщения.
Под заголовками я подразумеваю информацию, передаваемую вместе с письмом почтовому клиенту,
которая будет содержать некоторые технические данные, такие как: кодировка письма, имя отправителя,
обратный адрес отправителя и т.д. Это схоже с использованием тега в html.
Чтобы было более понятно, что из себя представляют заголовки, и где они находятся в письме,
откройте почтовый клиент и посмотрите на любое письмо в том виде, как оно пришло
(Для outlook это можно сделать нажав правой клавишей мыши на
сообщение->Совойства->Подробно->Исходное сообщение).
Как мы видим, письмо представляет простой текстовой файл, состоящий из двух общих разделов:
Вверху идут заголовки письма, затем через две строки идет само письмо.
Заголовков письма достаточно много, но не все они используются при написании скрипта отправки почты.
Вот некоторые наиболее часто используемые:
from: "Имя пользователя отправителя"
to:
subject: Тема письма
Решение проблемы кодировок
Я не зря выше привел пример отправки письма со словами латинского алфавита.
Их любой почтовый клиент прочтет без труда. Но вот с русским алфавитом труднее.
Русских кодировок существует огромное множество. И от того, насколько умело
Вы перекодируете письмо, будет зависеть прочтет ли получатель его, или не будет возиться
с установкой нужной кодировки и просто удалит его в корзину.
Кодировку письма задает заголовок content-type:
$header="from: "evgen" ";
$header.="content-type: text/plain; charset="windows-1251"";
$subject="Тема письма";
$msg="Сторака 1nСтрока 2nСтрока 3";
mail("name@mail.ru", $subject, $msg, $header);
В заголовке мы указали, что тип письма будет простой текст, а кодировка - windows.
Теперь наше письмо придет в понятной для почтового клиента кодировке.
Но стоит отметить, что в некоторых случаях в правильной кодировке будет отображено только само письмо.
Заголовок же так и останется нечитаемым. Связано это с тем, где расположен заголовок content-type
относительно заголовка subject, который и содержит тему письма. Дело в том, что существуют почтовые
программы,
которые понимают заголовок content-type, но не понимают русский текст в поле subject,
если это поле стоит до content-type. В то же время, другие почтовые программы обязывают
нас задавать content-type последним заголовком в списке. Чтобы обойти эти припятствия,
можно разместить поле content-type сразу в начале и в конце списка заголовков:
$subject="Тема письма";
$header="content-type: text/plain; charset="windows-1251"";
$header.="from: "evgen" ";
$header.="subject: $subject";
$header.="content-type: text/plain; charset="windows-1251"";
$msg="Сторака 1nСтрока 2nСтрока 3";
mail("name@mail.ru", $subject, $msg, $header);
Теперь это письмо прочтет любая почтовая программа!
Отправка письма в html-виде
Для отправки письма в html-виде достаточно в заголовке content-type указать тип документа не text/plain
(простой текст), а text/html (html-текст). А само письмо записать в html-виде:
$subject="Тема письма";
$header="content-type: text/html; charset="windows-1251"";
$header.="from: "evgen" ";
$header.="subject: $subject";
$header.="content-type: text/html; charset="windows-1251"";
$msg="
Строка 1
Строка 2
Строка 3
";
mail("name@mail.ru", $subject, $msg, $header);