imap_status

(PHP 4, PHP 5, PHP 7, PHP 8)

imap_status返回邮箱的状态信息

描述

imap_status(IMAP\Connection $imap, string $mailbox, int $flags): stdClass|false

获取关于给定 $mailbox 的状态信息。

参数

imap

一个 IMAP\Connection 实例。

mailbox

邮箱名称,有关更多信息,请参见 imap_open()

警告

将不可信数据传递给此参数是不安全的,除非 imap.enable_insecure_rsh 被禁用。

flags

有效的标志是

  • SA_MESSAGES - 将 $status->messages 设置为邮箱中的消息数量
  • SA_RECENT - 将 $status->recent 设置为邮箱中的最近消息数量
  • SA_UNSEEN - 将 $status->unseen 设置为邮箱中未读(新)消息的数量
  • SA_UIDNEXT - 将 $status->uidnext 设置为邮箱中要使用的下一个 uid
  • SA_UIDVALIDITY - 将 $status->uidvalidity 设置为一个常量,该常量在邮箱的 uid 可能不再有效时更改
  • SA_ALL - 设置所有上述

返回值

此函数返回一个包含状态信息的**对象**,或者在失败时返回**false**。该对象具有以下属性:messagesrecentunseenuidnextuidvalidity

flags 也会被设置,它包含一个位掩码,可以与任何上述常量进行检查。

变更日志

版本 描述
8.1.0 现在 imap 参数期望一个 IMAP\Connection 实例;以前,它期望一个有效的 imap 资源

范例

示例 #1 imap_status() 例子

<?php
$mbox
= imap_open("{imap.example.com}", "username", "password", OP_HALFOPEN)
or die(
"无法连接: " . imap_last_error());

$status = imap_status($mbox, "{imap.example.org}INBOX", SA_ALL);
if (
$status) {
echo
"消息: " . $status->messages . "<br />\n";
echo
"最近: " . $status->recent . "<br />\n";
echo
"未读: " . $status->unseen . "<br />\n";
echo
"UIDnext: " . $status->uidnext . "<br />\n";
echo
"UIDvalidity:" . $status->uidvalidity . "<br />\n";
} else {
echo
"imap_status 失败: " . imap_last_error() . "\n";
}

imap_close($mbox);
?>

添加笔记

用户贡献笔记 3 个笔记

mwwaygoo AT hotmail DOT com
12 年前
我在使用 imap_status 时遇到了一些问题,它无法正常工作,而其他 imap 函数似乎正常。我总是收到 ['flags']=0 的响应。这里没有笔记,谷歌搜索表明它在 Exchange 中无法正常工作,所以我编写了一个小型的解决方法,至少可以获取一些信息。

<?php
function my_imap_status($stream, $mailbox='', $info=SA_ALL)
{
// 获取当前邮箱名称(和信息)
$curr_obj=imap_check($stream);
if(!
$curr_obj) return false;

// 如果请求的是当前邮箱,则直接返回它
if( (empty($mailbox)) || ($mailbox==$curr_obj->Mailbox) ) return $curr_obj;

// 获取当前邮箱
$current_mailbox=$curr_obj->Mailbox;

// 切换到新邮箱
if(!imap_reopen($stream, $mailbox)) return false;

// 获取信息
$obj=imap_check($stream);

// 切换回原始邮箱
imap_reopen($stream, $current_mailbox);

// 返回信息
return $obj;
}
?>
jille at DIESPAMMERShexon dot cx
17 年前
回复我之前的一篇文章;
我不确定了
我认为这个技巧有效,
但我的脚本的其他部分简直糟糕。

结论
您可以使用 status->uidnext-1 获取最后一个 UID。
但:这不是一个好方法,如果在您追加消息后和您获取状态信息之前添加了另一条消息,那么您就惨了。
razonklnbd at hotmail dot com
16 年前
另一个提示是只获取消息总数和最近消息数

$imap_obj = imap_status($mbox, '{mail.mysrv.com:143/imap}INBOX', SA_MESSAGES+SA_RECENT);
echo('<pre>'); var_dump($imap_obj); echo('</pre>');
To Top