我想从 gmails 的 imap 服务器检索电子邮件,但问题是来自服务器的响应是多行(如此处所示)并且 fgets 只检索一行。
我试过使用 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;
*/
?>
Max在下面的回答有效。这是我的实现。
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);
}