Отправка e-mail в русской кодировке средствами PHP. Статьи. wb0.ru - Все для веб-мастера, on-line сервисы

Отправка e-mail в русской кодировке средствами PHP

Стандартная функция отправки почты в PHP не заботится о кодировке письма, а специальные классы отправки писем могут показаться слишком тяжеловесным решением. В настоящей статье приведена простая функция, которая позволяет отправлять MIME-совместимые письма на русском языке.

Тело письма может быть текстом в любой кодировке. Немного сложнее дело обстоит с составляющими заголовка письма (Subject, From, To), они по стандарту должны быть в US-ASCII. Использование в заголовках кодированного текста регламентируется стандартом RFC-2047. Стандарт задает две возможные формы кодирования - BASE64 и Quoted-Printable. BASE64 более универсальна и работает в том числе для кодировки UTF-8, поэтому мы выбрали именно эту форму. MIME-совместимый почтовый клиент обязан уметь читать обе формы.

Далее код функции, который достаточно схематичен:

  1. <?php
  2.  
  3. function send_mime_mail($name_from, // имя отправителя
  4.                         $email_from, // email отправителя
  5.                         $name_to, // имя получателя
  6.                         $email_to, // email получателя
  7.                         $data_charset, // кодировка переданных данных
  8.                         $send_charset, // кодировка письма
  9.                         $subject, // тема письма
  10.                         $body // текст письма
  11.                         ) {
  12.   $to = $email_to;
  13.   $subject = mime_header_encode($subject, $data_charset, $send_charset);
  14.   $from =  mime_header_encode($name_from, $data_charset, $send_charset) .' <' . $email_from . '>';
  15.   if($data_charset != $send_charset) {
  16.     $body = iconv($data_charset, $send_charset, $body);
  17.   }
  18.   $headers .= "Content-type: text/plain; charset=$send_charset\r\n";
  19.   $headers = "From: $from\r\n";
  20.   $headers.="Mime-Version: 1.0\r\n";
  21.  
  22.   return mail($to, $subject, $body, $headers);
  23. }
  24.  
  25. function mime_header_encode($str, $data_charset, $send_charset) {
  26.   if($data_charset != $send_charset) {
  27.     $str = iconv($data_charset, $send_charset, $str);
  28.   }
  29.   return '=?' . $send_charset . '?B?' . base64_encode($str) . '?=';
  30. }
  31.  
  32. ?>

Мы определили собственную функцию mime_header_encode() для преобразования каждого заголовка в MIME-совместимый формат, несмотря на то, что в PHP предусмотрена аналогичная функция mb_encode_mimeheader(). От встроенной функции нам пришлось отказаться, так как на нашем сервере (PHP 5.1.6) она работает некорректно (возвращает неверный результат).

Использование описанной функции достаточно простое (см. пример ниже). В случае, если кодировка отправки письма отличается от текущей кодировки данных, используется iconv() для преобразования кодировки.

  1. <?php
  2. send_mime_mail('Автор письма',
  3.                'sender@site.ru',
  4.                'Получатель письма',
  5.                'recepient@site.ru',
  6.                'CP1251',  // кодировка, в которой находятся передаваемые строки
  7.                'KOI8-R', // кодировка, в которой будет отправлено письмо
  8.                'Письмо-уведомление',
  9.                "Здравствуйте, я Ваша программа!");
  10. ?>

Дата публикации: 09.04.2011
internet-technologies.ru

   Ваш псевдоним:
Ваш комментарий:

Календарь событий


Новости Интернет


Поиск





Последний пересчет

тИЦ:07 Окт 15
PR:09 Дек 13

Наши партнеры

wservices.ru - регистрация доменов, Whois-сервисы Смайлы на все случаи жизни


 
Copyright © 2006-2024, wb0.ru