Отправка письма по протоколу SMTP с авторизацией

<?php 
/*
* Отправка письма по протоколу SMTP с авторизацией
* автор: nc_soft
* 07.02.08
*/

//имя пользователя
$smtp_username = 'user@mail.ru'; 
//порт
$smtp_port = '25'; 
//smtp сервер
$smtp_host = 'smtp.mail.ru';
//пароль
$smtp_password = '**********'; 
//кодировка сообщений
$smtp_charset = 'utf-8';
//От кого
$smtp_from = 'от сайта snippets.pp.ru'; 
//тема
$subject = 'тема сообщения';
//куда шлем
$mail_to='user@mail.ru';


//открываем сокет
$socket=fsockopen($smtp_host, $smtp_port);
//так будем читать ответ после каждой посылки команды
echo fgets($socket);

//посылаем EHLO
fputs($socket, "EHLO $smtp_host\r\n");
echo fgets($socket);
echo fgets($socket);
echo fgets($socket);
echo fgets($socket);
echo fgets($socket);

//запрашиваем авторизацию
fputs($socket, "AUTH LOGIN\r\n");
echo fgets($socket);

//логин
fputs($socket, base64_encode($smtp_username) . "\r\n");
echo fgets($socket);

//пароль
fputs($socket, base64_encode($smtp_password) . "\r\n");
echo fgets($socket);

//от кого письмо
fputs($socket, "MAIL FROM: <$smtp_username>\r\n");
echo fgets($socket);

//получатель
fputs($socket, "RCPT TO: <$mail_to>\r\n");
echo fgets($socket);

//команда DATA говорит серверу что сейчас начнем передавать письмо
fputs($socket, "DATA\r\n");
echo fgets($socket);

//формируем письмо
$msg='';
//заголовок указывает куда отвечать на письмо
$msg .= "Reply-To: $smtp_username\r\n"; 
//версия mime
$msg .= "MIME-Version: 1.0\r\n";
//mime тип и кодировка 
$msg .= "Content-Type: text/plain; charset=\"$smtp_charset\"\r\n"; 
//следует указать 8бит для русских символов
$msg .= "Content-Transfer-Encoding: 8bit\r\n";
//поле от кого (можно вставить левые данные) 
$msg .= "From: \"$smtp_from\" <$smtp_username>\r\n";
//поле кому (тоже можно указать что угодно) 
$msg .= "To: $mail_to <$mail_to>\r\n"; 
//тема сообшения (закодирована в base64 чтобы нормально отображалась)
$msg .= "Subject: =?UTF-8?B?" . base64_encode($subject) . "?=\r\n";
//приоритет
$msg .= "X-Priority: 3\r\n\r\n"; 

//сообщение
$msg .= "это тестовое сообщение\r\n";

//отправляем письмо (обратите внимание на \r\n.\r\n
fputs($socket, $msg."\r\n.\r\n");
echo fgets($socket);

/*письмо отправлено, лог ответов сервера выглядит так
220 mail.ru ESMTP Thu, 07 Feb 2008 03:32:20 +0300
250-mx34.mail.ru Hello smtp.mail.ru [217.8.236.128]
250-SIZE 31457280
250-8BITMIME
250-AUTH PLAIN LOGIN
250 PIPELINING
334 VXNlcm5hbWU6
334 UGFzc3dvcmQ6
235 Authentication succeeded
250 OK
250 Accepted
354 Enter message, ending with "." on a line by itself
250 OK id=1JMuge-0006sO-00
*/

?>