PHP Conference Japan 2024

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. Это позволяет избежать лишнего RTT при соединении IMAP, если выбран полный текст сообщения (например при операции "сохранить в файл")

Возвращаемые значения

Возвращает заголовок сообщения в виде строки или false, если возникла ошибка.

Список изменений

Версия Описание
8.1.0 Параметр imap теперь ожидает экземпляр класса IMAP\Connection; раньше параметр ждал ресурс (resource) imap.

Смотрите также

  • imap_fetch_overview() - Считывает обзор информации из заголовков сообщений

Добавить

Примечания пользователей 2 notes

up
7
rgagnon24 dot nospam at gmail dot com
14 years ago
Interesting that imap_headerinfo() does not allow a UID for the $msg_number field like all other fetching functions seem to allow.

If you want to use a UID to fetch the headers, use this two-step process:

<?php
/*
* assumes $mbox is your stream, and $uid is set
* properly. Proper error checking is up to you.
*/
$hText = imap_fetchbody($mbox, $uid, '0', FT_UID);
$headers = imap_rfc822_parse_headers($hText);
?>

The result is the same as the output of imap_headerinfo(), but you get to use the UID.
up
3
Jille at nomorecrap dot quis dot cx
16 years ago
<?PHP
$headers
=imap_fetchheader($imap, $msgid);
preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)\r\n/m', $headers, $matches);
?>

Works quite well for splitting headers,
$matches will contain 3 arrays:
$matches[0] are the full-lines (To: Jille@devnull.quis.cx\r\n)
$matches[1] will be the header (To)
$matches[2] will be the value (Jille@devnull.quis.cx)

In multi-line values the 'multilining is not stripped!'
this could be achieved with something like:
<?PHP
preg_replace
('/\r\n\s+/m', '', $matches[2]);
?>
To Top