IMAP 函数
在线手册:中文  英文

imap_header

(PHP 4, PHP 5)

imap_header别名 imap_headerinfo()

说明

此函数是该函数的别名: imap_headerinfo().


IMAP 函数
在线手册:中文  英文

用户评论:

jose dot yapur at usmp dot pe (2009-12-25 13:28:51)

Some example of how to use it:

<?php
    $imap 
imap_open("{mail.example.com:143}INBOX""username""password");
    
$message_count imap_num_msg($imap);

    for (
$i 1$i <= $message_count; ++$i) {
        
$header imap_header($imap$i);
        
$body trim(substr(imap_body($imap$i), 0100));
        
$prettydate date("jS F Y"$header->udate);

        if (isset(
$header->from[0]->personal)) {
            
$personal $header->from[0]->personal;
        } else {
            
$personal $header->from[0]->mailbox;
        }

        
$email "$personal <{$header->from[0]->mailbox}@{$header->from[0]->host}>";
        echo 
"On $prettydate$email said \"$body\".\n";
    }

    
imap_close($imap);
?>

Anang Syarifudin A (2008-02-20 21:15:50)

My quick and dirty code to decode utf-8 subject :
function decode_utf8($str) {
preg_match_all("/=\?UTF-8\?B\?([^\?]+)\?=/i",$str, $arr);

for ($i=0;$i<count($arr[1]);$i++){
$str=ereg_replace(ereg_replace("\?","\?",
$arr[0][$i]),base64_decode($arr[1][$i]),$str);
}
return $str;
}
$subject = decode_utf8($header->subject);

stepotronic at nimbleminds dot net (2008-02-05 11:43:03)

At jeremy at caramiel dot com:
You are wrong, since it will just work if the encoding of the characters is also used in the current context.
There is a reason why it comes with the charset :)
There are way better solutions with imap_mime_header_decode

jeremy at caramiel dot com (2008-02-01 06:37:53)

Here is a clean way to decode encoded imap headers that will work in all cases :
function fix_text($str)
{
$subject = '';
$subject_array = imap_mime_header_decode($str);
foreach ($subject_array AS $obj)
$subject .= rtrim($obj->text, "\t");
return $subject;
}

khigashi dot oang at gmail dot com (2007-02-27 04:19:46)

A simple way to fix encoded subject/from header problem and strip whitespace:

<?php
function fix_text($var){
if(
ereg("=\?.{0,}\?[Bb]\?",$var)){
$var split("=\?.{0,}\?[Bb]\?",$var);

while(list(
$key,$value)=each($var)){
if(
ereg("\?=",$value)){
$arrTemp=split("\?=",$value);
$arrTemp[0]=base64_decode($arrTemp[0]);
$var[$key]=join("",$arrTemp);
}}
$var=join("",$var);


if(
ereg("=\?.{0,}\?Q\?",$var)){
$var quoted_printable_decode($var);
$var ereg_replace("=\?.{0,}\?[Qq]\?","",$var);
$var ereg_replace("\?=","",$var);
}
return 
trim($var);
}
?>

Ex.

<?php
//For =?iso-8859-1?Q Problem

echo $title;
//show: =?iso-8859-1?Q?Boletim:_Motiva=E7=E3o
//,_Gest=E3o_&_Vendas_-_Gilcl=E9r_Regi?= 
//=?iso-8859-1?Q?na?=

echo fix_text($title);
//show: na?
?>

gungp720 at yahoo dot com (2002-11-20 01:02:04)

To convert date format from mail header to dd/mm/yyyy H:i use this :
<?
$tgl1 = strtotime($msg->date); //convert to timestamp
$tgl2 = date("d/m/Y H:i",$tgl1); //format date from timestamp
echo $tgl2;
?>
hope this help :)

shader76 (2002-10-03 17:49:51)

if you need to grab other fields that are not parsed out by imap_header then use
imap_fetchheader to retrieve the entire email header and do the work yourself.

