2

gmails の imap サーバーから電子メールを取得したいのですが、問題は、サーバーからの応答が複数行の長さ (ここで示されているように) であり、fgets が 1 行しか取得しないことです。

fgets、fread、socket_read を使用してみましたが、どれも機能しないため、間違ったメソッドを使用しているか、メソッドを正しく使用していません。このチュートリアルも試しましたが、うまくいきませんでした。誰かがこれで私を助けてくれれば幸いです。

ありがとうございます。これがアマチュアの質問である場合は、本当に申し訳ありません。

コード:

<?php

$stuff = fsockopen('ssl://imap.gmail.com',993);
$reply = fgets($stuff,4096);
echo 'connection: '.$reply.'<br/>';

$request = fputs($stuff,"a1 LOGIN MyUserName Password\r\n");
$receive = socket_read($stuff, 4096);

echo 'login: '.$receive.'<br/>';


$request = fputs($stuff,"a2 EXAMINE INBOX\r\n");
$reply = '';

while(!feof($stuff))
    $reply .= fread($stuff, 4096);

echo $reply;



/*
$request = fputs($stuff,'a3 FETCH 1 BODY[]\r\n');
$reply = fgets($stuff);
echo $reply;
*/
?>

以下のマックスの答えは機能します。これは私の実装です。

private function Response($instructionNumber)
{
    $end_of_response = false;

    while (!$end_of_response)
    {
        $line = fgets($this->connection,self::responseSize);
        $response .= $line.'<br/>';

        if(preg_match("/$instructionNumber (OK|NO|BAD)/", $response,$responseCode))
            $end_of_response = true;
    }

    return array('code' => $responseCode[1],
        'response'=>$response);
}
4

2 に答える 2

2

通常、送信したタグに対して OK/BAD/NO の応答が返ってきたら、読むのをやめるべきです。を送信すると、 を取得したa1 LOGIN ...ときに停止しますa1 OK/BAD/NO ...

于 2013-03-18T19:26:29.507 に答える