Справочник
WEB - языков

www.spravkaweb.ru Rambler's Top100
 Вы находитесь: Главная/Советы/Отправка писем при помощи PHP.Общие вопросы, проблемы с кодировкой, отправка в HTML-видеРаспечатать 
Разделы
Новости
Сразу все
HTML
JavaScript
VBScript
CSS
Flash
Perl
PHP
MySQL
SSI
VRML
Дополнительно
Советы
Download
Форум
Гостевая
Ссылки
Написать мне
Поиск:
Рассылки
Subscribe.Ru:

Советы

<--Назад | Вернуться к списку | Дальше-->
Отправка писем при помощи PHP
Общие вопросы, проблемы с кодировкой, отправка в HTML-виде

Общие возможности

Рано или поздно каждый владелец сайта сталкивается с необходимостью отправки писем непосредственно с сайта через скрипт, а не через почтовые программы. Это могут быть письма, отправляемые скриптом гостевой книги, сообщающее владельцу сайта что у него в гостевой появилось новое сообщение, или форумом, для оповещения о новом вопросе.
Во всех этих случаях необходима именно автоматическая отправка писем миную разнообразные почтовые программы и утилиты.
Сделать это можно при помощи функции mail(), которую мы сейчас и будем изучать.

Синтаксис функции mail():
bool mail(string $to, string $subject, string $msg [, string $header]);

Функция mail() посылает письмо с темой $subject и содержанием $msg по адресу $to.
Если Вы хотите, чтобы письмо ушло по нескольким адресам, разделите их пробелами.
Само сообщение может быть многострочным. Для перехода на новую строку поставьте знак перехода на новую строку "\n" в конце каждой строки.

mail("[email protected]", "my subject", "stroka1\nstroka2\nstroka3");
Или тотже самое можно записать так:
mail("[email protected]", "my subject", "stroka1
stroka2
stroka3");
В четвертом необязательном параметре $header можно указать заголовки нашего сообщения.
Под заголовками я подразумеваю информацию, передаваемую вместе с письмом почтовому клиенту, которая будет содержать некоторые технические данные, такие как: кодировка письма, имя отправителя, обратный адрес отправителя и т.д. Это схоже с использованием тега <META> в HTML.

Чтобы было более понятно, что из себя представляют заголовки, и где они находятся в письме, откройте почтовый клиент и посмотрите на любое письмо в том виде, как оно пришло (Для Outlook это можно сделать нажав правой клавишей мыши на сообщение->Свойства->Подробно->Исходное сообщение).

Как мы видим, письмо представляет простой текстовой файл, состоящий из двух общих разделов:
Вверху идут заголовки письма, затем через две строки идет само письмо.

Заголовков письма достаточно много, но не все они используются при написании скрипта отправки почты.
Вот некоторые наиболее часто используемые:
From: "Имя пользователя отправителя" <Обратный адрес отправителя>
To: <Адрес, по которому отправляют письмо>
Subject: Тема письма

Решение проблемы кодировок

Я не зря выше привел пример отправки письма со словами латинского алфавита. Их любой почтовый клиент прочтет без труда. Но вот с русским алфавитом труднее. Русских кодировок существует огромное множество. И от того, насколько умело Вы перекодируете письмо, будет зависеть прочтет ли получатель его, или не будет возиться с установкой нужной кодировки и просто удалит его в корзину.
Кодировку письма задает заголовок Content-type:
$header="From: "\Evgen"\ <[email protected]>";
$header.="Content-type: text/plain; charset=\"windows-1251\"";
$subject="Тема письма";
$msg="Сторака 1\nСтрока 2\nСтрока 3";
mail("[email protected]", $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"\ <[email protected]>";
$header.="Subject: $subject";
$header.="Content-type: text/plain; charset=\"windows-1251\"";
$msg="Сторака 1\nСтрока 2\nСтрока 3";
mail("[email protected]", $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"\ <[email protected]>";
$header.="Subject: $subject";
$header.="Content-type: text/html; charset=\"windows-1251\"";
$msg="<body>
<li>Сторака 1
<li>Сторака 2
<li>Сторака 3
</body>";
mail("[email protected]", $subject, $msg, $header);
Комментарии





dfg






BuMax
Незнаю... на трезвую голову прочитаю - посмотрю, а вообще - совет разработчику: зарарьте(или зазипте:) ) все учебники и выложите - посещаемость увеличится в n раз ;)


Алексей



Алексей
Все очень ясно и понятно. Спасибо, статья очень помогла мне.


Я
Не проподать!


MaxFactor
всё чудесно описано!
спс


Имя:
Майл:
Коментарий:
Наверх / К оглавлению
 
Что нового:
05.07.2004
  • В разделе PHP добавлены некоторые функции для работы с картинками (библиотека GD):
    imagetypes(), ...
  • В разделе JavaScript добавлены свойства на букву D, E, F, H, I
  • В разделе Советы добавлена статья, рассказывающая как вставить в html-страницу документы MS Office (Word, Excel и т.д.)
  • Голосование:
    Ваше отношение к дизайну сайта:
    Приятный.
    Оригинальный.
    Так себе.
    Видали и получше.
    Ужасный.
    Ничего хуже не встречали.
    Счетчики:
    Rambler's Top100
    Сделать страницу стартовой Сделать страницу стартовой
    Добавить страницу в избранное Добавить сайт в избранное
    Сообщить об найденной ошибке Сообщить об ошибке