Downloading attachments to directory with IMAP in PHP, randomly works

后端 未结 4 373
暖寄归人
暖寄归人 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:34

    this is final working sample

    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, $email_number, $i+1);
                 if($structure->parts[$i]->encoding == 3) { // 3 = BASE64
                   $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
                 }
                 elseif($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
                   $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
                 }
               }             
             } // for($i = 0; $i < count($structure->parts); $i++)
           } // if(isset($structure->parts) && count($structure->parts))
    
    
        if(count($attachments)!=0){
            foreach($attachments as $at){
                if($at['is_attachment']==1){
                    file_put_contents($at['filename'], $at['attachment']);
                }
            }
        }
    
      }
    
     // echo $output;
    } 
    
    /* close the connection */
    imap_close($inbox);
    
    ?>
    

提交回复
热议问题