PHP Conference Japan 2024

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
"下一个 UID: " . $status->uidnext . "<br />\n";
echo
"UID 有效性: " . $status->uidvalidity . "<br />\n";
} else {
echo
"imap_status 失败: " . imap_last_error() . "\n";
}

imap_close($mbox);
?>

添加注释

用户贡献的注释 1 条注释

mwwaygoo AT hotmail DOT com
12 年前
我在使用 imap_status 时遇到了一些问题,而其他 imap 函数似乎工作正常。我总是得到 ['flags']=0 的响应。这里没有注释,Google 搜索表明它在 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;
}
?>
To Top