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

Наверняка Вам приходилось отправлять почту из 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=»имя файла картинки с расширение» />

 

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