Приветствую!

Наверняка Вам приходилось отправлять почту из php? И наверняка зачастую хотелось присобачить какие-нить файлы, показать картинку?
Окей. Сейчас расскажу немножко про отправку почты и один интерессный класс — mail_mime.

Первая часть — обычное письмо.

Самый простой способ отправить письмо при помощи PHP — воспользоваться стандартной функцией mail().
Она имеет следующий синтаксис:
mail(email, тема, сообщение, дополнительные заголовки, дополнительные параметры)
вернет true, если письмо было принято к доставке (не означает что доставлено).

Дополнительные заголовки письма могут использоваться для указания кодировки письма, адреса отправителя, обратного адреса и множества других опций.

mail("nobody@example.com", "Тема письма", "Сообщение", "From: webmaster@example.com");
Но вместо сообщения у получателя скорее всего отобразятся иероглифы.

Дело в том, что для начала нужно указать в дополнительных параметрах кодировку сообщения.
Немного изменим наш код отправки:

$params=array(
   "From: webmaster@example.com",
   "Content-type:plain/text;charset=utf-8" //-- Задаём тип письма и кодировку. PHP файл должен быть сохранён в этой же кодировке
);
$to="nobody@example.com";
$subject="Тема письма";
$message="Сообщение";
$params=implode("\r\n",$params); //-- Объединяем параметры в строку. Разделитель \r\n обязателен.
mail($to, $subject, $message, $params);
Теперь текст сообщения должен отобразиться нормально. НО тема письма всё равно останется в кракозябрах =(

Дело в том, что тема письма должна быть записана следующим образом:
=?<кодировка>?B?<текст в base64>?=

Изменим наш код с учётом этого:

function header_encode($str, $data_charset, $send_charset)
{
   if($data_charset != $send_charset) {
     $str=iconv($data_charset,$send_charset.'//IGNORE',$str); //-- при необходимости изменим кодировку самого текста
   }
   
   return ('=?'.$send_charset.'?B?'.base64_encode($str).'?=');
}

$params=array(
   "From: webmaster@example.com", 
   "Content-type:text/plain;charset=utf-8" //-- Задаём тип письма и кодировку. PHP файл должен быть сохранён в этой же кодировке
);
$to="nobody@example.com";
$subject=header_encode("Тема письма", "UTF-8", "UTF-8");
$message="Сообщение";
$params=implode("\r\n",$params); //-- Объединяем параметры в строку. Разделитель \r\n обязателен.
mail($to, $subject, $message, $params);
Теперь всё должно отобразиться корректно.

Теперь про mail_mime.

Для начала, скачайте последнюю версию и распакуйте к себе на сайт в папку Mail.
Далее привожу пример использования:

include 'Mail.php';
include 'Mail/mime.php';

$text ='Text version of email';
$html = '<html><body>HTML version of email</body></html>';
$file = 'myimg.jpg';
$crlf = "\n";
$hdrs = array(
'From' => 'you@yourdomain.com',
'Subject' => 'Test mime message'
);

$mime = new Mail_mime(array('eol'=>$crlf));

$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$mime->addAttachment($file, 'text/plain');

$body = $mime->get();
$hdrs = $mime->headers($hdrs);

$mail =&Mail::factory('mail');
$mail->send('postmaster@localhost', $hdrs, $body);




Что бы теперь отобразить саму картинку в html версии письма, достаточно прописать: <img alt=»» src=»имя файла картинки с расширение» />

На этом пока что всё. Надеюсь будет полезно.