Скрипт должен с помощью fsockopen() соединиться с сервером smtp.gmail.com, затем пройти авторизацию и отправить письмо на несколько ящиков. Все идет нормально до того момента когда подается запрос на авторизацию, начиная с этого момента smtp сервер возвращает пустые ответы на все запросы к нему, и письма не отправляются (ни каких ошибок не выскакивает): Вот скрипт:
| Код | $server = 'smtp.gmail.com'; $port = 587; $user = 'username@gmail.com'; $password = 'password'; //Подключаемся к серверу smtp (если все нормально то в ответе первые три символа будут 220) echo "<br><br><b>Подключение к серверу $server порт $port:</b> "; if ($mail_handle = fsockopen($server, $port, $errno, $errstr, 20)) { echo fgets($mail_handle, 1024); } else { echo "Произошла ошибка!<br><b>$errno: $errstr</b>"; } //Приветствуем сервер (если все нормально то в ответе первые три символа будут 250) echo "<br><br><b>Приветствуем сервер $server:</b> "; fwrite($mail_handle, "EHLO gmail.com \r\n"); echo get_data($mail_handle); //Подаем запрос STARTTLS (если все нормально то в ответе первые три символа будут 220) echo "<br><br><b>Подаем запрос STARTTLS на $server:</b> "; fwrite($mail_handle, "STARTTLS\r\n"); echo fgets($mail_handle, 1024);
///////////////////НАЧИНАЯ С ЭТОГО МЕСТА SMTP СЕРВЕР ВОЗВРАЩАЕТ ПУСТЫЕ ОТВЕТЫ///////////////////////
//Запрос на авторизацию (если все нормально то в ответе первые три символа будут 334) echo "<br><br><b>Подаем запрос на авторизацию $server:</b> "; fwrite($mail_handle, "AUTH LOGIN\r\n"); echo fgets($mail_handle, 1024); //Вводим логин и пароль (если все нормально то в ответе первые три символа будут 334) echo "<br><b>Вводим логин $server:</b> "; fwrite($mail_handle, base64_encode($user) . "\r\n"); echo fgets($mail_handle, 1024); //Вводим логин и пароль (если все нормально то в ответе первые три символа будут 235) echo "<br><b>Вводим пароль $server:</b> "; fwrite($mail_handle, base64_encode($password) . "\r\n"); echo fgets($mail_handle, 1024); //Сообщаем автора нашего письма, т.е. наш e-mail (если все нормально то в ответе первые три символа будут 250) echo "<br><br><b>Сообщаем автора нашего письма, т.е. наш e-mail $server:</b> "; fwrite($mail_handle, "MAIL FROM: <username@gmail.com>\r\n"); echo fgets($mail_handle, 1024);
//Сообщаем куда мы хотим отправить письмо (если все нормально то в ответе первые три символа будут 250) echo "<br><b>Сообщаем куда мы хотим отправить письмо $server:</b>"; fwrite($mail_handle, "RCPT TO: <username1@mail.ru>\r\n"); echo "<br>RCPT TO: <username1@mail.ru>: " . fgets($mail_handle, 1024); fwrite($mail_handle, "RCPT TO: <username2@yandex.ru>\r\n"); echo "<br>RCPT TO: <dima-f1-for-reg@yandex.ru>: " . fgets($mail_handle, 1024); fwrite($mail_handle, "RCPT TO: <username3@gmail.com>\r\n"); echo "<br>RCPT TO: <admin@dima-f1-learn.16mb.com>: " . fgets($mail_handle, 1024); //Сообщаем о начале составления тела письма (если все нормально то в ответе первые три символа будут 354) echo "<br><b>Сообщаем о начале составления тела письма $server:</b> "; fwrite($mail_handle, "DATA\r\n"); echo fgets($mail_handle, 1024); //Отправляем письмо (если все нормально то в ответе первые три символа будут 250) echo "<br><b>Отправляем письмо $server:</b> "; $header="Subject: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode('Проверка')))."?=\r\n"; $message = "Проверка"; fwrite($mail_handle, $header . "\r\n" . $message . "\r\n.\r\n"); echo fgets($mail_handle, 1024); //Заканчиваем работу с сервером (если все нормально то в ответе первые три символа будут 221) echo "<br><b>Заканчиваем работу с сервером $server:</b> "; fwrite($mail_handle, "QUIT\r\n"); echo fgets($mail_handle, 1024); fclose($mail_handle);
|
Результат работы скрипта:
| Код | Подключение к серверу smtp.gmail.com порт 587: 220 mx.google.com ESMTP a3sm345585bkd.11 Приветствуем сервер smtp.gmail.com: 250-mx.google.com at your service, [95.134.24.223] 250-SIZE 35882577 250-8BITMIME 250- STARTTLS 250 ENHANCEDSTATUSCODES Подаем запрос STARTTLS на smtp.gmail.com: 220 2.0.0 Ready to start TLS Подаем запрос на авторизацию smtp.gmail.com: Вводим логин smtp.gmail.com: Вводим пароль smtp.gmail.com: Сообщаем автора нашего письма, т.е. наш e-mail smtp.gmail.com: Сообщаем куда мы хотим отправить письмо smtp.gmail.com: RCPT TO: : RCPT TO: : RCPT TO: : Сообщаем о начале составления тела письма smtp.gmail.com: Отправляем письмо smtp.gmail.com: Заканчиваем работу с сервером smtp.gmail.com:
|
С smtp.mail.ru и с smtp.yandex.ru этот скрипт работает нормально, все письма нормально отправляются и доходят до адресатов (только там подключаюсь через 25 порт и не посылаю серверу запрос STARTTLS).
Кто шарит в чем проблема подскажите. |