PHP中使用imap_*方法的问题

PHP中使用imap_*方法的问题,php,email,imap,Php,Email,Imap,我开始写一个脚本来为我管理一些电子邮件,但是在访问我的邮箱时遇到了一些问题。在imap_打开的情况下,我可以很好地连接,并向从中返回的流发出命令,但似乎只有imap_状态能够正确读取电子邮件 imap_status方法报告邮箱中有50封电子邮件,这是正确的,但其他方法报告0封邮件或访问邮箱时出现问题,邮件为“” 这是我的剧本; error_reporting(E_ALL); $imapServer = "mail.blah.co.uk"; $imapPort = 143; $imapFolde

我开始写一个脚本来为我管理一些电子邮件,但是在访问我的邮箱时遇到了一些问题。在imap_打开的情况下,我可以很好地连接,并向从中返回的流发出命令,但似乎只有imap_状态能够正确读取电子邮件

imap_status方法报告邮箱中有50封电子邮件,这是正确的,但其他方法报告0封邮件或访问邮箱时出现问题,邮件为“”

这是我的剧本;
error_reporting(E_ALL);

$imapServer = "mail.blah.co.uk";
$imapPort = 143;
$imapFolder = "INBOX";
$imapUsername = "account@blah.co.uk";
$imapPassword = "********";
$serverSpec = imap_utf7_encode ("{" . $imapServer . ":" . $imapPort . "/imap/readonly/debug/notls}" . $imapFolder);

echo "imapServer: $imapServer<br />\n";
echo "imapPort: $imapPort<br />\n";
echo "imapFolder: $imapFolder<br />\n";
echo "imapUsername: $imapUsername<br />\n";
echo "imapPassword: $imapPassword<br />\n";
echo "serverSpec: $serverSpec<br />\n";

if ($imapStream = imap_open($serverSpec, $imapUsername, $imapPassword, OP_HALFOPEN)) {

    $imapStatus = imap_status($imapStream, $serverSpec, SA_ALL);
    $imapErrors = imap_errors();
    echo("<pre>imapStatus = " . htmlspecialchars(print_r($imapStatus, TRUE)) . (is_array($imapErrors) ? "\nERRORS: " . htmlspecialchars(print_r($imapErrors, TRUE)) : "") . "</pre>");

    $imapCheck = imap_check($imapStream);
    $imapErrors = imap_errors();
    echo("<pre>imapCheck = " . htmlspecialchars(print_r($imapCheck, TRUE)) . (is_array($imapErrors) ? "\nERRORS: " . htmlspecialchars(print_r($imapErrors, TRUE)) : "") . "</pre>");

    $imapNumMsg = imap_num_msg($imapStream);
    $imapErrors = imap_errors();
    echo("<pre>imapNumMsg = " . htmlspecialchars(print_r($imapNumMsg, TRUE)) . (is_array($imapErrors) ? "\nERRORS: " . htmlspecialchars(print_r($imapErrors, TRUE)) : "") . "</pre>");

    $imapOverview = imap_fetch_overview($imapStream, "1", 0);
    $imapErrors = imap_errors();
    echo("<pre>imapOverview = " . htmlspecialchars(print_r($imapOverview, TRUE)) . (is_array($imapErrors) ? "\nERRORS: " . htmlspecialchars(print_r($imapErrors, TRUE)) : "") . "</pre>");

    $imapHeaders = imap_headers($imapStream);
    $imapErrors = imap_errors();
    echo("<pre>imapHeaders = " . htmlspecialchars(print_r($imapHeaders, TRUE)) . (is_array($imapErrors) ? "\nERRORS: " . htmlspecialchars(print_r($imapErrors, TRUE)) : "") . "</pre>");

    $imapSort = imap_sort($imapStream, SORTARRIVAL, 1, SE_UID);
    $imapErrors = imap_errors();
    echo("<pre>imapSort = " . htmlspecialchars(print_r($imapSort, TRUE)) . (is_array($imapErrors) ? "\nERRORS: " . print_r($imapErrors, TRUE) : "") . "</pre>");

    $imapMailboxMsgInfo = imap_mailboxmsginfo($imapStream);
    $imapErrors = imap_errors();
    echo("<pre>imapMailboxMsgInfo = " . htmlspecialchars(print_r($imapMailboxMsgInfo, TRUE)) . (is_array($imapErrors) ? "\nERRORS: " . htmlspecialchars(print_r($imapErrors, TRUE)) : "") . "</pre>");

    $mailboxes = imap_getmailboxes($imapStream, $serverSpec, "*");
    $imapErrors = imap_errors();
    echo("<pre>mailboxes = " . htmlspecialchars(print_r($mailboxes, TRUE)) . (is_array($imapErrors) ? "\nERRORS: " . htmlspecialchars(print_r($imapErrors, TRUE)) : "") . "</pre>");

    imap_close($imapStream);

} else {

    $imapErrors = imap_errors();
    if (is_array($imapErrors)) { echo("imap_open error: " . print_r($imapErrors, TRUE) . "<br />\n"); }

}

