Отправка писем через SMTP протокол

В редакторе

Отправка писем через SMTP протокол

Brain_Script
768
2019-07-12 10:36:20
// имя пользователя $smtp_username = 'username@yandex.ru'; // пароль $smtp_password = 'password'; // адрес smtp сервера $smtp_host = 'ssl://smtp.yandex.ru'; // порт для обращения к smtp серверу $smtp_port = 465; // тема письма $subject = "Тема письма"; // текст письма $message = "Текст письма"; // e-mail получателя письма $mailTo = "zhenikipatov@yandex.ru"; // заголовок письма $headers = "MIME-Version: 1.0\r\n"; // кодировка письма $headers .= "Content-type: text/html; " . "charset=utf-8\r\n"; // от кого письмо $headers .= "From: Evgeniy <admin@vk-book.ru>\r\n"; // тело письма $contentMail = "Date: " . date("D, d M Y H:i:s") . " UT\r\n"; $contentMail .= 'Subject: =?UTF-8?B?' . base64_encode($subject) . "=?=\r\n"; $contentMail .= $headers . "\r\n"; $contentMail .= $message . "\r\n"; // соединение с почтовым сервером через сокет if(!$socket = @fsockopen( $smtp_host, $smtp_port, $errorNumber, $errorDescription, 30) ){ // если произошла ошибка die($errorNumber.".".$errorDescription); } // проверяем ответ сервера, если код 220 // значит все прошло успешно if (!parseSocketAnswer($socket, "220")){ die('Ошибка соединения'); } // представляемся почтовому серверу, // передаем ему адрес своего хоста $server_name = $_SERVER["SERVER_NAME"]; fputs($socket, "HELO $server_name\r\n"); // проверяем ответ сервера, если код 250 // значит все прошло успешно if (!parseSocketAnswer($socket, "250")){ fclose($socket); die('Ошибка при приветствии'); } // начинаем авторизацию на почтовом сервере fputs($socket, "AUTH LOGIN\r\n"); // проверяем ответ сервера, если код 334 // значит все прошло успешно if (!parseSocketAnswer($socket, "334")){ fclose($socket); die('Ошибка авторизации'); } // отправляем почтовому серверу логин, // через который будем авторизовываться fputs($socket, base64_encode($smtp_username)."\r\n"); // проверяем ответ сервера, если код 334 // значит все прошло успешно if (!parseSocketAnswer($socket, "334")){ fclose($socket); die('Ошибка авторизации'); } // отправляем почтовому серверу пароль fputs($socket, base64_encode($smtp_password)."\r\n"); // проверяем ответ сервера, если код 235 // значит все прошло успешно if (!parseSocketAnswer($socket, "235")){ fclose($socket); die('Ошибка авторизации'); } // сообщаем почтовому серверу e-mail отправителя fputs($socket, "MAIL FROM: <".$smtp_username.">\r\n"); // проверяем ответ сервера, если код 250 // значит все прошло успешно if (!parseSocketAnswer($socket, "250")){ fclose($socket); die('Ошибка установки отправителя'); } // сообщаем почтовому серверу e-mail получателя fputs($socket, "RCPT TO: <" . $mailTo . ">\r\n"); // проверяем ответ сервера, если код 250 // значит все прошло успешно if (!parseSocketAnswer($socket, "250")){ fclose($socket); die('Ошибка установки получателя'); } // сообщаем почтовому серверу, // что сейчас начнем передавать данные письма fputs($socket, "DATA\r\n"); // проверяем ответ сервера, если код 354 // значит все прошло успешно if (!parseSocketAnswer($socket, "354")){ fclose($socket); die('Ошибка при передачи данных письма'); } // передаем почтовому серверу данные письма fputs($socket, $contentMail."\r\n.\r\n"); // проверяем ответ сервера, если код 250 // значит все прошло успешно if (!parseSocketAnswer($socket, "250")){ fclose($socket); die("Ошибка при передачи данных письма"); } // сообщаем почтовому серверу, // что закрываем соединение fputs($socket, "QUIT\r\n"); // закрываем соединение fclose($socket); // результат отправки echo "Письмо успешно отправлено"; // функция, которая будет анализировать ответ // почтового сервера // Ищет в ответе сервера необходимый код function parseSocketAnswer($socket, $response) { while (@substr($responseServer, 3, 1) != ' ') { if (!($responseServer = fgets($socket, 256))){ return false; } } if (!(substr($responseServer, 0, 3) == $response)) { return false; } return true; }
Войдите для добавления комментария.
Нет комментариев
Яндекс.Метрика Яндекс.Метрика