PHP 8.4.0 RC4 available for testing

imap_headerinfo

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

imap_headerinfoLit l'en-tête du message

Description

imap_headerinfo(
    IMAP\Connection $imap,
    int $message_num,
    int $from_length = 0,
    int $subject_length = 0
): stdClass|false

Récupère les informations sur un numéro de message donné en lisant ses en-têtes.

Liste de paramètres

imap

Une instance de IMAP\Connection.

message_num

Le numéro du message

from_length

Nombre de caractères pour la propriété fetchfrom. Doit être plus grand ou égal à 0.

subject_length

Nombre de caractères pour la propriété fetchsubject. Doit être plus grand ou égal à 0.

defaulthost

Valeurs de retour

Retourne false en cas d'erreurs ou, en cas de succès, les informations dans un objet contenant les propriétés suivantes :

  • "toaddress" : toute la ligne d'en-tête to: jusqu'à 1024 caractères
  • "to" : un tableau d'objets issus de la ligne to: avec les propriétés suivantes : personal, adl, mailbox, et host
  • "fromaddress" : toute la ligne d'en-tête from: jusqu'à 1024 caractères
  • "from" : un tableau d'objets issus de la ligne From: avec les propriétés suivantes : personal, adl, mailbox, et host
  • "ccaddress" : toute la ligne d'en-tête cc: jusqu'à 1024 caractères
  • "cc" : un tableau d'objets issus de la ligne cc: avec les propriétés suivantes : personal, adl, mailbox, et host
  • "bccaddress" : toute la ligne d'en-tête bcc: jusqu'à 1024 caractères
  • "bcc" : un tableau d'objets issus de la ligne Bcc: avec les propriétés suivantes : personal, adl, mailbox, et host
  • "reply_toaddress" : toute la ligne d'en-tête Reply_to: jusqu'à 1024 caractères
  • "reply_to" : un tableau d'objets issus de la ligne Reply_to: avec les propriétés suivantes : personal, adl, mailbox, et host
  • "senderaddress" : toute la ligne d'en-tête Sender: jusqu'à 1024 caractères
  • "sender" : un tableau d'objets issus de la ligne Sender: avec les propriétés suivantes : personal, adl, mailbox, et host
  • "return_pathaddress" : toute la ligne d'en-tête Return-path: jusqu'à 1024 caractères
  • "return_path" : un tableau d'objets issus de la ligne Return-path: avec les propriétés suivantes : personal, adl, mailbox, et host
  • remail -
  • "date" : La date du message, telle que trouvée dans les en-têtes
  • "Date" : Identique à "date"
  • "subject" : Le sujet du message
  • "Subject" : Identique à "subject"
  • "in_reply_to" :
  • "message_id" :
  • "newsgroups" :
  • "followup_to" :
  • "references" :
  • "Recent" : R si le message est récent et lu, N si le message est récent et non lu, " " si le message n'est pas récent.
  • "Unseen" : U si le message est non lu ET non récent, " " si le message est non lu et récent
  • "Flagged" : F si le message contient un drapeau, " " sinon
  • "Answered" : A si une réponse a été faite à ce message, " " sinon
  • "Deleted" : D si le message est effacé, " " sinon
  • "Draft" : X si le message est un brouillon, " " sinon
  • "Msgno" : Le numéro du message
  • "MailDate" :
  • "Size" : La taille du message
  • "udate" : Date de l"envoi du message, sous la forme d"une date Unix
  • "fetchfrom" : Ligne "from" formatée afin de tenir dans from_length caractères
  • "fetchsubject" : Ligne "subject" formatée afin de tenir dans subject_length caractères

Historique

Version Description
8.1.0 La paramètre imap attend désormais une instance de IMAP\Connection ; auparavant, une ressource imap était attendue.
8.0.0 Le paramètre defaulthost inutilisé a été supprimé.

Voir aussi

add a note

User Contributed Notes 5 notes

up
24
andyltm
14 years ago
When I was testing imap_headerinfo() with an e-mail that had multiple recipients (multiple e-mails in to to: and/or cc: field), I noticed that imap_headerinfo() was failing hard for me on PHP 5.2.10-2ubuntu6.4 with Suhosin-Patch 0.9.7 (cli).

Rather than providing me an array with each and every e-mail address listed in the to and/or cc fields, it was only providing me the first listed. This was disappointing.

[to] => Array
(
[0] => stdClass Object
(
[mailbox] => game
[host] => blunts.com
)
)

Luckily, there was a cool workaround to this problem:

imap_rfc822_parse_headers(imap_fetchheader( string ); which subsequentally worked like a nice little pet would:

[to] => Array
(
[0] => stdClass Object
(
[mailbox] => game
[host] => blunts.com
)
[1] => stdClass Object
(
[mailbox] => dutch
[host] => masters.com
)
)

TL;DR:
So in other words, instead of imap_headerinfo() use imap_rfc822_parse_headers(imap_fetchheader()).

Hope this helps anyone else that runs into this issue from now into the future. This post was suggested by people in #PHP on FreeNode IRC.
up
9
jahservant 13 at gmail dot com
14 years ago
I'm not entirely sure why this is, but if you loop through all of the messages in a mailbox, calling imap_header() each time, you can significantly increase performance by calling imap_headers() first.

Compare this:
<?php
$imap
= imap_open("{my.server.com:143}INBOX", "user", "pass");
$n_msgs = imap_num_msg($imap);
$s = microtime(true);
for (
$i=0; $i<$n_msgs; $i++) {
$header = imap_header($imap, $i);
}
$e = microtime(true);
echo (
$e - $s);
imap_close($imap);
?>

With this:
<?php
$imap
= imap_open("{my.server.com:143}INBOX", "user", "pass");
$n_msgs = imap_num_msg($imap);
/****** adding this line: ******/
imap_headers($imap)
/***************************/
$s = microtime(true);
for (
$i=0; $i<$n_msgs; $i++) {
$header = imap_header($imap, $i);
}
$e = microtime(true);
echo (
$e - $s);
imap_close($imap);
?>

The performance difference, as I have tested on several boxes, connecting to several different servers, is that the second code snippet ALWAYS takes 1/2 the time, if not less.

Perhaps it is because imap_headers() retrieves all of the messages on one connection, whereas imap_header() has to make a new fetch request for each message?? I'm not sure WHY it is faster if imap_headers() is called first, but I do know that it is, so I thought I'd pass on the knowledge. If anyone knows why this is, please let me know....
up
3
php at our-software dot com
7 years ago
Please Note : imap_headerinfo only returns a subset of the headers, rather than the entire thing.

Among other things, this means it only shows the first recipient from the "to" section of the email, rather than all recipients.

If you're not seeing something you expected to, you'll be better off using

$hdr_raw = imap_fetchheader($mbox, $mailid);
$hdr = imap_rfc822_parse_headers($hdr_raw);

then you'll see the full set of headers, and be able to do more with it.
up
5
scott at fuzzygroup dot com
22 years ago
If you want to extract values from to, from, or other header elements, they are an object and you need to loop over them i.e.

$header = imap_header($mbox, $message_id);
$from = $header->from;
foreach ($from as $id => $object) {
$fromname = $object->personal;
$fromaddress = $object->mailbox . "@" . $object->host;
}

Would give you two variables for the friendly from and the smtp from address

Thanks to www.natrak.net for help with this
up
1
Murray
9 years ago
An email without a subject line will not generate the 'subject' property.

Before using the 'subject' property you should test for it.
if (property_exists($header, 'subject')) echo $header->subject;
To Top