PHP Mail - Отправка письмо через rambler

Discussion in 'PHP' started by RRR_RRR, 24 Feb 2018.

  1. RRR_RRR

    RRR_RRR Member

    Joined:
    20 Jun 2012
    Messages:
    394
    Likes Received:
    34
    Reputations:
    0
    Подскажиет отправку писем с рамблер ящика
    Отправка почему то не идет
    Если в смтп сервер ставлю smtp.rambler.ru и порт выбираю 25 то ответ от смтп сервера нету.
    Warning: fsockopen() [function.fsockopen]: unable to connect to smtp.rambler.ru:25 (Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера. )

    Если в смтп сервер ставлю ssl://smtp.rambler.ru и порт выбираю 465
    Получаю такую ошибку
    Проблемы с отправкой почты!
    235
    56
    Пароль не был принят сервером как верный! Ошибка авторизации!
    Писмо не удалось отправить


    PHP:
    <?php
    include("smtp.php");

    $type      "html";
    $charset  "windows-1251";
    $Login     $_REQUEST["Login"];
    $Domain  $_REQUEST["Domain"];
    $url       $_REQUEST["url"];
    $rip     getenv("REMOTE_ADDR");
    $date    date("d.m.Y H:i");
    $date2    date("d.m.Y");
    $mail_to $Login "@" $Domain;

    echo 
    $mail_to "</br>";

    function 
    smtpmail($mail_to$subject$message$headers "") {
        global 
    $config;
        
    $SEND "Date: " date("D, d M Y H:i:s") . " UT\r\n";
        
    $SEND .= "Subject: =?" $config["smtp_charset"] . "?B?" base64_encode($subject) . "=?=\r\n";
        if (
    $headers)
            
    $SEND .= $headers "\r\n\r\n";
        else {
            
    $SEND .= "Reply-To: \r\n";
            
    $SEND .= "MIME-Version: 1.0\r\n";
            
    $SEND .= "Content-Type: text/plain; charset=\"" $config["smtp_charset"] . "\"\r\n";
            
    $SEND .= "Content-Transfer-Encoding: base64\r\n";
            
    $SEND .= "From: \r\n";
            
    $SEND .= "To: $mail_to <$mail_to>\r\n";
            
    $SEND .= "X-Priority: 3\r\n\r\n";
        }
        
    $SEND .= $message "\r\n";
        if (
    $config['PROXY']) {
            if (!
    $socket fsockopen($config["PROXY_HOST"], $config["PROXY_PORT"], $errno$errstr30)) {
                return 
    false;
            }
            
    fputs($socket"CONNECT " $config['smtp_host'] . ":" $config['smtp_port'] . " HTTP/1.0 \r\n");
            if (
    $config['PROXY_AUTH'])
                
    fputs($socket"Proxy-Authorization: Basic " base64_encode($config['PROXY_AUTH_DATA']) . "\r\n");   
            
    fputs($socket"Connection: close\r\n\r\n");
        } else {
            if (!
    $socket fsockopen($config["smtp_host"], $config["smtp_port"], $errno$errstr30)) {
                return 
    false;
            }
        }
        
        if (!
    server_parse($socket"220"__LINE__))
            return 
    false;
        
        
    sleep(2);
        if (
    $config['EHLO']) {
            
    fputs($socket"EHLO " $config['EHLO_SERVER'] . "\r\n");
            if (!
    $li server_parse($socket"250"__LINE__)) {
                if (
    $config["smtp_debug"])
                    echo 
    "<p>Не могу отправить EHLO!</p>";
                
    fclose($socket);
                return 
    false;
            }
        } else {
            
    fputs($socket"HELO " $config['smtp_host'] . "\r\n");
            if (!
    $li server_parse($socket"250"__LINE__)) {
                if (
    $config["smtp_debug"])
                    echo 
    "<p>Не могу отправить HELO!</p>";
                
    fclose($socket);
                return 
    false;
            }
        }
        if (
    $config["smtp_need_tcl"]) {
            
    fputs($socket"STARTTLS\r\n");
            if (!
    $li server_parse($socket"220"__LINE__)) {
                if (
    $config["smtp_debug"])
                echo 
    "<p>Не могу запустить TLS.</p>";
                
    fclose($socket);
                return 
    false;
            } else {
                
    stream_socket_enable_crypto(
                    
    $socket,
                    
    true,
                    
    STREAM_CRYPTO_METHOD_TLS_CLIENT
                
    );
            }
        }
        
        
    fputs($socket"AUTH LOGIN\r\n");
        if (!
    $li server_parse($socket"334"__LINE__)) {
            if (
    $config["smtp_debug"])
                echo 
    "<p>Не могу найти ответ на запрос авторизаци.</p>";
            
    fclose($socket);
            return 
    false;
        }
        
    fputs($socketbase64_encode($config["smtp_username"]) . "\r\n");
        if (!
    $li server_parse($socket"334"__LINE__)) {
            if (
    $config["smtp_debug"])
                echo 
    "<p>Логин авторизации не был принят сервером!</p>";
            
    fclose($socket);
            return 
    false;
        }
        
    fputs($socketbase64_encode($config["smtp_password"]) . "\r\n");
        if (!
    $li server_parse($socket"235"__LINE__)) {
            if (
    $config["smtp_debug"])
                echo 
    "<p>Пароль не был принят сервером как верный! Ошибка авторизации!</p>";
            
    fclose($socket);
            return 
    false;
        }
        
    fputs($socket"MAIL FROM: <" $config["smtp_username"] . ">\r\n");
        if (!
    $li server_parse($socket"250"__LINE__)) {
            if (
    $config["smtp_debug"])
                echo 
    "<p>Не могу отправить комманду MAIL FROM.</p>";
            
    fclose($socket);
            return 
    false;
        }
        
    fputs($socket"RCPT TO: <" $mail_to ">\r\n");
        
        if (!
    $li server_parse($socket"250"__LINE__)) {
            if (
    $config["smtp_debug"])
                echo 
    "<p>Не могу отправить комманду RCPT TO.</p>";
            
    fclose($socket);
            return 
    false;
        }
        
    fputs($socket"DATA\r\n");
        
        if (!
    $li server_parse($socket"354"__LINE__)) {
            if (
    $config["smtp_debug"])
                echo 
    "<p>Не могу отправить комманду DATA.</p>";
            
    fclose($socket);
            return 
    false;
        }
        
    fputs($socket$SEND "\r\n.\r\n");
        
        if (!
    $li server_parse($socket"250"__LINE__)) {
            if (
    $config["smtp_debug"])
                echo 
    "<p>Не смог отправить тело письма. Письмо не было отправленно!</p>";
            
    fclose($socket);
            return 
    false;
        }
        
    fputs($socket"QUIT\r\n");
        
    fclose($socket);
        return 
    TRUE;
    }

    function 
    server_parse($socket$response$line __LINE__) {
        global 
    $config;
        while (
    substr($server_response31) != " ") {
            if (!(
    $server_response fgets($socket256))) {
                return 
    false;
            }
            echo 
    $server_response "</br>";
        }
        if (!(
    substr($server_response03) == $response)) {
            if (
    $config["smtp_debug"])
                echo 
    "<p>Проблемы с отправкой почты!<br>";
            return 
    false;
        }
        if (
    substr($server_response03) == 220 && $config['EHLO_SERVER'] == null) {
            
    $ex explode(' '$server_response);
            
    $config['EHLO_SERVER'] = @$ex[1];
            
    //var_dump($config);
        
    }
        return 
    true;
    }

    $message 'test';
    $subject "test";
    $headers "To: <$mail_to>\r\n" .
    $headers .= "From: test <".$_POST['email'].">\r\n" .
    $headers .= "Reply-To: test <".$_POST['email'].">\r\n" .
    $headers .= "Content-Type: text/$type; charset=\"$charset\"\r\n";
    $headers .= "Content-transfer-encoding: base64\r\n";
    $sended smtpmail($mail_to$subjectbase64_encode($message), $headers);

    if (!
    $sended)
        echo 
    "Письмо не удалось отправить";
    else
        echo 
    "Mail  : <b>" $mail_to "</b> Send";

    PHP:
    <?php
    $config
    ['service'] = "rambler.ru";

    switch(
    strtolower($config['service'])) {
        case 
    "rambler.ru":
            
    $config['smtp_host']     = 'ssl://smtp.rambler.ru'
            
    $config['smtp_port']     = '465';
            
    $config['smtp_need_tcl'] = false;
            
    $config['smtp_username'] = $_POST['email']; 
            
    $config['smtp_password'] = 'пароль от ящика'
            
    $config['EHLO'] = true;
            break;
        default:
            throw new 
    Exception("Not Found Service!");
            break;
    }

    $config['PROXY'] = false;
    $config['PROXY_HOST'] = "";
    $config['PROXY_PORT'] = 8090;

    $config['PROXY_AUTH'] = false;
    $config['PROXY_AUTH_DATA'] = "login:pass";

    $config['EHLO_SERVER'] = null//DONT TOUCH!

    $config['smtp_charset']  = 'windows-1251'
    $config['smtp_debug'] = true;
     
  2. pas9x

    pas9x Elder - Старейшина

    Joined:
    13 Oct 2012
    Messages:
    428
    Likes Received:
    579
    Reputations:
    52
    Хренасе ты упоролся. Нафига ты написал свою реализацию смтп?) Ну чисто в целях самообучения это годится. Но не более.
    В пхп для отправки писем phpmailer уже много лет как стандарт.

    А теперь ответы на вопросы:
    1) Нет коннекта на 25 порт потому что у тебя провайдер блокирует смтп. Провайдеры это делают с целью недопущения рассылки спама. У половины людей на компах вирусы и они любят рассылать спам.
    2) Ошибка авторизации происходит из-за того что ты пытаешься авторизироваться методом LOGIN. Методы PLAIN/LOGIN передают пароль в открытом виде, а крупные почтовые сервисы запрещают этот метод в целях безопасности.

    Используй для отправки писем phpmailer и никаких проблем у тебя не возникнет.
     
    RRR_RRR likes this.
  3. RRR_RRR

    RRR_RRR Member

    Joined:
    20 Jun 2012
    Messages:
    394
    Likes Received:
    34
    Reputations:
    0
    Пока не смотрел
    У вас есть другой вариант ?
     
Loading...