11.09.2013

Отправляем почту из php

Вот тоже сюда положу, чтоб не искать потом. 

Будет использоваться библиотека Pear, у кого не установлена, тому сюда:

Цель:

Отправить письмо пользователю с русским заголовком и русским html текстом.
Сообщение должно проходить от авторизованного пользователя.

Реализация:

// Подключаем библиотеку
include('Mail.php'); 
include('Mail/mime.php'); 

// Задаем начальные значения
$html = '<html><body>Пишем по-русски!</body></html>'; 
$crlf = "\r\n"; 
// Отправитель и заголовок письма
$hdrs = array( 
              'From' => 'ivanov.i@domain.ru', 
              'Subject' => 'Автоматическое сообщение' 
              ); 
// Правильные параметры, что бы писать по-русски
$params = array( 
             'text_encoding' => '8bit', 
             "head_charset" => "windows-1251", 
             "text_charset" => "windows-1251", 
             "html_charset" => "windows-1251", 
              ); 
// Проводим инициализацию
$mime = new Mail_mime($crlf); 
$mime->setHTMLBody($html); 
$body = $mime->get($params); 
$hdrs = $mime->headers($hdrs); 
$mail =& Mail::factory('mail'); 

// А теперь хитрость
// Сообщение будем отправлять по smtp с авторизацией
// Иначе получатель в отправителях увидит не "Иванов И.И.", а ivanov.i.domain.ru
// Да что там получатель, анти-спам фильтр может обидится
$host = "mail.domain.ru"; 
$port = 25; 
$username = "domain\ivanov"; 
$password = "password"; 
$smtp = Mail::factory("smtp",
        array(
              "host" => $host, 
              "port" => $port, 
              "auth" => true, 
              "username" => $username, 
              "password" => $password)); 

// Адрес получателя
$to_email = "petrov.p@domain.ru"; 

// Отправляем письмо
$mail = $smtp->send($to_email, $hdrs, $body);