Example #1
0
 /**
  *  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;
 }