/** * Fetches the mail recursively, through the folders. * * @param ImapAdapter $imap imap helper class * @param array $messages (internal) * @param string $search imap-searchterm * @param Folder $folders the subfolders * @param bool $markProcessed Sets the flag as processed * @param bool $assume Assumes domainName / order-Number in the mail * @param \Closure $callbackFunction callback * * @return array */ public function fetchMails(ImapAdapter $imap, array $messages, $search, Folder $folders = null, $markProcessed = true, $assume = false, \Closure $callbackFunction = null) { if ($folders === null) { $folders = $imap->getFolders(); } foreach ($folders as $folder) { $imap->selectFolder($folder); $result = $imap->search(array($search)); foreach ($result as $id) { $message = $imap->getMessage($id); try { $messages[$id]['id'] = $id; $messages[$id]['folder'] = $folder; // Zend-mail sometimes got problems, with incorrect e-mails try { $messages[$id]['subject'] = utf8_decode($message->getHeader('subject', 'string')); } catch (\Exception $e) { $messages[$id]['subject'] = '-No subject-'; } try { $messages[$id]['received'] = strtotime($message->getHeader('date', 'string')); } catch (\Exception $e) { $messages[$id]['received'] = '-No date-'; } $messages[$id]['plainText'] = $this->getPlainText($message); $messages[$id]['attachments'] = $this->getAttachments($message); $messages[$id]['type'] = $this->getTypeOfMail($messages[$id]); if ($assume) { $messages[$id]['orderNumber'] = $this->assumeOrderNumber($messages[$id]); $messages[$id]['domainName'] = $this->assumeDomainName($messages[$id]); } $success = true; if (is_callable($callbackFunction)) { $success = $callbackFunction($id, $messages[$id]); } } catch (\Exception $e) { // General decoding error -> removeMessage unset($messages[$id]); // Always mark as processed $success = true; } if ($markProcessed && $success) { $this->markProcessed($imap, $message, $id); } } $messages = $this->fetchMails($imap, $messages, $search, $folder, $markProcessed, $assume, $callbackFunction); } return $messages; }