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

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

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

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

Дополнительные заголовки письма могут использоваться для указания кодировки письма, адреса отправителя, обратного адреса и множества других опций.
[cce lang=»php»] mail(«nobody@example.com», «Тема письма», «Сообщение», «From: webmaster@example.com»);
[/cce]

Но вместо сообщения у получателя скорее всего отобразятся иероглифы =(

Дело в том, что для начала нужно указать в дополнительных параметрах кодировку сообщения.
Немного изменим наш код отправки.
[cce lang=»php»] $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);
[/cce]

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

Изменим наш код с учётом этого:
[cce lang=»php»] 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);
[/cce]

Теперь всё должно отобразиться корректно.

Теперь про mail_mime.
Для начала, скачайте последнюю версию и распакуйте к себе на сайт в папку Mail.
Далее привожу пример использования:
[cce lang=»php»] 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);
[/cce]

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

 

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