public function getFolders($params) { $password = $params['password']; if (!empty($params['id'])) { $entity = $this->getEntityManager()->getEntity('InboundEmail', $params['id']); if ($entity) { $password = $entity->get('password'); } } $imapParams = array('host' => $params['host'], 'port' => $params['port'], 'user' => $params['username'], 'password' => $password); if (!empty($params['ssl'])) { $imapParams['ssl'] = 'SSL'; } $foldersArr = array(); $storage = new \Zend\Mail\Storage\Imap($imapParams); $folders = new \RecursiveIteratorIterator($storage->getFolders(), \RecursiveIteratorIterator::SELF_FIRST); foreach ($folders as $name => $folder) { $foldersArr[] = $folder->getGlobalName(); } return $foldersArr; }
} // select active cores $res = DB\dbQuery('SELECT id, name FROM `' . PREFIX . '_casebox`.cores WHERE `active` = 1', array()) or die(DB\dbQueryError()); while ($r = $res->fetch_assoc()) { $mailServer['cores'][$r['name']] = array(); } $res->close(); $mailServers = array($mailServer); // collect all new mails per each core foreach ($mailServers as &$cfg) { try { $user = empty($cfg['user']) ? $cfg['email'] : $cfg['user']; $mailConf = array('host' => $cfg['host'], 'port' => $cfg['port'], 'ssl' => @$cfg['ssl'] == true, 'user' => $user, 'password' => $cfg['pass']); $mailbox = new \Zend\Mail\Storage\Imap($mailConf); $mailCount = $mailbox->countMessages(); if ($mailCount > 0) { $cfg['mailbox'] =& $mailbox; $rez = processMails($cfg); if (!empty($rez)) { echo $user . ' on ' . $mailConf['host'] . '. mail count: ' . $mailCount . $rez; } } } catch (\Exception $e) { // System::notifyAdmin('Casebox: check mail Exception for core' . $coreName, $e->getMessage()); echo " Error connecting to email\n" . $e->getMessage(); } } // iterate each core and add comment items if there is smth foreach ($mailServers as $mailConf) {
public function import() { $conn = new \Zend\Mail\Storage\Imap($this->getConfig()['support']['customer_mails']); $em = $this->getServiceLocator()->get('Doctrine\\ORM\\EntityManager'); $em->getConnection()->beginTransaction(); $messageRepo = $em->getRepository('\\Common\\Entity\\Message'); for ($i = $conn->countMessages(); $i; --$i) { try { $email = $conn->getMessage($i); // check for doubles $messageId = isset($email->message_id) ? $email->message_id : $conn->getUniqueId($i); $messageId = trim($messageId, " \t\r\n<>"); $messageId = preg_replace('/[^a-zA-Z0-9-_@]\\./', '_', $messageId); /*if ($messageId == '*****@*****.**') { $this->message = new Message(); $this->message->setCode($messageId) ->setImportType(Message::IMPORT_TYPE_EMAIL) ->setSubject($email->subject) ->setSendedOn(new \DateTime(date('Y-m-d H:i:s', isset($email->date) ? strtotime($email->date) : time()))); $body = $this->getBody($email); $this->message->setBody($body); $em->persist($this->message); $this->setEmails($this->parseEmails($email->from), Address::TYPE_FROM); $this->setEmails($this->parseEmails($email->to), Address::TYPE_TO); $em->persist($this->message); $em->flush(); $em->getConnection()->commit(); die; } continue;*/ $date = new \DateTime(date('Y-m-d H:i:s', isset($email->date) ? strtotime($email->date) : time())); if ($messageRepo->findBy(array('code' => $messageId))) { continue; } $from = $this->parseEmails($email->from); if ($from[0]->host == 'archonia.com') { continue; } // create the message $this->message = new Message(); // set the email addresses $this->setEmails($this->parseEmails($email->from), Address::TYPE_FROM); $this->setEmails($this->parseEmails($email->to), Address::TYPE_TO); if (isset($email->cc) && !empty($email->cc)) { $this->setEmails($this->parseEmails($email->cc), Address::TYPE_CC); } if (isset($email->bcc) && !empty($email->bcc)) { $this->setEmails($this->parseEmails($email->bcc), Address::TYPE_BCC); } // set message data $this->message->setCode($messageId)->setImportType(Message::IMPORT_TYPE_EMAIL)->setSubject($email->subject)->setSendedOn($date); $body = $this->getBody($email); $this->message->setBody($body); $em->persist($this->message); $em->flush(); parent::rules($em); // parent message if (isset($email->References)) { $messageParent = $messageRepo->findOneBy(array('code' => $email->References)); if ($messageParent) { $this->message->setParent($messageParent); $msgProfile = $messageParent->getMessageProfiles()->filter(function ($entry) { if ($entry->getOwner()) { return true; } else { return false; } }); if ($msgProfile->count() === 1) { $messageProfile = new Message\Profile(); $messageProfile->setProfile($msgProfile->first()->getProfile())->setOwner(true)->setMessage($this->message); $this->message->getMessageProfiles()->add($messageProfile); $state = new Message\State(); $state->setMessage($this->message)->setState(Message\State::STATE_OWNED); $this->message->getStates()->add($state); $em->persist($this->message); $em->flush(); } } } $em->getConnection()->commit(); } catch (\Exception $e) { \Common\Service\Logger::getInstance()->err('mail import error' . $this->message->getId(), array('error' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine())); $em->getConnection()->rollback(); // make sure our em is still open. Due to hacky emails, inserts can go wrong and make to em closed. if (!$em->isOpen()) { $em = $em->create($em->getConnection(), $em->getConfiguration()); } } $em->getConnection()->beginTransaction(); } }
//skip this core if cron preparation fails } /* check if this core has an email template defined */ $email_template_id = false; $res = DB\dbQuery('SELECT id FROM templates WHERE `type` = \'email\'') or die(DB\dbQueryError()); if ($r = $res->fetch_assoc()) { $email_template_id = $r['id']; } $res->close(); if (!$email_template_id) { echo " there is no Email template defined in this core.\n"; continue; } /* end of check if this core has an email template defined */ try { $mailbox = new Zend\Mail\Storage\Imap(array('host' => config\mail_host, 'port' => Util\coalesce(config\mail_port, 993), 'ssl' => config\mail_ssl == true, 'user' => config\mail_user, 'password' => config\mail_password)); } catch (\Exception $e) { System::notifyAdmin('Casebox: check mail Exception for core' . $coreName, $e->getMessage()); echo " Error connecting to email\n"; exit; // skip this core if mail cannot be accesed } $finfo = finfo_open(FILEINFO_MIME_TYPE); $files = new Files(); $mail_count = $mailbox->countMessages(); echo ' Mail count: ' . $mail_count . "\n"; $delete_ids = array(); $processed_ids = array(); $i = 0; foreach ($mailbox as $k => $mail) { $i++;