PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

imap_fetchbody> <imap_expunge
Last updated: Fri, 05 Sep 2008

view this page in

imap_fetch_overview

(PHP 4, PHP 5)

imap_fetch_overviewLit le sommaire des en-têtes de messages

Description

array imap_fetch_overview ( resource $imap_stream , string $sequence [, int $options ] )

imap_fetch_overview() lit les en-têtes des courriers électroniques de la séquence sequence et retourne un sommaire de leur contenu.

Liste de paramètres

imap_stream

Un flux IMPA retourné par la fonction imap_open().

sequence

Une description de la séquence du message. Vous pouvez énumérer les messages désirés avec la syntaxe X,Y, ou récupérer tous les messages d'un intervalle, avec la syntaxe X:Y

options

sequence va contenir une séquence d'indice de message ou d'UID, si flags contient FT_UID.

Valeurs de retour

Retourne un tableau d'objets décrivant l'en-tête de chaque message. L'objet ne définira une propriété que si elle existe. Les propriétés possibles sont :

  • "subject" : le sujet du message
  • "from" : expéditeur
  • "to" : destinataire
  • "date" : date d'expédition
  • "message_id" : identification du message
  • "references" : est une référence sur l'id de ce message
  • "in_reply_to" : est une réponse à cet identifiant de message
  • "size" : taille en octets
  • "uid" : UID du message dans la boîte aux lettres
  • "msgno" : numéro de séquence du message dans la boîte
  • "recent" : ce message est récent
  • "flagged" : ce message est marqué
  • "answered" : ce message a donné lieu à une réponse
  • "deleted" : ce message est marqué pour l'effacement
  • "seen" : ce message est déjà lu
  • "draft" : ce message est un brouillon

Exemples

Exemple #1 Exemple avec imap_fetch_overview()

<?php
$mbox 
imap_open("{imap.example.org:143}INBOX""username""password")
     or die(
"Connexion impossible : " imap_last_error());

$MC imap_check($mbox);

// Récupère le sommaire pour tous les messages contenus dans INBOX
$result imap_fetch_overview($mbox,"1:{$MC->Nmsgs}",0);
foreach (
$result as $overview) {
    echo 
"#{$overview->msgno} ({$overview->date}) - From: {$overview->from}
    {$overview->subject}\n"
;
}
imap_close($mbox);
?>

Voir aussi



imap_fetchbody> <imap_expunge
Last updated: Fri, 05 Sep 2008
 
add a note add a note User Contributed Notes
imap_fetch_overview
xhack at web dot de
20-Mar-2007 04:05
you want a sortet list of mails, but you get always the same order? your c-client seems to cause this. i realized this with linux libc6-2.3.6 and php-5.2.0

try this little code:

# here you try to sort by your criteria
$sort=@imap_sort($mbox,SORTDATE,1,SE_UID);
 
# here the order of the messages to fetch should be recognised, but it isn't

$tmp=@imap_fetch_overview($mbox,implode(',',$sort),FT_UID);
# so try to work around simply:
for($i=0;$i<count($tmp);$i++)
{ $liste[$i]=$tmp[array_search($tmp[$i]->uid,$sort)]; }

so now you can use the sort by date, address, and so on.
raja at aonic dot net
14-Mar-2007 08:22
Here is a function to get messages from IMAP and sort them for pagination.

<?php
   
/**
     * Return array of IMAP messages for pagination
     *
     * @param   int     $page       page number to get
     * @param   int     $per_page   number of results per page
     * @param   array   $sort       array('subject', 'asc') etc
     *
     * @return  mixed   array containing imap_fetch_overview, pages, and total rows if successful, false if an error occurred
     * @author  Raja K
     */
   
