Example #1
0
 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) {
Example #3
0
 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++;