(2002-05-15 05:08:13)

I just wanted to state what all these variables were producing considering it isnt documented anywhere that I have been able to find on this site:
the object that imap_mailboxmsgs returns has the following fields for the pop3 driver:
array(
Unread =>
Deleted =>
Nmsgs =>
Size=>
Date=>
Driver=>
Mailbox=>
Recent=>
)
imap_header returns the following array for the pop3 driver:
stdClass Object (
date=>
Date=>
subject=>
Subject=>
toaddress=>
to=> array stdClass Object (
mailbox=>
host=>
)
fromaddress=>
from=> array stdClass Object (
personal=>
mailbox=>
host=>
)
reply_toaddress=>
reply_to=> array stdClass Object (
personal=>
mailbox=>
host=>
)
senderaddress=>
sender => array stdClass Object (
personal=>
mailbox=>
host=>
)
Recent=>
Unseen=>
Flagged=>
Answered=>
Deleted=>
Draft=>
Msgno=>
MailDate=>
Size=>
udate=>
)
Also, if you are using a pop3 server and you are having difficulties deleting messages, you will need to call imap_expunge immediately after your call to imap_delete. (this was posted somewhere else.. thanks for that!!)
feel free to drop me a line if this helped you. Happy coding.

hnesland at samsen dot com (2002-02-04 09:36:06)

A way to print your own specified date:
$date = date('d F Y (G:i:s)',
strtotime(strip_tags($headerinfo->udate)));

jwilson at ecominteractive dot net (2001-09-06 20:20:41)

It is explained else where on the site but something I struggled with.
To find the size of a message use:
$sizefeed1 = imap_fetchstructure($feed,$messagenumber);
$sizefeed2 = $sizefeed1->bytes;
$size = "$sizefeed2 bytes";

alpha_lam at yahoo dot com dot hk (2001-02-10 20:38:57)

I've got a problem when facing some encoded subject or from header like:
=?big5?B?uXG4o7ZXpEg3MTEw?= or
=?iso-8859-1?Q?A7=EB=B2=BC=B6=7D=A9l=21?=
this problem only appears when the poster is using non-Misco$oft reader, and i lastly find the way to solve.
For the =?big5?B?, the encode method is base64, so you can use base64_decode to decode it to the original one, you can use the following to check and decode:

<?php

if(ereg("=\?.{0,}\?[Bb]\?",$strHead)){
  
$arrHead=split("=\?.{0,}\?[Bb]\?",$strHead);
  while(list(
$key,$value)=each($arrHead)){
    if(
ereg("\?=",$value)){
      
$arrTemp=split("\?=",$value);
      
$arrTemp[0]=base64_decode($arrTemp[0]);
      
$arrHead[$key]=join("",$arrTemp);
    }
  }
  
$strHead=join("",$arrHead);
}

?>

For =?iso-8859-1?Q?, it uses quoted printable to encode, you can use quoted_printable_decode to decode, example:

<?php

if(ereg("=\?.{0,}\?Q\?",$strHead)){
  
$strHead=quoted_printable_decode($strHead);
  
$strHead=ereg_replace("=\?.{0,}\?[Qq]\?","",$strHead);
  
$strHead=ereg_replace("\?=","",$strHead);
}

?>

G dot li at open dot ac dot uk (2000-07-05 15:26:05)

Yes, the ref. is quit confusing (to me at least). It will be wise (after spent many hours) to test the type of variable first before it disappointe you. I find $header->From retrurns String, $header->from returns array and its elements are object. Therefore if you want get sender's name for example,
you need: $from = $header->from;

if (is_array($from)){

while(list($key, $val) = each($from)) {

echo $from[0]->personal;
echo $from[0]->adl;
echo $from[0]->mailbox;
echo $from[0]->host;
}
}
you will find $header_from is an one element array and this element is an object. Hope anyone else will not wast time here to figure out why retrun is empty.

易百教程