Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ОТПРАВКА ПИСЕМ В ФОРМАТЕ HTML 
:(
    Опции темы
NNaarreekk
Дата 6.2.2008, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

Репутация: 0
Всего: 3



ОТПРАВКА ПИСЕМ В ФОРМАТЕ HTML


Электронная почта в HTML формате представляет собой сообщение, представленное не в текстовом, а в HTML-формате. Отправка HTML сообщения через почтовый клиент довольно легко, что нельзя сказать про PHP-сценарии.
Сначала нужно понять стоит ли посылать письмо в формате HTML, или нет.  Перечислим случаи когда сообщение лучше отправлять в формате HTML:
  • Отображение письма
    • Поскольку разные почтовые клиенты исползуют шрифты разных длин то может возникнуть проблема с выравнением таблиц
  • Получение информации о клиенте (с помощью PHP сценариев)
    • Скажем вы сможете сможете поставить в сообщение изображение адресом которого будет PHP скрипт, который возвращает изображение до щтого собрав сведения о пользователе
  • Работа с ссылками
    • Без HTML вы не сможете ставить ссылки, а можете только записать саму ссылку и надеться, что почтовый клиент превратит его в сылку (хотя не буду лукавить, почти все почтовые клиенты превращают адрес в ссылку)

Ладно, хватит лирики, перейдем к делу!

Для того чтобы работать с HTML-форматом, вы должны использоват в сообщении заголовки MIME. Вместо отправки сообщения multipart/mixed отправим сообщение multipart/alternative. Таким образом, клиент будет предупрежден о том, что включены различные версии одного и того же сообщения, и должен выбрать лучшую версию.

Будем использовать кодировку base64, так как почтовые клиенты Microsoft испытывают проблемы при обработке других кодировок.

Код

<?PHP
//Добавляем заголовок From:
$headers="From: [email protected]\r\n";
//Задаем версию MIME
$headers.="MIME-Version: 1.0\r\n";
//Задаем уникальные границы
$boundary = uniqid("COREPHP");
//Сообщаем клиенту, что это сообщение содержит альтернативные версии
$headers.="Content-Type: multipart/alternative; boundary=$boundary\r\n\r\n";
//Сообщение адресатам, которые не "понимают" формата MIME
$headers.="This is a MIME encoded message!\r\n\r\n";
//Создаем текстовую версию сообщения
$headers.="-- $boundary\r\n Content-Type: text/plain; charset=UTF-7\r\n Content-Transfer-Encoding: base64\r\n\r\n";
//Кодируем и записываем
$headers.=chunk_split(base64_encode("This is the plain text message!"));
//Теперь HTML письмо
$headers.="Content-Type: text/html; charset=UTF-7\r\n Content-Transfer-Encoding: base64\r\n\r\n";
//Сообщение
$headers.=chunk_split(base64_encode("<center>This is the <B>HTML</B> message!</center>"));
//Отправляем сообщение
If(mail([email protected], "HTML message", "", $headers))
echo"HTML message sent!";


Материалы из книги “PHP5 Библиотека Профессионала” (Авторы: Леон Аткинсон, Зеев Сураски).
PM MAIL WWW   Вверх
GeneralElectric
Дата 6.2.2008, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



Что-то многовато неверных фактов.
Цитата(NNaarreekk @  6.2.2008,  00:35 Найти цитируемый пост)
Скажем вы сможете сможете поставить в сообщение изображение адресом которого будет PHP скрипт, который возвращает изображение до этого собрав сведения о пользователе

не буду лукавить - почти все почтовые клиенты не показывают изображения, не прикрепленные к самому сообщению. Как раз в целях не допустить сбор информации о пользователе.

Цитата(NNaarreekk @  6.2.2008,  00:35 Найти цитируемый пост)
Для того чтобы работать с HTML-форматом, вы должны использоват в сообщении заголовки MIME. Вместо отправки сообщения multipart/mixed 

Ни разу не должны. 
Чтобы работать с HTML-форматом, достаточно указать Content-Type: text/html и отправлять обычным порядком, только тело сообщения, разумеется, оформить в виде HTML.
То есть, строго говоря, отправка HTML сообщения сводится, на самом деле, к коду
Код

mail("[email protected]", "HTML message", $html, "Content-Type: text/html; charset=UTF-8\r\n");


А multipart сообщения имеет смысл отправлять в том случае, если они действительно multipart - то есть, в text/plain разделе содержится текстовая версия, плюс существуют вложенные сообщения и прикрепленные файлы.

В общем, как пример отправки HTML этот код получается слишком сложным, а как пример multipart сообщения - наоборот, недостаточно информативным (требуется, как минимум, описание Content-id)
PM MAIL   Вверх
NNaarreekk
Дата 6.2.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

Репутация: 0
Всего: 3



GeneralElectric, спасибо за комментарии!
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1061 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.