2024 年 PHP 日本研討會

imap_fetchheader

(PHP 4、PHP 5、PHP 7、PHP 8)

imap_fetchheader傳回訊息的標頭

說明

imap_fetchheader(IMAP\Connection $imap, int $message_num, int $flags = 0): string|false

這個函式會擷取指定郵件的完整、未經過濾的 » RFC2822 格式標頭。

參數

imap

一個 IMAP\Connection 實例。

message_num

郵件編號

flags

可能的 flags 如下:

  • FT_UID - message_num 參數為 UID
  • FT_INTERNAL - 傳回的字串為「內部」格式,不做任何 CRLF 換行正規化的嘗試
  • FT_PREFETCHTEXT - RFC822.TEXT 應同時預先擷取。如果需要完整的郵件本文(例如在「儲存到本地檔案」操作中),這樣可以避免在 IMAP 連線上額外的 RTT

返回值

傳回指定郵件的標頭,格式為文字字串;失敗時傳回 false

更新日誌

版本 說明
8.1.0 imap 參數現在需要一個 IMAP\Connection 實例;以前,需要一個有效的 imap 資源

參見

新增註釋

使用者貢獻的註釋 2 則註釋

rgagnon24 dot nospam at gmail dot com
14 年前
有趣的是,imap_headerinfo() 不允許在 $msg_number 欄位中使用 UID,而所有其他擷取函式似乎都允許。

如果您想使用 UID 來擷取標頭,請使用以下兩個步驟:

<?php
/*
* 假設 $mbox 是您的串流,並且 $uid 已正確設定。
* 正確的錯誤檢查由您自行負責。
*/
$hText = imap_fetchbody($mbox, $uid, '0', FT_UID);
$headers = imap_rfc822_parse_headers($hText);
?>

結果與 imap_headerinfo() 的輸出相同,但您可以使用 UID。
Jille 位於 nomorecrap dot quis dot cx
16 年前
<?PHP
$headers
=imap_fetchheader($imap, $msgid);
preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)\r\n/m', $headers, $matches);
?>

相當適用於分割標頭 (Headers),
$matches 將包含 3 個陣列
$matches[0] 是完整行 (To: Jille@devnull.quis.cx\r\n)
$matches[1] 將會是標頭 (To)
$matches[2] 將會是值 (Jille@devnull.quis.cx)

在多行值中,「多行格式並未被移除!」
這可以用類似以下的程式碼達成
<?PHP
preg_replace
('/\r\n\s+/m', '', $matches[2]);
?>
To Top