note 54438 added to function.imap-fetchstructure

From: Date: Mon, 04 Jul 2005 16:07:37 +0000
Subject: note 54438 added to function.imap-fetchstructure
Groups: php.notes 
Request: Send a blank email to php-notes+get-91431@lists.php.net to get a copy of this message
A little script I threw together to break a message down and process it into a usable array <? //script will fetch an email identified by $msgid, and parse the its parts into an //array $partsarray //structure of array: //$partsarray[<name of part>][<attachment/text>] //if attachment- subarray is [filename][binary data] //if text- subarray is [type of text(HTML/PLAIN)][text string] //i.e. //$partsarray[3.1][attachment][filename]=filename of attachment in part 3.1 //$partsarray[3.1][attachment][binary]=binary data of attachment in part 3.1 //$partsarray[2][text][type]=type of text in part 2 //$partsarray[2][text][string]=decoded text string in part 2 //$partsarray[not multipart][text][string]=decoded text string in message that isn't multipart function parsepart($p,$i){ global $link,$msgid,$partsarray; //where to write file attachments to: $filestore = '[full/path/to/attachment/store/(chmod777)]'; //fetch part $part=imap_fetchbody($link,$msgid,$i); //if type is not text if ($p->type!=0){ //DECODE PART //decode if base64 if ($p->encoding==3)$part=base64_decode($part); //decode if quoted printable if ($p->encoding==4)$part=quoted_printable_decode($part); //no need to decode binary or 8bit! //get filename of attachment if present $filename=''; // if there are any dparameters present in this part if (count($p->dparameters)>0){ foreach ($p->dparameters as $dparam){ if ((strtoupper($dparam->attribute)=='NAME') ||(strtoupper($dparam->attribute)=='FILENAME')) $filename=$dparam->value; } } //if no filename found if ($filename==''){ // if there are any parameters present in this part if (count($p->parameters)>0){ foreach ($p->parameters as $param){ if ((strtoupper($param->attribute)=='NAME') ||(strtoupper($param->attribute)=='FILENAME')) $filename=$param->value; } } } //write to disk and set partsarray variable if ($filename!=''){ $partsarray[$i][attachment] = array('filename'=>$filename,'binary'=>$part); $fp=fopen($filestore.$filename,"w+"); fwrite($fp,$part); fclose($fp); } //end if type!=0 } //if part is text else if($p->type==0){ //decode text //if QUOTED-PRINTABLE if ($p->encoding==4) $part=quoted_printable_decode($part); //if base 64 if ($p->encoding==3) $part=base64_decode($part); //OPTIONAL PROCESSING e.g. nl2br for plain text //if plain text if (strtoupper($p->subtype)=='PLAIN')1; //if HTML else if (strtoupper($p->subtype)=='HTML')1; $partsarray[$i][text] = array('type'=>$p->subtype,'string'=>$part); } //if subparts... recurse into function and parse them too! if (count($p->parts)>0){ foreach ($p->parts as $pno=>$parr){ parsepart($parr,($i.'.'.($pno+1))); } } return; } //open resource $link=imap_open("{localhost:110/pop3}INBOX",'[YOUR USERNAME]','[YOUR PASSWORD]'); //fetch structure of message $s=imap_fetchstructure($link,$msgid); //see if there are any parts if (count($s->parts)>0){ foreach ($s->parts as $partno=>$partarr){ //parse parts of email parsepart($partarr,$partno+1); } } //for not multipart messages else{ //get body of message $text=imap_body($link,$msgid); //decode if quoted-printable if ($s->encoding==4) $text=quoted_printable_decode($text); //OPTIONAL PROCESSING if (strtoupper($s->subtype)=='PLAIN') $text=$text; if (strtoupper($s->subtype)=='HTML') $text=$text; $partsarray['not multipart'][text]=array('type'=>$s->subtype,'string'=>$text); } print_r($partsarray); ?> ---- Manual Page -- http://www.php.net/manual/en/function.imap-fetchstructure.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+54438 Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+54438&report=yes&reason=added+to+the+manual Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+54438&report=yes&reason=bad+code Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+54438&report=yes&reason=spam Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+54438&report=yes&reason=useless Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+54438&report=yes&reason=non-english Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+54438&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+54438&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#91431) next »