PHP Doku:: Liest die Kopfdaten einer Nachricht - function.imap-headerinfo.html

Verlauf / Chronik / History: (2) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzE-Mail-relevante ErweiterungenIMAP, POP3 and NNTPIMAP Funktionenimap_headerinfo

Ein Service von Reinhard Neidl - Webprogrammierung.

IMAP Funktionen

<<imap_header

imap_headers>>

imap_headerinfo

(PHP 4, PHP 5)

imap_headerinfoLiest die Kopfdaten einer Nachricht

Beschreibung

object imap_headerinfo ( resource $imap_stream , int $msg_number [, int $fromlength = 0 [, int $subjectlength = 0 [, string $defaulthost = NULL ]]] )

Liest die Kopfdaten der Nachricht mit der Nummer msg_number und liefert daraus gewonnene Informationen zurück.

Parameter-Liste

imap_stream

Eine von imap_open() zurückgegebene IMAP-Verbindung.

msg_number

Die gewünschte Nachrichtennummer

fromlength

Maximale Anzahl Zeichen für die fetchfrom Eigenschaft (muß größer als Null sein)

subjectlength

Maximale Anzahl Zeichen für die subject Eigenschaft (muß größer als Null sein)

defaulthost

Rückgabewerte

Die Ergebnisse werden in einem Objekt mit folgenden Eigenschaften zurückgegeben:

  • toaddress - Inhalt des "To:" Felds (max. 1024 Zeichen)
  • to - ein Array mit aus den einzelnen Empfängern aus dem "To:" Feld. Jedes Array-Element hat die Eigenschaften personal, adl, mailbox und host
  • fromaddress - Inhalt des "From:" Felds (max. 1024 Zeichen)
  • from - ein Array mit aus den einzelnen Empfängern aus dem "From:" Feld. Jedes Array-Element hat die Eigenschaften personal, adl, mailbox und host
  • ccaddress - Inhalt des "Cc:" Felds (max. 1024 Zeichen)
  • cc - ein Array mit aus den einzelnen Empfängern aus dem "Cc:" Feld. Jedes Array-Element hat die Eigenschaften personal, adl, mailbox und host
  • bccaddress - Inhalt des "Bcc:" Felds (max. 1024 Zeichen)
  • bcc - ein Array mit aus den einzelnen Empfängern aus dem "Bcc:" Feld. Jedes Array-Element hat die Eigenschaften personal, adl, mailbox und host
  • reply_toaddress - Inhalt des "Reply-To:" Felds (max. 1024 Zeichen)
  • reply_to - ein Array mit aus den einzelnen Empfängern aus dem "Reply-To:" Feld. Jedes Array-Element hat die Eigenschaften personal, adl, mailbox und host
  • senderaddress - Inhalt des "Sender:" Felds (max. 1024 Zeichen)
  • sender - ein Array mit aus den einzelnen Empfängern aus dem "Sender:" Feld. Jedes Array-Element hat die Eigenschaften personal, adl, mailbox und host
  • return_pathaddress - Inhalt des "Return-Path:" Felds (max. 1024 Zeichen)
  • return_path - ein Array mit aus den einzelnen Empfängern aus dem "Return-Path:" Feld. Jedes Array-Element hat die Eigenschaften personal, adl, mailbox und host
  • remail -
  • date - Sendedatum der Nachricht laut Kopfdaten
  • Date - enthält die gleichen Daten wie 'date'
  • subject - die Betreffzeile der Nachricht
  • Subject - enthält die gleichen Daten wie 'subject'
  • in_reply_to -
  • message_id -
  • newsgroups -
  • followup_to -
  • references -
  • Recent - R wenn kürzlich eingetroffen und gelesen, N wenn kürzlich eingetroffen und ungelesen, ' ' wenn nicht kürzlich eingetroffen
  • Unseen - U wenn nicht kürzlich eingetroffen UND ungelesen, ' ' wenn gelesen ODER ungelesen und kürzlich eingetroffen.
  • Flagged - F wenn als wichtig markiert, sonst ' '
  • Answered - A wenn beantwortet, sonst' '
  • Deleted - D wenn zum Löschen vorgemerkt, sonst ' '
  • Draft - X wenn als Entwurf markiert, sonst ' '
  • Msgno - die Nachrichtennummer
  • MailDate -
  • Size - Größe der Nachricht in Bytes
  • udate - Sendedatum als Unix-Timestamp
  • fetchfrom - "From:" Zeile limitiert auf fromlength Zeichen characters
  • fetchsubject - "Subject:" Zeile limitiert auf subjectlength Zeichen

Siehe auch


7 BenutzerBeiträge:
- Beiträge aktualisieren...
andyltm
9.07.2010 0:17
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.
trinkaus at ttNetz dot de
31.01.2010 11:32
When i try to access the same mailbox through pop3 and through imap i get different update infomations.

1. Using imap
header->udate is not the same as strtotime($header->date)
<?php
$mBox
= imap_open("{host:143/imap/novalidate-cert}INBOX}", $username, $password); // open as imap
$header = imap_header($mBox, 1); // get first mails header
echo $header->udate;
echo
strtotime($header->date);
?>

