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
"UIDnext:" . $status->uidnext . "<br />\n";
echo
"UIDvalidity:" . $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