mail_reader = $mail_reader; $this->massage_type = $massage_type; } public function saveAttachmentsTo( $destination ) { $emails = $this->mail_reader->getEmails( $this->massage_type ); /* if emails are returned, cycle through each... */ if ($emails) { /* begin output var */ $output = ''; /* put the newest emails on top */ rsort($emails); // CustomVarDamp::dump($emails); foreach ($emails as $email_number) { $structure = $this->mail_reader->getCurrentEmailStructure($email_number); $attachments = array(); 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($this->mail_reader->connection, $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']); } } } if (count($attachments) != 0) { foreach($attachments as $key => &$val){ if ($val['is_attachment'] == 1) { if( isset($this->file_name_prefix) ){ $name = $destination . '/' . $this->file_name_prefix . mb_decode_mimeheader($val['name']); }else{ $name = $destination . '/' . mb_decode_mimeheader($val['name']); } mb_internal_encoding("UTF-8"); //file_put_contents(\Yii::getAlias('@temp_upload') . '/' . $name, $val['attachment']); file_put_contents( $name, $val['attachment'] ); } } } } } } } }