webForumDet fria alternativet

skriva ut mail med imap

PHP

2 svar · 640 visningar · startad av Mycodez

Medlem sedan feb. 2010445 inlägg
Frågan#1

Tjena,
Jag har nu fixat lite till en lite webbapplikation jag göra för att kunna skapa pdfer av mina mail, men innan jag kan göra det behöver jag kunna läsa alla mail jag har.

Men jag vet inte hur jag ska få till det mes rätt tecken snitt eller så, har suttit hela efter middagen tills nu, och det jag lyckas fått fram är:

foreach ($emails as $email_id) {
                /* get information specific to this email */
                $result = imap_fetch_overview($nc,$email_id,0);
                foreach ($result as $overview) {
                    echo "#{$overview->subject}#<br/>({$overview->date}) - From: {$overview->from}<br/>";
                }
                /* get mail message */
                $message = imap_fetchbody($nc,$email_id,2);
                /* get mail structure */
                $structure = imap_fetchstructure($nc, $email_id);
                if($structure->encoding == '0'){
                    echo $message;
                }
                
                echo '<pre>'; print_r($structure); echo '</pre><hr/>'; 
            }

Det jag vill göra det är att läsa mailet, och få ut alla eventuellt bilagor som är med.
har inte fått kläm på detta än :l

Jag är grymt tacksam för snabba svar.
MVh Robin

Medlem sedan feb. 2010445 inlägg
#2

Fått till lite kod nu:

$nc = imap_open($val->name, $user, $pass);
        $emails = imap_search($nc,'ALL');
        if($emails){
            echo '('.count($emails).') Mails ( '.$val->name.' )<br/>';
            rsort($emails);
            foreach ($emails as $email_id) {
                 $head = getHeaders($nc, $email_id);  // Get Header Info Return Array Of Headers **Key Are (subject,to,toOth,toNameOth,from,fromName)
                echo "Subjects :: ".$head['subject']."<br>";
                echo "TO :: ".$head['to']."<br>";
                echo "To Other :: ".$head['toOth']."<br>";
                echo "ToName Other :: ".$head['toNameOth']."<br>";
                echo "From :: ".$head['from']."<br>";
                echo "FromName :: ".$head['fromName']."<br>";
                echo "<br><BR>";
                echo "<br>*******************************************************************************************<BR>";
                echo getBody($nc, $email_id);  // Get Body Of Mail number Return String Get Mail id in interger
                $str=GetAttech($nc, $email_id,"./"); // Get attached File from Mail Return name of file in comma separated string  args. (mailid, Path to store file)
                $ar=explode(",",$str);
                foreach($ar as $key=>$value){
                    echo ($value=="")?"":"Atteched File :: ".$value."<br>";
                }
                echo "<br>------------------------------------------------------------------------------------------<BR>";            
            }    
        }else{
            echo 'No Mail<br/>';
        }
        imap_close($nc);

och tillhörande funktioner

function getHeaders($connect,$mid) // Get Header info  ARG= $con och $id
{
    $mail_header=imap_header($connect,$mid);
    $sender=$mail_header->from[0];
    $sender_replyto=$mail_header->reply_to[0];
    if(strtolower($sender->mailbox)!='mailer-daemon' && strtolower($sender->mailbox)!='postmaster')
    {
        $mail_details=array(
                'from'=>strtolower($sender->mailbox).'@'.$sender->host,
                'fromName'=>$sender->personal,
                'toOth'=>strtolower($sender_replyto->mailbox).'@'.$sender_replyto->host,
                'toNameOth'=>$sender_replyto->personal,
                'subject'=>$mail_header->subject,
                'to'=>strtolower($mail_header->toaddress)
            );
    }
    return $mail_details;
}
function getBody($connect,$mid) // Get Message Body
    {
        $body = get_part($connect, $mid, "TEXT/HTML");
        if ($body == "")
            $body = get_part($connect, $mid, "TEXT/PLAIN");
        if ($body == "") {
            return "";
        }
        return $body;
    }
function get_mime_type(&$structure) //Get Mime type Internal Private Use
    {
        $primary_mime_type = array("TEXT", "MULTIPART", "MESSAGE", "APPLICATION", "AUDIO", "IMAGE", "VIDEO", "OTHER");
        if($structure->subtype) {
            return $primary_mime_type[(int) $structure->type] . '/' . $structure->subtype;
        }
        return "TEXT/PLAIN";
    }
function get_part($stream, $msg_number, $mime_type, $structure = false, $part_number = false) //Get Part Of Message Internal Private Use
    {
        if(!$structure) {
            $structure = imap_fetchstructure($stream, $msg_number);
        }
        if($structure) {
            if($mime_type == get_mime_type($structure))
            {
                if(!$part_number)
                {
                    $part_number = "1";
                }
                $text = imap_fetchbody($stream, $msg_number, $part_number);
                if($structure->encoding == 3)
                {
                    return imap_base64($text);
                }
                else if($structure->encoding == 4)
                {
                    return imap_qprint($text);
                }
                else
                {
                    return $text;
                }
            }
            if($structure->type == 1) /* multipart */
            {
                while(list($index, $sub_structure) = each($structure->parts))
                {
                    if($part_number)
                    {
                        $prefix = $part_number . '.';
                    }
                    $data = get_part($stream, $msg_number, $mime_type, $sub_structure, $prefix . ($index + 1));
                    if($data)
                    {
                        return $data;
                    }
                }
            }
        }
        return false;
    }
function GetAttech($connect,$mid,$path) // Get Atteced File from Mail
    {
        $struckture = imap_fetchstructure($connect,$mid);
        $ar="";
        foreach($struckture->parts as $key => $value)
        {
            $enc=$struckture->parts[$key]->encoding;
            if($struckture->parts[$key]->ifdparameters)
            {
                $name=$struckture->parts[$key]->dparameters[0]->value;
                $message = imap_fetchbody($connect,$mid,$key+1);
                if ($enc == 0)
                    $message = imap_8bit($message);
                if ($enc == 1)
                    $message = imap_8bit ($message);
                if ($enc == 2)
                    $message = imap_binary ($message);
                if ($enc == 3)
                    $message = imap_base64 ($message);
                if ($enc == 4)
                    $message = quoted_printable_decode($message);
                if ($enc == 5)
                    $message = $message;
                $fp=fopen($path.$name,"w");
                fwrite($fp,$message);
                fclose($fp);
                $ar=$ar.$name.",";
            }
        }
        $ar=substr($ar,0,(strlen($ar)-1));
        return $ar;
    }
Medlem sedan feb. 2010445 inlägg
#3

Detta skript laddade ner bilagorna :) För ni som vill veta det:)

261 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)