1. Using pop3
header->udate is the same as strtotime($header->date)
<?php
$mBox
= imap_open("{host:110/pop3/novalidate-cert}INBOX}", $username, $password); // open as pop3
$header = imap_header($mBox, 1); // get first mails header
echo $header->udate;
echo
strtotime($header->date);
?>

I do not know why this is so, but for this reason, i use strtotime($header->date) together with other values to create my own message-UID because this seems to work independent from the protocol.
jahservant 13 at gmail dot com
9.12.2009 0:56
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....
aeolianmeson at exoyiga dot blitzeclipse dot com
17.05.2009 19:56
I typically use UID's to identify messages, and recently discovered that the headers I had been pulling using this function and a message-number didn't match the UID's. Instead of worrying about it, I just began using imap_fetchheader() and imap_ rfc822_ parse_ headers() on its output. The only significant difference I immediately noticed was that there is no "udate" property, so I assigned one with the result of strtotime() on the 'date' property.

Dustin
php at spacefish dot biz
27.01.2009 19:57
I had to pass the msgid as array($msgid) instead of an integer. the error "Invalid messageID" is generated if i pass an integer.
ron at NOSPAM dot clicks2hits dot com
6.11.2008 2:51
Simple little code for checking gmail using headerinfo

<?php /* Created on: 11/3/2008 By Ron Hickey 6tx.net/gmail_mod
Gmail mod for admin panels or you can edit it and convert html results to XML for personal RSS reader */

// enter gmail username below e.g.--> $m_username = "yourusername";
$m_username = "";

// enter gmail password below e.g.--> $m_password = "yourpword";
$m_password = "";

// enter the number of unread messages you want to display from mailbox or
//enter 0 to display all unread messages e.g.--> $m_acs = 0;
$m_acs = 15;

// How far back in time do you want to search for unread messages - one month = 0 , two weeks = 1, one week = 2, three days = 3,
// one day = 4, six hours = 5 or one hour = 6 e.g.--> $m_t = 6;
$m_t = 2;

//----------->Nothing More to edit below
//open mailbox..........please
$m_mail = imap_open ("{imap.gmail.com:993/imap/ssl}INBOX", $m_username . "@gmail.com", $m_password)

// or throw a freakin error............you pig
or die("ERROR: " . imap_last_error());

// unix time gone by or is it bye.....its certanly not bi.......or is it? ......I dunno fooker
$m_gunixtp = array(2592000, 1209600, 604800, 259200, 86400, 21600, 3600);

// Date to start search
$m_gdmy = date('d-M-Y', time() - $m_gunixtp[$m_t]);

//search mailbox for unread messages since $m_t date
$m_search=imap_search ($m_mail, 'UNSEEN SINCE ' . $m_gdmy . '');

//If mailbox is empty......Display "No New Messages", else........ You got mail....oh joy
if($m_search < 1){
$m_empty = "No New Messages";}
else {

// Order results starting from newest message
rsort($m_search);

//if m_acs > 0 then limit results
if($m_acs > 0){
array_splice($m_search, $m_acs);
}

//loop it
foreach ($m_search as $what_ever) {

//get imap header info for obj thang
$obj_thang = imap_headerinfo($m_mail, $what_ever);

//Then spit it out below.........if you dont swallow
echo "<body bgcolor=D3D3D3><div align=center><br /><font face=Arial size=2 color=#800000>Message ID# " . $what_ever . "</font>

<table bgcolor=#D3D3D3 width=700 border=1 bordercolor=#000000 cellpadding=0 cellspacing=0>
<tr>
<td><table width=100% border=0>
<tr>
<td><table width=100% border=0>
<tr>
<td bgcolor=#F8F8FF><font face=Arial size=2 color=#800000>Date:</font> <font face=Arial size=2 color=#000000>"
. date("F j, Y, g:i a", $obj_thang->udate) . "</font></td>
<td bgcolor=#F8F8FF><font face=Arial size=2 color=#800000>From:</font> <font face=Arial size=2 color=#000000>"
. $obj_thang->fromaddress . "</font></td>
<td bgcolor=#F8F8FF><font face=Arial size=2 color=#800000>To:</font> <font face=Arial size=2 color=#000000>"
. $obj_thang->toaddress . " </font></td>
</tr>
<tr>
</table>
</td>
</tr><tr><td bgcolor=#F8F8FF><font face=Arial size=2 color=#800000>Subject:</font> <font face=Arial size=2 color=#000000>"
. $obj_thang->Subject . "</font></td></tr><tr>
</tr>
</table></td>
</tr>
</table><a href=http://gmail.com target=_blank><font face=Arial size=2 color=#800000>Login to read message</a></font><br /></div></body>"
;

}} echo
"<div align=center><font face=Arial size=4 color=#800000><b>" . $m_empty . "</b></font></div>";
//close mailbox bi by bye
imap_close($m_mail);
?>
scott at fuzzygroup dot com
11.11.2002 18:13
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



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)