Несмотря на то, что в php есть готовая функция отправки почты mail(), скрипт отправки почты SMTP обладает большими возможностями. Чаще всего, почту через SMTP отправляют для того, чтобы обойти фильтры антиспама — многие из них приучены считать письма, отправленные напрямую из PHP, подозрительными.

С помощью скрипта отправки почты через SMTP, можно полностью замаскировать письмо, как будто оно не было отправлено почтовой программой.

Как написать скрипт отправки почты через SMTP

Создание функции для работы с открытым SMTP-соединением

<?
function get_data($smtp_conn)
{
$data="";
while($str = fgets($smtp_conn,515))
{
$data .= $str;
if(substr($str,3,1) == " ") { break; }
}
return $data;
}
?>

Создание письма

<?
$header.="X-Mailer: The Bat! (v3.99.3) Professional\r\n"; 
$header.="Reply-To: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode('sender')))."?= <sender@domain.com>\r\n";

Замените windows-1251 на кодировку, которую вы используете; sender – на имя отправителя, а sender@domain.com – на e-mail, с которого вы собираетесь отправлять письмо.

$header.="X-Priority: 3 (Normal)\r\n";
$header.="Message-ID: <172562218.".date("YmjHis")."@domain.com>\r\n";

Замените @domain.com на домен, на котором расположена ваша почта.

$header.="To: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode('recipient')))."?= <recipient@domain.ru>\r\n";

Замените windows-1251 на кодировку, которую вы используете; recipient на имя получателя письма, а recipient@domain.com – на его e-mail.

$header.="Subject: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode('check')))."?=\r\n";
 $header.="MIME-Version: 1.0\r\n";
 $header.="Content-Type: text/plain; charset=windows-1251\r\n";
 $header.="Content-Transfer-Encoding: 8bit\r\n";
 ?>

Замените check на тему письма.

$text="привет, проверка связи.";

Замените  привет, проверка связи на текст вашего письма.

Отправка письма

<?
$smtp_conn = fsockopen("smtp.mail.ru", 25,$errno, $errstr, 10);
$data = get_data($smtp_conn);
//$code = substr($data,0,3);
//echo ($code);
fputs($smtp_conn,"EHLO vasya\r\n");

Если есть желание – замените vasya на имя своего ПК. Но можно и не заменять, эта информация – только для самого сервера.

$data = get_data($smtp_conn);
//$code = substr($data,0,3);
//echo ($code);
fputs($smtp_conn,"AUTH LOGIN\r\n");
$data = get_data($smtp_conn);
//$code = substr($data,0,3);
//echo ($code);
fputs($smtp_conn,base64_encode("login")."\r\n");

Замените login на ваш логин на почтовом сервере

$data = get_data($smtp_conn);
//$code = substr($data,0,3);
//echo ($code);
fputs($smtp_conn,base64_encode("password")."\r\n");

Замените password на ваш пароль на почтовом сервере.

$data = get_data($smtp_conn);
//$code = substr($data,0,3);
//echo ($code);
$size_msg=strlen($header."\r\n".$text);
fputs($smtp_conn,"MAIL FROM:<sender@domain.com> SIZE=".$size_msg."\r\n");

Замените sender@domain.com на почтовый адрес, с которого будет отправлено письмо.

$data = get_data($smtp_conn);
//$code = substr($data,0,3);
//echo ($code);
fputs($smtp_conn,"RCPT TO:<recipient@domain.com>\r\n");

Замените recipient@domain.com на почтовый адрес получателя.

$data = get_data($smtp_conn);
//$code = substr($data,0,3);
//echo ($code);
fputs($smtp_conn,"DATA\r\n");
$data = get_data($smtp_conn);
//$code = substr($data,0,3);
//echo ($code);
fputs($smtp_conn,$header."\r\n".$text."\r\n.\r\n");
$data = get_data($smtp_conn);
//$code = substr($data,0,3);
//echo ($code);
fputs($smtp_conn,"QUIT\r\n");
$data = get_data($smtp_conn);
//$code = substr($data,0,3);
//echo ($code);
?>

Этот скрипт можно использовать для отправки почты через SMTP с любого хостинга или сервера.