public function listMessages($page = 1, $per_page = 25, $sort = null) {
       
$limit = ($per_page * $page);
       
$start = ($limit - $per_page) + 1;
       
$start = ($start < 1) ? 1 : $start;
       
$limit = (($limit - $start) != ($per_page-1)) ? ($start + ($per_page-1)) : $limit;
       
$info = imap_check($this->_imap_stream);
       
$limit = ($info->Nmsgs < $limit) ? $info->Nmsgs : $limit;
 
        if(
true === is_array($sort)) {
           
$sorting = array(
                       
'direction' => array(   'asc' => 0,
                                               
'desc' => 1),
 
                       
'by'        => array(   'date' => SORTDATE,
                                               
'arrival' => SORTARRIVAL,
                                               
'from' => SORTFROM,
                                               
'subject' => SORTSUBJECT,
                                               
'size' => SORTSIZE));
           
$by = (true === is_int($by = $sorting['by'][$sort[0]]))
                            ?
$by
                           
: $sorting['by']['date'];
           
$direction = (true === is_int($direction = $sorting['direction'][$sort[1]]))
                            ?
$direction
                           
: $sorting['direction']['desc'];
 
           
$sorted = imap_sort($this->_imap_stream, $by, $direction);
 
           
$msgs = array_chunk($sorted, $per_page);
           
$msgs = $msgs[$page-1];
        }
        else
           
$msgs = range($start, $limit); //just to keep it consistent
 
       
$result = imap_fetch_overview($this->_imap_stream, implode($msgs, ','), 0);
        if(
false === is_array($result)) return false;
 
       
//sorting!
       
if(true === is_array($sorted)) {
           
$tmp_result = array();
            foreach(
$result as $r)
               
$tmp_result[$r->msgno] = $r;
 
           
$result = array();
            foreach(
$msgs as $msgno) {
               
$result[] = $tmp_result[$msgno];
            }
        }
 
       
$return = array('res' => $result,
                       
'start' => $start,
                       
'limit' => $limit,
                       
'sorting' => array('by' => $sort[0], 'direction' => $sort[1]),
                       
'total' => imap_num_msg($this->_imap_stream));
       
$return['pages'] = ceil($return['total'] / $per_page);
        return
$return;
    }
?>
Group-Office Developer
10-Apr-2004 02:21
About the sequence sorting again.
I've found that there's a significant speed improvement by preparing the sequence and then fetch them at once with large mailboxes. On small mailboxes wyou will not notice a speed difference.

But then there's the sorting problem. I've spent all night fiuring out how to do this myself. I found the solution!

Prepare an array of messages with imap_sort. Create a second array that maps the message numbers to the actuall place in the fetched array.
You know it will be in numeric order so you can make an array map with the sort() function sorting it from high to low.
Then you can proces the array fetched with imap_fetch_overview with the array_map and you will have them sorted. If you need an example look in the Group-Office code classes/imap.class.inc in a version later then 2.04.
mails at slueoend dot ch
15-Dec-2003 01:15
Not that this function and all other imap_fetch*-functions will download the whole message and not just the header information.
se at designlinks dot net
02-Jul-2003 03:42
To further explain 'warrenfalk's comment, the following sequences are exactly the same, and always returns messages with lowest UID to highest UID:

1:5
5:1
1,2,3,4,5
5,4,3,2,1
3,2,5,1,4

(always returned as 1,2,3,4,5)
suurenbroekNoSpam at ov35 dot NoSpam dot nl
14-Oct-2002 01:34
Note that these object-variables only exist when they are actually in the mail.

This means that if a mail has no subject, the property $val->subject will not exist.

Calling $val->subject will generate an notice:
Notice: Undefined property: subject in /home/html/inc/Mbox.php on line xxx

Use this to check it:
if (array_key_exists( "subject", get_object_vars($val)))
   $subj=$val->subject;
else
   $subj="";
trionon at mail dot ru
25-Feb-2002 07:13
This performance hint is useful if you need to print the result of imap_sort():

It's faster to prepare large string with UIDs and then to call imap_fetchoverview once than calling imap_fetchoverview in a loop.
steve at stevenchalker dot net
10-Nov-2001 05:26
I think if you go like a list, you can list your "hotmail" messages.
<?php
$mbox
=imap_open("{imap.server.com}","user","pass");
$MC=imap_check($mbox);
$MN=$MC->Nmsgs;
$overview=imap_fetch_overview($mbox,"1:$MN",0);
$size=sizeof($overview);
for(
$i=$size-1;$i>=0;$i--){
$val=$overview[$i];
$msg=$val->msgno;
$from=$val->from;
$date=$val->date;
$subj=$val->subject;
echo
"#$msg: From:'$from' Date:'$date' Subject:'$subj'<BR>";
imap_close($mbox);
?>

imap_fetchbody> <imap_expunge
Last updated: Fri, 05 Sep 2008
 
 
show source | credits | sitemap | contact | advertising | mirror sites