PHP : Function Reference : IMAP, POP3 and NNTP Functions : imap_header
g dot li
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.
gungp720
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 :)
jwilson
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";
mayorga
If you want to retrieve From address, not From name, use this:
$from=$header->from; $fromaddr=sprintf("%s@%s",$from[0]->mailbox,$from[0]->host);
shader76
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.
alpha_lam
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);
}
?>
15-may-2002 01:08
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.
lint
here's something even easier:
<pre>
$header = imap_header($mail_connection, msgnum);
$from = htmlspecialchars($header->fromaddress);
echo $from;
</pre>
hnesland
A way to print your own specified date:
$date = date('d F Y (G:i:s)',
strtotime(strip_tags($headerinfo->udate)));
khigashi dot oang
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?
?>
|