2016-07-02 3 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); 
?> 

Est-il possible d'utiliser une connexion proxy pour lire le courrier à partir d'un serveur imap en utilisant PHP deComment utiliser imap avec fsockopen derrière procuration

il fonctionne bien sans procuration
s'il vous plaît si quelqu'un peut aidez-moi je ne veux pas utiliser curl

+0

Vous devrez démarrer une nouvelle couche de communication SSL après CONNECT. En outre, exécutez-vous un proxy HTTP sur le port 53? – Max

+0

Vous semblez également avoir le port proxy spécifié deux fois. – Max

+0

@Max ce n'est pas mon proxy c'est public proxy, vous pouvez donner plus de détails sur la couche SSL après CONNECT, im sûr que je n'en ai pas besoin car im utilisant proxy et pas de connexion directe au serveur IMAP –

Répondre

0

Le proxy HTTP fournit un tuyau muet après avoir utilisé le verbe CONNECT. Étant donné que vous vous connectez à un service IMAP sécurisé, vous devez activer SSL/TLS une fois la connexion établie.

Pour certaines recherches, il semble que vous puissiez utiliser stream_socket_enable_crypto après avoir reçu une réponse 200 du serveur PROXY. Il est très probable que vous deviez lire la réponse avant d'utiliser stream_socket_enable_crypto, ou il va lancer une erreur quand il lit les données inattendues.

+0

im si proche de la solution sais que je teste stream_socket_enable_crypto mais je ne semble pas facile merci pour votre aide si je trouve quelque chose que je vous dis –

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); 

} 
?> 

ce nouveau code, mais avec le problème diffrent quand je choisis trop swith pour le mode ssl la fonction stream_socket_enable_crypto() renvoient toujours faux, je ne sais pas pourquoi

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); 



} 
?> 

la version de travail