Пользователи онлайн
Боты: Google Bot

Гости: 2

Всего: 3


Подписаться на RSS

SMTP отправка писем своими руками

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

Пропустим описание протокола SMTP, сразу приступим к практике. Рассматривать будем пример именно с аутентификацией на сервере почты. Для примера специально создал ящик на яндексе, чтобы Вы сами могли попробовать и посмотреть результат или же создайте свой ящик и пробуйте, пробуйте, пробуйте...

Для всёго этого дела нам понадобятся функции для работы с сокетами (хмммм хотя и сокеты могут быть отключены у хостера, но тут уж ничего не поделаешь, придется менять хостера).

Для работы нам понадобится 4 функции: socket_create - создание сокета; socket_connect - соединение с сервером; socket_write - запись в поток данных;socket_close - закрытие сокета. Можно еще использовать пятую функцию socket_read для логирования ответов сервера, но это нам сейчас не нужно.


<?
// Функция для отправки запроса серверу
function smtpCommand($socket, $msg) {
socket_write($socket, $msg."\r\n", strlen($msg."\r\n"));
}

$server = "smtp.yandex.ru";
$port = 25;
$login = "script.php";
$pass = "123qwe";
$from = "script.php@yandex.ru";
$to = "script.php@yandex.ru";
$subject = "Тема письма";
$message = "Текст письма";

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($socket, $server, $port);
if ($result === false)
die("Невозможно соединиться с {$server}:{$port}");

smtpCommand($socket, "EHLO ".$server); // Посылаем на сервер, что будет аутентификация по логину и паролю
smtpCommand($socket, "AUTH LOGIN"); // передаем команду ввода логина и пароля
smtpCommand($socket, base64_encode($login)); // логин, надо кодировать в BASE64
smtpCommand($socket, base64_encode($pass)); // пароль, надо кодировать в BASE64

smtpCommand($socket, "MAIL FROM: <{$from}>"); // указываем значение поля "От кого"
smtpCommand($socket, "RCPT TO: <{$to}>"); // указываем значение поля "Кому"

smtpCommand($socket, "DATA"); // говорим серверу, что будет сообщение письма
smtpCommand($socket, "Subject: {$subject}\r\nTo: {$to}\r\n{$message}\r\n."); // добавляем тело письма

smtpCommand($socket, "QUIT"); // Собственно отправляем письмо и выходим

socket_close($socket);
?>

В принципе все строки прокомментированы, если есть вопросы, то задавайте.

Добавить комментарий
Чтобы оставить комментарий, Вам необходимо зарегистрироваться или авторизироваться