Downloading attachments to directory with IMAP in PHP, randomly works

后端 未结 4 372
暖寄归人
暖寄归人 2020-11-30 01:58

I found PHP code online to download attachments to a directory using IMAP from here. http://www.nerdydork.com/download-pop3imap-email-attachments-with-php.html

I mod

4条回答
  •  感动是毒
    2020-11-30 02:27

        //may this help you...good luck
        date_default_timezone_set('UTC');
        error_reporting(E_ALL);
        ini_set('display_errors', '1');     
        ini_set('memory_limit', '-1');     
        ini_set('max_execution_time', 0); 
        set_time_limit(3000); 
        $fName = [];
        if ($subject=='xyz subject' || $subject=='xyz subject')$folder_name = $subject;
        else$folder_name = substr($subject,stripos($subject,':')+2);
        $list = glob('downloads/xyz/'.$folder_name.'/*');
        foreach($list as  $key => $filename){$explodeName = explode('/', $filename);$fName[] = $explodeName[2];}
        foreach($list as $file){if(is_file($file))unlink($file);}     
    
        $hostname = '{imap.gmail.com:993/imap/ssl}Inbox';
        $username = 'xyz.xyz@xyz.com';
        $password = '*******************';
    
        $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());  
        $emails   = imap_search($inbox, 'SUBJECT "'.$subject.'"');
        foreach ($emails as $key => $value) {
    
            $overview = imap_fetch_overview($inbox,$value,0);
            $message_date = new DateTime($overview[0]->date);
            $date = $message_date->format('Ymd');
            $message = imap_fetchbody($inbox,$value,2);
            $structure = imap_fetchstructure($inbox, $value);
            $attachments = [];
            if(isset($structure->parts) && count($structure->parts)) 
            {
                for($i = 0; $i < count($structure->parts); $i++) 
                {
                    $attachments[$i] = array(
                            'is_attachment' => false,
                            'filename' => '',
                            'name' => '',
                            'attachment' => ''
                        );
                    if($structure->parts[$i]->ifdparameters) 
                    {
                        foreach($structure->parts[$i]->dparameters as $object) 
                        {
                            if(strtolower($object->attribute) == 'filename') 
                            {
                                $attachments[$i]['is_attachment'] = true;
                                $attachments[$i]['filename'] = $object->value;
                            }
                        }
                    }
    
                    if($structure->parts[$i]->ifparameters) 
                    {
                        foreach($structure->parts[$i]->parameters as $object) 
                        {
                            if(strtolower($object->attribute) == 'name') 
                            {
                                $attachments[$i]['is_attachment'] = true;
                                $attachments[$i]['name'] = $object->value;
                            }
                        }
                    }
    
                    if($attachments[$i]['is_attachment']) 
                    {
                        $attachments[$i]['attachment'] = imap_fetchbody($inbox, $value, $i+1);                           
                        if($structure->parts[$i]->encoding == 3) //3 = BASE64 encoding
                        { 
                            $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
                        }
                        elseif($structure->parts[$i]->encoding == 4) //4 = QUOTED-PRINTABLE encoding
                        { 
                            $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
                        }
                    }
                }
                foreach($attachments as $attachment)//iterate through each attachment and save it
                {
                    if($attachment['is_attachment'] == 1)
                    {
                        $filename = $attachment['name'];                        
                        if(empty($filename)) $filename = $attachment['filename'];
                        if(empty($filename)) $filename = time() . ".dat";
                        $new_fileName = $date.'-'.$value.'-'.$filename;                        
                        if(!in_array($new_fileName, $fName))
                        {
                            $folder='./downloads/xyz/'.$folder_name.'/';
                            if(!is_dir($folder))mkdir($folder);
                            $fp = fopen("./". $folder ."/". $date . "-". $value."-". $filename, "w+");
                            fwrite($fp, $attachment['attachment']);
                            fclose($fp);
                        }
                    }
                }
            }
            imap_mail_move($inbox,$overview[0]->msgno,'xyz_label'); 
            imap_expunge($inbox); 
    
            /*  ->Always try to read/open the email by subject/or according to need
                ->Move or Delete Old/not required mail, so that u don't need to search/load lots of email
                ->Avoiding unnecessary and old email of the same subject , is to move/delete the same.
            */
        }
        imap_close($inbox);//Never forget to close the connection
    

提交回复
热议问题