mail_reader = $mail_reader; $this->saved_files_arr = []; } /** * @param mixed $file_name_prefix */ public function setFileNamePrefix($file_name_prefix) { $this->file_name_prefix = $file_name_prefix; } public function saveAttachmentsTo( $destination, $massage_type ) { $this->massage_type = $massage_type; $emails = $this->mail_reader->getEmails($this->massage_type); /* if emails are returned, cycle through each... */ $result = false; 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'] = $this->mail_reader->getEmailBody($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']); } $ext = pathinfo($name, PATHINFO_EXTENSION); mb_internal_encoding("UTF-8"); file_put_contents($name, $val['attachment']); // все извлеченные файлы сохраняем в $this->saved_files_arr $this->setSavedFile( $name , $ext ); $result = true; } } } } } } return $result; } /** * @return array - массив извлеченных файлов */ public function getSavedFilesArr() { return $this->saved_files_arr; } /** * @param array $saved_files_arr */ public function setSavedFile($saved_file, $saved_file_ext) { $this->saved_files_arr[$saved_file] = $saved_file_ext; } }