?>
错误报告(E_ALL);
$imapServer=“mail.blah.co.uk”;
$imapPort=143;
$imapFolder=“收件箱”;
$imapUsername=”account@blah.co.uk";
$imapPassword=“**********”;
$serverSpec=imap_utf7_encode(“{”。$imapServer.”:“$imapPort.”/imap/readonly/debug/notls}”。$imapFolder);
echo“imapServer:$imapServer
\n”; 回显“imapPort:$imapPort
\n”; 回显“imapFolder:$imapFolder
\n”; 回显“imapUsername:$imapUsername
\n”; 回显“imapPassword:$imapPassword
\n”; echo“serverSpec:$serverSpec
\n”; if($imapStream=imap_open($serverSpec、$imapUsername、$imapPassword、OP_half open)){ $imapStatus=imap_状态($imapStream、$serverSpec、sau ALL); $imapErrors=imap_errors(); echo(“imapStatus=“.htmlspecialchars(print_r($imapStatus,TRUE))。(is_数组($imapErrors)?”\n错误:“.htmlspecialchars(print_r($imapErrors,TRUE)):”); $imapCheck=imap\u检查($imapStream); $imapErrors=imap_errors(); echo(“imapCheck=“.htmlspecialchars(print_r($imapCheck,TRUE))。(is_数组($imapErrors)?”\n错误:“.htmlspecialchars(print_r($imapErrors,TRUE)):”); $imapNumMsg=imap_num_msg($imapStream); $imapErrors=imap_errors(); echo(“imapNumMsg=“.htmlspecialchars(print_r($imapNumMsg,TRUE))。(is_数组($imapErrors)?”\n错误:“.htmlspecialchars(print_r($imapErrors,TRUE)):”); $imapOverview=imap_fetch_概览($imapStream,“1”,0); $imapErrors=imap_errors(); echo(“imapOverview=“.htmlspecialchars(print_r($imapOverview,TRUE))。(is_数组($imapErrors)?”\n错误:“.htmlspecialchars(print_r($imapErrors,TRUE)):”); $imapHeaders=imap_头($imapStream); $imapErrors=imap_errors(); echo(“imapHeaders=“.htmlspecialchars(print_r($imapHeaders,TRUE))。(is_数组($imapErrors)?”\n错误:“.htmlspecialchars(print_r($imapErrors,TRUE)):”); $imapSort=imap_sort($imapStream,SORTARRIVAL,1,seu UID); $imapErrors=imap_errors(); echo(“imapSort=“.htmlspecialchars(print_r($imapSort,TRUE))。(is_数组($imapErrors)?”\n错误:“.print_r($imapErrors,TRUE):”)。”; $imapMailboxMsgInfo=imap_mailboxmsginfo($imapStream); $imapErrors=imap_errors(); echo(“imapMailboxMsgInfo=“.htmlspecialchars(print_r($imapMailboxMsgInfo,TRUE))(is_数组($imapErrors)?”\n错误:“.htmlspecialchars(print_r($imapErrors,TRUE)):”); $mailboxes=imap_getmailboxes($imapStream,$serverSpec,“*”); $imapErrors=imap_errors(); echo(“邮箱=“.htmlspecialchars(print\r($mailboxs,TRUE))。(is\u数组($imapErrors)?”\n错误:“.htmlspecialchars(print\r($imapErrors,TRUE)):”); imap_关闭($imapStream); }否则{ $imapErrors=imap_errors(); if(is_数组($imapErrors)){echo(“imap_打开错误:”.print_r($imapErrors,TRUE)。“
\n”);} } ?>
这是输出

imapServer:mail.blah.co.uk
i支持:143
imapFolder:收件箱
imapUsername:account@blah.co.uk
imapPassword:********
serverSpec:{mail.blah.co.uk:143/imap/readonly/debug/notls}收件箱
imapStatus=stdClass对象
(
[标志]=>31
[信息]=>50
[最近]=>0
[看不见]=>0
[uidnext]=>77
[UIDVality]=>1329686719
)
imapCheck=stdClass对象
(
[日期]=>2014年8月28日星期四21:40:51+0100(格林尼治标准时间昼间)
[驱动程序]=>imap
[邮箱]=>{mail.blah.co.uk:143/imap/notls/readonly/user=”account@blah.co.uk"}
[Nmsgs]=>0
[最近]=>0
)
imapNumMsg=0
imapOverview=阵列
(
)
错误:数组
(
[0]=>序列超出范围
)
imapHeaders=数组
(
)
imapSort=数组
(
)
错误:数组
(
[0]=>服务器接收到IMAP命令时出错。
)
imapMailboxMsgInfo=stdClass对象
(
[未读]=>0
[已删除]=>0
[Nmsgs]=>0
[大小]=>0
[日期]=>2014年8月28日星期四21:40:51+0100(格林尼治标准时间昼间)
[驱动程序]=>imap
[邮箱]=>{mail.blah.co.uk:143/imap/notls/readonly/user=”account@blah.co.uk"}
[最近]=>0
)
邮箱=阵列
(
[0]=>stdClass对象
(
[name]=>{mail.blah.co.uk:143/imap/readonly/debug/notls}INBOX.Spam
[属性]=>64
[分隔符]=>。
)
[1] =>stdClass对象
(
[name]=>{mail.blah.co.uk:143/imap/readonly/debug/notls}INBOX.Drafts
[属性]=>64
[分隔符]=>。
)
[2] =>stdClass对象
(
[name]=>{mail.blah.co.uk:143/imap/readonly/debug/notls}INBOX.Sent
[属性]=>64
[分隔符]=>。
)
[3] =>stdClass对象
(
[name]=>{mail.blah.co.uk:143/imap/readonly/debug/notls}INBOX.Trash
[属性]=>64
[分隔符]=>。
)
)
我正在本地机器上运行的wampserver上运行这个。鉴于它正在成功连接,我假设所有必需的模块都已安装

我已经搜索了信息,但我找到的大多数主题都是通过添加正确的邮箱名称或更正serverSpec字符串的语法来解决的

有人知道什么地方出了问题吗


提前谢谢

我最终解决了这个问题,只是看文档时的疏忽

在线

OP_HALFOPEN参数指定应打开连接,但不应打开邮箱。看到这个连接没有邮箱来读取邮件,这是合乎逻辑的
imapServer: mail.blah.co.uk
imapPort: 143
imapFolder: INBOX
imapUsername: account@blah.co.uk
imapPassword: ********
serverSpec: {mail.blah.co.uk:143/imap/readonly/debug/notls}INBOX
imapStatus = stdClass Object
(
    [flags] => 31
    [messages] => 50
    [recent] => 0
    [unseen] => 0
    [uidnext] => 77
    [uidvalidity] => 1329686719
)
imapCheck = stdClass Object
(
    [Date] => Thu, 28 Aug 2014 21:40:51 +0100 (GMT Daylight Time)
    [Driver] => imap
    [Mailbox] => {mail.blah.co.uk:143/imap/notls/readonly/user="account@blah.co.uk"}<no_mailbox>
    [Nmsgs] => 0
    [Recent] => 0
)
imapNumMsg = 0
imapOverview = Array
(
)

ERRORS: Array
(
    [0] => Sequence out of range
)
imapHeaders = Array
(
)
imapSort = Array
(
)

ERRORS: Array
(
    [0] => Error in IMAP command received by server.
)
imapMailboxMsgInfo = stdClass Object
(
    [Unread] => 0
    [Deleted] => 0
    [Nmsgs] => 0
    [Size] => 0
    [Date] => Thu, 28 Aug 2014 21:40:51 +0100 (GMT Daylight Time)
    [Driver] => imap
    [Mailbox] => {mail.blah.co.uk:143/imap/notls/readonly/user="account@blah.co.uk"}<no_mailbox>
    [Recent] => 0
)
mailboxes = Array
(
    [0] => stdClass Object
        (
            [name] => {mail.blah.co.uk:143/imap/readonly/debug/notls}INBOX.Spam
            [attributes] => 64
            [delimiter] => .
        )

    [1] => stdClass Object
        (
            [name] => {mail.blah.co.uk:143/imap/readonly/debug/notls}INBOX.Drafts
            [attributes] => 64
            [delimiter] => .
        )

    [2] => stdClass Object
        (
            [name] => {mail.blah.co.uk:143/imap/readonly/debug/notls}INBOX.Sent
            [attributes] => 64
            [delimiter] => .
        )

    [3] => stdClass Object
        (
            [name] => {mail.blah.co.uk:143/imap/readonly/debug/notls}INBOX.Trash
            [attributes] => 64
            [delimiter] => .
        )

)
$imapStream = imap_open($serverSpec, $imapUsername, $imapPassword, OP_HALFOPEN)