2016-07-02 21 views
3
<?php 
set_time_limit(0); 
ignore_user_abort(true); 
ini_set('max_execution_time', 0); 


// 207.46.10.10:993 hotmail imap server 

$s = "\r\n"; 

$proxy = '13.89.36.103'; // proxy 
$port =53; 

$fp = fsockopen($proxy, $port); 
//socket_set_timeout($fp, 10, 0); 

fputs($fp, "CONNECT 207.46.10.10:993 HTTP/1.1".$s.$s); 
fputs($fp, "n1 login [email protected] userpassword".$s); 
fputs($fp, "n2 select Inbox".$s); 
fputs($fp, "n3 UID FETCH 100289 BODY[]".$s); 
fputs($fp, "n4 LOGOUT".$s.$s); 

while(!feof($fp)){ 
    $line = fgets($fp, 4000); 
    echo $line."\n"; 
} 
fclose($fp); 
?> 

Ist es möglich, eine Proxy-Verbindung zu verwenden, E-Mails von einem IMAP-Server mit PHPWie imap zu verwenden, um mit fsockopen hinter Proxy

es fein
ohne Proxy lesen arbeiten Sie, wenn jemand kann mir helfen, ich möchte nicht curl verwenden

+0

Sie müssen nach CONNECT eine neue SSL-Kommunikationsschicht starten. Führen Sie einen HTTP-Proxy auf Port 53 aus? – Max

+0

Sie scheinen auch den Proxy-Port zweimal angegeben zu haben. – Max

+0

@ Max dies ist nicht mein Proxy es ist nur öffentliche Proxy, können Sie mehr Details über SSL-Layer nach CONNECT geben, ich bin sicher, ich brauche es nicht, weil ich mit Proxy und nicht direkte Verbindung zu IMAP-Server –

Antwort

0

Der HTTP-Proxy stellt eine dumme Leitung nach der Verwendung des Verbs CONNECT. Da Sie eine Verbindung zu einem sicheren IMAP-Dienst herstellen, müssen Sie SSL/TLS aktivieren, nachdem die Verbindung hergestellt wurde.

Für einige suchen, es sieht aus wie Sie stream_socket_enable_crypto verwenden können, nachdem Sie eine 200 Antwort vom PROXY-Server erhalten. Es ist sehr wahrscheinlich, dass Sie die Antwort lesen müssen, bevor Sie stream_socket_enable_crypto verwenden. Andernfalls wird beim Lesen der unerwarteten Daten ein Fehler ausgegeben. diese

+0

Ich bin so nah an der Lösung weiß ich test stream_socket_enable_crypto, aber ich scheint nicht einfach danke für Ihre Hilfe, wenn ich etwas gefunden habe, was ich Ihnen sagen –

0
<?php 
set_time_limit(0); 
ignore_user_abort(true); 
ini_set('max_execution_time', 0); 
$s = "\r\n"; 
$socket = stream_socket_client("tcp://61.19.250.51:3128", $errno, $errstr, 30); 

if($socket) { 
    echo "con"; 
    $buf = null; 

    fwrite($socket, "CONNECT imap-mail.outlook.com:993 HTTP/1.1\r\n"); 
    fwrite($socket, "Proxy-Connection: Keep-Alive\r\n\r\n"); 

    while (!feof($socket)) { 
     $buf .= fread($socket, 8190); 
    } 

    if(trim($buf)=="HTTP/1.1 200 Connection established"){ 
     echo $buf; 
     stream_set_blocking ($socket, true); 
     if(!stream_socket_enable_crypto ($socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)){ 
      echo "not changed to encrypted mode"; 
     } 
    } 
    fclose($socket); 

} 
?> 

der neue Code aber mit diffrent Problem, wenn ich wählen zu swith für ssl-Modus die Funktion stream_socket_enable_crypto() immer false zurück, ich weiß nicht, warum

1
<?php 
set_time_limit(0); 
ignore_user_abort(true); 
ini_set('max_execution_time', 0); 
$s = "\r\n"; 
$socket = stream_socket_client("tcp://128.199.105.86:3128", $errno, $errstr, 30); 

if($socket) { 

    echo "con"; 
    $buf = null; 
    $buff = null; 

    fwrite($socket, "CONNECT imap-mail.outlook.com:993 HTTP/1.1\r\n"); 
    fwrite($socket,"Host: imap-mail.outlook.com:993\r\n"); 
    fwrite($socket, "Proxy-Connection: Keep-Alive\r\n\r\n"); 

    while(!feof($socket)){ 
    $buf .= fgets($socket, 4096); 
    if(preg_match('/^http/i', $buf)){ 

     break; 

    } 
} 

     $modes = array( 
    STREAM_CRYPTO_METHOD_TLS_CLIENT, 
    STREAM_CRYPTO_METHOD_SSLv3_CLIENT, 
    STREAM_CRYPTO_METHOD_SSLv23_CLIENT, 
    STREAM_CRYPTO_METHOD_SSLv2_CLIENT 
); 


$success = false; 
foreach($modes as $mode) { 
    $success = stream_socket_enable_crypto($socket, true, $mode); 
    if ($success) { 
     echo "done"; 
     break; 
    } 
} 

while(!feof($socket)){ 
    $buf .= fgets($socket, 4096); 
    if(preg_match('/^\* ok/i', $buf)){ 

     break; 

    } 
} 
echo $buf; 


    fclose($socket); 



} 
?> 

die Arbeitsversion