Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отправка писем с ящика gmail.com, используя fsockopen() 
:(
    Опции темы
dimaf1
Дата 8.9.2011, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 12.3.2009

Репутация: нет
Всего: нет



       Скрипт должен с помощью fsockopen() соединиться с сервером smtp.gmail.com, затем пройти авторизацию и отправить письмо на несколько ящиков. Все идет нормально до того момента когда подается запрос на авторизацию, начиная с этого момента smtp сервер возвращает пустые ответы на все запросы к нему, и письма не отправляются (ни каких ошибок не выскакивает):
        Вот скрипт:    
Код

    $server = 'smtp.gmail.com';
    $port = 587;
    $user = '[email protected]';
    $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: <[email protected]>\r\n");
    echo fgets($mail_handle, 1024);

    //Сообщаем куда мы хотим отправить письмо (если все нормально то в ответе первые три символа будут 250)
    echo "<br><b>Сообщаем куда мы хотим отправить письмо $server:</b>";
    fwrite($mail_handle, "RCPT TO: <[email protected]>\r\n");
    echo "<br>RCPT TO: <[email protected]>: " . fgets($mail_handle, 1024);    
    fwrite($mail_handle, "RCPT TO: <[email protected]>\r\n");
    echo "<br>RCPT TO: <[email protected]>: " . fgets($mail_handle, 1024);    
    fwrite($mail_handle, "RCPT TO: <[email protected]>\r\n");
    echo "<br>RCPT TO: <[email protected]>: " . 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).

            Кто шарит в чем проблема подскажите.

Это сообщение отредактировал(а) dimaf1 - 8.9.2011, 14:38
PM MAIL   Вверх
Absinthe
Дата 8.9.2011, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: нет
Всего: 11



Все просто: сравни с тем, что посылает почтовый клиент.
Но задача твоя мне не понятно: почему тебя не устраивает PhpMailer?
PM MAIL   Вверх
dimaf1
Дата 10.9.2011, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 12.3.2009

Репутация: нет
Всего: нет



Цитата(Absinthe @ 8.9.2011,  18:11)
Все просто: сравни с тем, что посылает почтовый клиент.
Но задача твоя мне не понятно: почему тебя не устраивает PhpMailer?

У меня в PhpMailer, тоже не получается отправить письмо с gmail.com

Это сообщение отредактировал(а) dimaf1 - 10.9.2011, 09:32
PM MAIL   Вверх
Absinthe
Дата 10.9.2011, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: нет
Всего: 11



Код

        $mail->IsSMTP();
        $mail->SMTPAuth   = true;
        $mail->SMTPSecure = "ssl";
        $mail->Host       = "smtp.gmail.com";
        $mail->Port       = 465;
        $mail->Username   = $config['from'];
        $mail->Password   = $config['password'];

PM MAIL   Вверх
dimaf1
Дата 10.9.2011, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 12.3.2009

Репутация: нет
Всего: нет



Цитата(Absinthe @ 10.9.2011,  11:00)
Код

        $mail->IsSMTP();
        $mail->SMTPAuth   = true;
        $mail->SMTPSecure = "ssl";
        $mail->Host       = "smtp.gmail.com";
        $mail->Port       = 465;
        $mail->Username   = $config['from'];
        $mail->Password   = $config['password'];

Все это я уже пробовал.

В этом варианте:
Код

    $mail->IsSMTP();
    $mail->Host = smtp.gmail.com;
    $mail->SMTPDebug = 2;
    $mail->SMTPAuth = TRUE;
    $mail->SMTPSecure = 'ssl';
    $mail->Port = 465;
    $mail->Username = $user;
    $mail->Password = $password;
    $mail->SetFrom($from_address, $from_name);
    $mail->AddAddress($to_address, $to_name);
    $mail->Subject = "The message from php script with PHPMailer (MAIL())";
    $mail->Body = $body;

На локальном хосте и на бесплатном хостинге www.ayola.net возвращает ошибку:
Код

SMTP -> ERROR: Failed to connect to server: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? (105663936) 
SMTP Error: Could not connect to SMTP host.


А в этом случае:
Код

    $mail->IsSMTP();
    $mail->Host = smtp.gmail.com;
    $mail->SMTPDebug = 2;
    $mail->SMTPAuth = TRUE;
    $mail->SMTPSecure = 'tls';
    $mail->Port = 587;
    $mail->Username = $user;
    $mail->Password = $password;
    $mail->SetFrom($from_address, $from_name);
    $mail->AddAddress($to_address, $to_name);
    $mail->Subject = "The message from php script with PHPMailer (MAIL())";
    $mail->Body = $body;

На локальном хосте возвращает ошибку:
Код

SMTP -> FROM SERVER:220 mx.google.com ESMTP g1sm4165433fad.24 
SMTP -> FROM SERVER: 250-mx.google.com at your service, [95.134.129.190] 250-SIZE 35882577 250-8BITMIME 250-STARTTLS 250 ENHANCEDSTATUSCODES 
SMTP -> FROM SERVER:220 2.0.0 Ready to start TLS 

Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in Z:\home\PHPMailer\www\class.smtp.php on line 197

А на хостинге www.ayola.net возвращает ошибку:
Код

SMTP -> ERROR: Failed to connect to server: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? (105663936) 
SMTP Error: Could not connect to SMTP host.


На локальном хосте в php.ini extension=php_openssl.dll разрешен, на www.ayola.net - незнаю.
PM MAIL   Вверх
Absinthe
Дата 10.9.2011, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: нет
Всего: 11



Ну а в чем тогда прикол задавать левый вопрос, когда сам прекрасно знаешь причину?

Подскажу:
Цитата

На локальном хосте и на бесплатном хостинге www.ayola.net возвращает ошибку:
Код

  SMTP -> ERROR: Failed to connect to server: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? (105663936) 
SMTP Error: Could not connect to SMTP host.



phpinfo(), http://www.php.net/manual/en/openssl.installation.php
Что касается хостинга - требуй поддержки от админа(сомневаюсь, что на бесплатном хостинге такое есть).

Это сообщение отредактировал(а) Absinthe - 10.9.2011, 13:12
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.