【发布时间】:2014-08-28 21:11:16
【问题描述】:
我开始编写脚本来为我管理一些电子邮件,但在访问我的邮箱时遇到了一些问题。我可以使用 imap_open 正常连接,并向从它返回的流发出命令,但似乎只有 imap_status 可以正确读取电子邮件。
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"); }
}
?>
这是输出;
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] => .
)
)
我在本地机器上运行的 wampserver 上运行它。看到它连接成功,我假设所有必需的模块都已经安装...
我已经搜索过信息,但我发现的大多数主题都是通过附加正确的邮箱名称或更正 serverSpec 字符串的语法来解决的。
有人知道可能出了什么问题吗?
提前致谢!
【问题讨论】: