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