public function encryptFile($data, $filename, $key, $base64)
 {
     $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
     $iv = openssl_random_pseudo_bytes($iv_size);
     $encryptionMethod = "aes-256-cbc";
     if ($base64) {
         //if already encoded64
         if ($encryptedMessage = bin2hex($iv) . openssl_encrypt($data, $encryptionMethod, $key, 0, $iv)) {
         } else {
             return false;
         }
     } else {
         //not encoded64
         if ($encryptedMessage = bin2hex($iv) . openssl_encrypt(base64_encode($data), $encryptionMethod, $key, 0, $iv)) {
         } else {
             return false;
         }
     }
     //unset($data['filecyp']);
     if (FileWorks::writeFile($filename, $encryptedMessage) === false) {
         return false;
     } else {
         return true;
     }
 }
 public function download()
 {
     $fileHash = $this->fileHash;
     $key = hex2bin(substr($fileHash, 0, 64));
     $fileName = substr($fileHash, 64);
     $this->fileData = str_ireplace('name/', '', $this->fileData);
     $fileData = explode('-', $this->fileData);
     $name = base64_decode($fileData[0]);
     $type = base64_decode($fileData[1]);
     if ($file = FileWorks::readFile($fileName)) {
         try {
             $data = $file;
             $iv = hex2bin(substr($data, 0, 32));
             $encrypted = substr($data, 32);
             $encryptionMethod = "aes-256-cbc";
             $g = openssl_decrypt($encrypted, $encryptionMethod, $key, 0, $iv);
             header("Cache-Control: public");
             header("Content-Description: File Transfer");
             header("Content-Disposition: attachment; filename=" . $name);
             header("Content-Type: " . $type);
             header("Content-Transfer-Encoding: binary");
             echo base64_decode($g);
         } catch (Exception $e) {
             echo '{"file":"file not found1"}';
         }
     } else {
         echo 'File you requested is no longer available.';
     }
 }
 public function deleteUnreg()
 {
     if (count($this->messageIds) > 0) {
         foreach ($this->messageIds as $i => $row) {
             $par[] = "(:id_{$i},:mod_{$i})";
             $param[":id_{$i}"] = $row['id'];
             $param[":mod_{$i}"] = hash('sha512', $row['modKey']);
             $mngData = array('oldId' => $row['id'], 'modKey' => isset($row['modKey']) ? hash('sha512', $row['modKey']) : '');
         }
         if ($fileRemove = Yii::app()->db->createCommand("SELECT file FROM mailTable WHERE (id,modKey) IN (" . implode($par, ',') . ")")->queryAll(true, $param)) {
             foreach ($fileRemove as $filejson) {
                 if ($files = json_decode($filejson['file'], true)) {
                     foreach ($files as $names) {
                         FileWorks::deleteFile($names);
                     }
                 }
             }
         }
         if ($newEmailsToClean = Yii::app()->mongo->findOne('mailQueue', $mngData)) {
             $emailToDeleteId = array('_id' => new MongoId($newEmailsToClean['_id']), 'modKey' => $newEmailsToClean['modKey']);
             if ($files = json_decode($newEmailsToClean['file'], true)) {
                 foreach ($files as $filename) {
                     FileWorks::deleteFile($filename);
                 }
             }
         }
         if (Yii::app()->db->createCommand("DELETE FROM mailTable WHERE (id,modKey) IN (" . implode($par, ',') . ")")->execute($param) || Yii::app()->mongo->removeAll('mailQueue', $emailToDeleteId)) {
             echo '{"results":"success"}';
         } else {
             echo '{"results":"fail"}';
         }
     } else {
         echo '{"results":"success"}';
     }
 }
Example #4
0
 public function readFile()
 {
     if ($file = FileWorks::readFile($this->fileName)) {
         echo $file;
     } else {
         echo '';
     }
 }
 public function accept($current)
 {
     if (Yii::app()->params['production']) {
         set_time_limit(300);
         $rr = json_decode($current['mandrill_events'], true);
     } else {
         set_time_limit(300);
         $current = file_get_contents('new1.txt');
         //$enc=urldecode($current)			;
         $enc = base64_decode($current);
         //$enc=json_encode($current);
         $ff = json_decode($enc, true);
         $rr = json_decode($ff['mandrill_events'], true);
         //$rr=$ff['mandrill_events'];
     }
     //print_r($rr);
     //Yii::app()->end();
     //print_r($rr);
     //Yii::app()->end();
     //;	print_r($rr);
     /*
     		$current = file_get_contents('newfile.txt');
     		$f=base64_decode($current);
     		//$z=urldecode($current);
     		$ff=json_decode($f,true);
     		$rr=json_decode($ff['mandrill_events'],true);
     		//$error = json_last_error_msg();
     		print_r($rr);
     */
     //$current = file_get_contents('emailtest.txt');
     //$current=json_decode($current);
     //print_r($current);
     //echo $current;
     /*
     	//echo Yii::app()->createAbsoluteUrl('Acceptemailfrompostfix');
     	$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
     	//$txt = "John Doe\n";
     	fwrite($myfile, base64_encode(json_encode($current)));
     	//$txt = "Jane Doe\n";
     	//fwrite($myfile, $txt);
     	fclose($myfile);
     	//echo 'ura';
     	//Crawler::accept(); //reading ready to send mail
     */
     //$rr=json_decode($ff,true);
     //for($k=0;$k<5000;$k++){
     //echo $k.'
     //';
     //print_r($rr);
     foreach ($rr as $index => $row) {
         //unset($row['msg']['raw_msg']);
         if (isset($row['msg']['to']) || isset($row['email'])) {
             $recipient = isset($row['msg']['to']) ? $row['msg']['to'] : array(0 => array(0 => $row['email']));
             if (isset($row['msg']['cc'])) {
                 $recipient = array_merge($recipient, isset($row['msg']['cc']) ? $row['msg']['cc'] : array(0 => array(0 => $row['email'])));
             }
             foreach ($recipient as $i => $rcpt) {
                 $fieldTo[] = $rcpt[0] != $rcpt[1] ? strip_tags($rcpt[1]) . '<' . strip_tags($rcpt[0]) . '>' : strip_tags($rcpt[0]);
             }
             foreach ($recipient as $i => $rcpt) {
                 if ($mailhash = Yii::app()->db->createCommand("SELECT addresses.mailKey, user.mailKey as userMailKey\n\t\t\tFROM addresses\n\t\t\tLEFT JOIN user ON user.id=addresses.userId\n\t\t\tWHERE addresses.addressHash= '" . hash('sha512', $rcpt[0]) . "'")->queryRow()) {
                     if (isset($mailhash['mailKey'])) {
                         unset($mailhash['userMailKey']);
                     } else {
                         $mailhash['mailKey'] = $mailhash['userMailKey'];
                         unset($mailhash['userMailKey']);
                     }
                     $mailKey = $mailhash['mailKey'];
                     $emailPreObj['from'] = isset($row['msg']['from_name']) && $row['msg']['from_name'] != $row['msg']['from_email'] ? strip_tags($row['msg']['from_name']) . '<' . $row['msg']['from_email'] . '>' : $row['msg']['from_email'];
                     $emailPreObj['subj'] = htmlspecialchars(is_array($row['msg']['subject']) ? $row['msg']['subject'][0] : $row['msg']['subject'], ENT_QUOTES, "UTF-8");
                     $text = isset($row['msg']['text']) ? strip_tags($row['msg']['text']) : '';
                     $html = isset($row['msg']['html']) ? $row['msg']['html'] : '';
                     $emailPreObj['body']['text'] = $text;
                     $emailPreObj['body']['html'] = $html;
                     $emailPreObj['rawHeader'] = substr(Yii::app()->EmailParser->getHeader($row['msg']['raw_msg']), 0, 10000);
                     $emailPreObj['meta']['subject'] = substr(htmlentities(is_array($row['msg']['subject']) ? $row['msg']['subject'][0] : $row['msg']['subject']), 0, 150);
                     $emailPreObj['meta']['from'] = $emailPreObj['from'];
                     $metb = $text != '' ? $text : $html;
                     $emailPreObj['meta']['body'] = substr(strip_tags($metb), 0, 50);
                     $emailPreObj['meta']['timeRcvd'] = $row['ts'];
                     $emailPreObj['meta']['timeSent'] = isset($row['msg']['headers']['Date']) ? strtotime($row['msg']['headers']['Date']) : $row['ts'];
                     $emailPreObj['meta']['opened'] = false;
                     $emailPreObj['meta']['type'] = 'received';
                     $emailPreObj['meta']['pin'] = '';
                     $emailPreObj['to'] = implode($fieldTo, '; ');
                     $emailPreObj['meta']['to'] = $rcpt[0] != $rcpt[1] ? strip_tags($rcpt[1]) . '<' . strip_tags($rcpt[0]) . '>' : strip_tags($rcpt[0]);
                     $emailPreObj['meta']['modKey'] = bin2hex(Acceptemailfrompostfix::makeModKey(16));
                     $emailPreObj['modKey'] = $emailPreObj['meta']['modKey'];
                     //print_r($emailPreObj);
                     $emailPreObj['from'] = base64_encode($emailPreObj['from']);
                     $emailPreObj['subj'] = base64_encode($emailPreObj['subj']);
                     $emailPreObj['body']['text'] = base64_encode($emailPreObj['body']['text']);
                     $emailPreObj['body']['html'] = base64_encode($emailPreObj['body']['html']);
                     $emailPreObj['meta']['subject'] = base64_encode($emailPreObj['meta']['subject']);
                     $emailPreObj['meta']['from'] = base64_encode($emailPreObj['meta']['from']);
                     $emailPreObj['meta']['body'] = base64_encode($emailPreObj['meta']['body']);
                     $emailPreObj['rawHeader'] = base64_encode($emailPreObj['rawHeader']);
                     $emailPreObj['to'] = base64_encode($emailPreObj['to']);
                     $emailPreObj['meta']['to'] = base64_encode($emailPreObj['meta']['to']);
                     $key = Acceptemailfrompostfix::makeModKey(32);
                     if (isset($row['msg']['attachments'])) {
                         foreach ($row['msg']['attachments'] as $k => $file) {
                             $fname = hash('sha512', $file['name'] . $emailPreObj['to'] . $emailPreObj['meta']['timeRcvd'] . microtime());
                             $fToSent[] = $fname;
                             $size = $file['base64'] ? strlen(base64_decode($file['content'])) : strlen($file['content']);
                             if (FileWorks::encryptFile($file['content'], $fname, $key, $file['base64'])) {
                                 $emailPreObj['attachment'][base64_encode($k)] = array('name' => base64_encode($file['name']), 'type' => base64_encode($file['type']), 'filename' => base64_encode($fname), 'size' => base64_encode($size), 'base64' => $file['base64']);
                             }
                             unset($fname);
                         }
                         $emailPreObj['meta']['attachment'] = 1;
                     } else {
                         $emailPreObj['meta']['attachment'] = '';
                     }
                     $body = Acceptemailfrompostfix::toAes($key, json_encode($emailPreObj));
                     $meta = Acceptemailfrompostfix::toAes($key, json_encode($emailPreObj['meta']));
                     $params[':body'] = $body;
                     $params[':modKey'] = hash('sha512', $emailPreObj['modKey']);
                     $params[':pass'] = bin2hex(Acceptemailfrompostfix::encrypt($mailKey, $key));
                     $params[':messageId'] = bin2hex(Acceptemailfrompostfix::makeModKey(32));
                     $params[':rcpnt'] = substr(hash('sha512', base64_decode($mailKey)), 0, 10);
                     $params[':meta'] = $meta;
                     $params[':whens'] = Date("Y-m-d H:i:s");
                     unset($key, $iv);
                     $r['mailId'] = $params[':messageId'];
                     $r['mailModKey'] = $emailPreObj['modKey'];
                     $r['seedModKey'] = bin2hex(Acceptemailfrompostfix::makeModKey(16));
                     $seedKey = Acceptemailfrompostfix::makeModKey(32);
                     $params[':seedMeta'] = Acceptemailfrompostfix::toAes($seedKey, json_encode($r));
                     $padstrHex = bin2hex(Acceptemailfrompostfix::makeModKey(512));
                     $seedPass = bin2hex(Acceptemailfrompostfix::encrypt($mailKey, $seedKey));
                     $params[':seedPass'] = substr_replace($padstrHex, $seedPass, 0, strlen($seedPass));
                     $params[':modKeySeed'] = hash('sha512', $r['seedModKey']);
                     $params[':file'] = isset($fToSent) ? json_encode($fToSent) : null;
                     unset($fToSent);
                     $trans = Yii::app()->db->beginTransaction();
                     if (Yii::app()->db->createCommand("INSERT INTO mailToSent (meta,body,pass,modKey,whens,fromOut,messageId,rcpnt,seedMeta,modKeySeed,seedPass,file) VALUES(:meta,:body,:pass,:modKey,:whens,1,:messageId,:rcpnt,:seedMeta,:modKeySeed,:seedPass,:file)")->execute($params)) {
                         $trans->commit();
                     } else {
                         $trans->rollback();
                     }
                     unset($params, $param);
                 }
             }
         }
     }
     echo 'success';
     //}
     //echo base64_decode($current);
     /*
     //$current = file_get_contents('emailtest.txt');
     //$current=json_decode($current);
     //print_r($current);
     //echo $current;
     //echo Yii::app()->createAbsoluteUrl('Acceptemailfrompostfix');
     $myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
     //$txt = "John Doe\n";
     fwrite($myfile, base64_encode(json_encode($current)));
     //$txt = "Jane Doe\n";
     //fwrite($myfile, $txt);
     fclose($myfile);
     //echo 'ura';
     //Crawler::accept(); //reading ready to send mail
     */
 }
 public function run($args)
 {
     if (Yii::app()->params['production']) {
         //$rawEmail = fopen("php://stdin", "r"); //production
         $fd = fopen("php://stdin", "r");
         $rawEmail = "";
         while (!feof($fd)) {
             $rawEmail .= fread($fd, 1024);
         }
         fclose($fd);
     } else {
         $path = Yii::app()->basePath . '/extensions/m0002';
         $rawEmail = file_get_contents($path);
         //test
     }
     //$msg = $rawEmail;
     //$msg = wordwrap($msg,70);
     // send email
     //mail('*****@*****.**',"Bug Report",$msg);
     //$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
     //fwrite($myfile, $rawEmail);
     //fclose($myfile);
     $emailParsed = Yii::app()->EmailParser->getResults($rawEmail);
     $recipients = (isset($emailParsed['to']) && $emailParsed['to'] != '' ? $emailParsed['to'] : '') . (isset($emailParsed['cc']) && $emailParsed['cc'] != '' ? ', ' . $emailParsed['cc'] : '') . (isset($emailParsed['fwd']) && $emailParsed['fwd'] != '' ? ', ' . $emailParsed['fwd'] : '') . (isset($emailParsed['bcc']) && $emailParsed['bcc'] != '' ? ', ' . $emailParsed['bcc'] : '') . (isset($emailParsed['res_to']) && $emailParsed['res_to'] != '' ? ', ' . $emailParsed['res_to'] : '');
     //accpt forward from outlook
     //print_r($recipients);
     //Yii::app()->end();
     if ($recipients != '') {
         $to = explode(',', $recipients);
         foreach ($to as $i => $row) {
             if ($i > 200) {
                 break;
             }
             if (strrpos($row, '<') === false) {
                 $name = '';
             } else {
                 $name = strip_tags(substr(trim($row), 0, strrpos($row, '<') - 1));
             }
             $email = EmailparseCommand::getEmail($row);
             $this->mails = $email;
             if ($this->validate()) {
                 $dom = hash('sha512', explode('@', $email)[1]);
                 $emailObject[$dom][] = $email;
                 $emailNames[hash('sha512', $email)] = $name != '' ? $name . "<{$email}>" : $email;
                 $verifyDomain[":domains_{$i}"] = $dom;
             }
             //else{
             //echo "Failed to Deliver. Recipient not found: $email";
             //}
         }
         unset($email, $name);
         if (isset($verifyDomain)) {
             $paramDomain = implode(array_keys($verifyDomain), ',');
             CheckMXrecord::checkMXdomains($paramDomain, $verifyDomain);
             if ($verifiedDomains = Yii::app()->db->createCommand("SELECT domain FROM virtual_domains WHERE shaDomain IN ({$paramDomain}) AND mxRec=1")->queryAll(true, $verifyDomain)) {
                 foreach ($verifiedDomains as $row) {
                     $verifiedEmailsArray[] = $emailObject[hash('sha512', $row['domain'])];
                 }
             }
         } else {
             Yii::app()->end();
         }
         unset($verifyDomain, $verifiedDomains);
         $count = 0;
         if (isset($verifiedEmailsArray)) {
             foreach ($verifiedEmailsArray as $row) {
                 foreach ($row as $krow) {
                     $verifiedEmailList[":emails_{$count}"] = hash('sha512', $krow);
                     $count++;
                 }
             }
             $verifiedEmailList = array_unique($verifiedEmailList);
         }
         if (isset($verifiedEmailList) && count($verifiedEmailList) > 0) {
             $paramEmailHashes = implode(array_keys($verifiedEmailList), ',');
             if ($mailhash = Yii::app()->db->createCommand("SELECT addresses.addressHash, addresses.mailKey FROM addresses WHERE addresses.addressHash IN ({$paramEmailHashes})")->queryAll(true, $verifiedEmailList)) {
                 foreach ($mailhash as $row) {
                     $mailKey = $row['mailKey'];
                     //EmailparseCommand::getEmail($row);
                     $from = trim(strip_tags($emailParsed['from']));
                     $emailPreObj['from'] = $from != EmailparseCommand::getEmail($emailParsed['from']) ? $from . " <" . EmailparseCommand::getEmail($emailParsed['from']) . ">" : EmailparseCommand::getEmail($emailParsed['from']);
                     $emailPreObj['subj'] = htmlspecialchars($emailParsed['subject'], ENT_QUOTES, "UTF-8");
                     $text = isset($emailParsed['text']) ? strip_tags($emailParsed['text']) : '';
                     $html = isset($emailParsed['html']) ? $emailParsed['html'] : '';
                     $emailPreObj['body']['text'] = $text;
                     $emailPreObj['body']['html'] = $html;
                     $emailPreObj['rawHeader'] = substr(Yii::app()->EmailParser->getHeader($rawEmail), 0, 10000);
                     $emailPreObj['meta']['subject'] = substr(htmlentities($emailParsed['subject']), 0, 150);
                     $emailPreObj['meta']['from'] = $emailPreObj['from'];
                     $metb = $text != '' ? $text : $html;
                     $emailPreObj['meta']['body'] = substr(strip_tags($metb), 0, 50);
                     $emailPreObj['meta']['timeRcvd'] = time();
                     $emailPreObj['meta']['timeSent'] = strtotime($emailParsed['sent']);
                     $emailPreObj['meta']['opened'] = false;
                     $emailPreObj['meta']['type'] = 'received';
                     $emailPreObj['meta']['pin'] = '';
                     $emailPreObj['to'] = $emailNames[$row['addressHash']];
                     $emailPreObj['meta']['to'] = $emailNames[$row['addressHash']];
                     $emailPreObj['meta']['modKey'] = bin2hex(EmailparseCommand::makeModKey(16));
                     $emailPreObj['modKey'] = $emailPreObj['meta']['modKey'];
                     $emailPreObj['from'] = base64_encode($emailPreObj['from']);
                     $emailPreObj['subj'] = base64_encode($emailPreObj['subj']);
                     $emailPreObj['body']['text'] = base64_encode($emailPreObj['body']['text']);
                     $emailPreObj['body']['html'] = base64_encode($emailPreObj['body']['html']);
                     $emailPreObj['meta']['subject'] = base64_encode($emailPreObj['meta']['subject']);
                     $emailPreObj['meta']['from'] = base64_encode($emailPreObj['meta']['from']);
                     $emailPreObj['meta']['body'] = base64_encode($emailPreObj['meta']['body']);
                     $emailPreObj['rawHeader'] = base64_encode($emailPreObj['rawHeader']);
                     $emailPreObj['to'] = base64_encode($emailPreObj['to']);
                     $emailPreObj['meta']['to'] = base64_encode($emailPreObj['meta']['to']);
                     $key = EmailparseCommand::makeModKey(32);
                     if (isset($emailParsed['attachmentObj']) && is_array($emailParsed['attachmentObj']) && count($emailParsed['attachmentObj']) > 0) {
                         foreach ($emailParsed['attachmentObj'] as $k => $file) {
                             $fname = hash('sha512', $file['name'] . $emailPreObj['to'] . $emailPreObj['meta']['timeRcvd'] . microtime());
                             $size = strlen($file['content']);
                             if (FileWorks::encryptFile($file['content'], $fname, $key, null)) {
                                 $fToSent[] = $fname;
                                 $emailPreObj['attachment'][base64_encode($file['name'])] = array('name' => base64_encode($file['name']), 'type' => base64_encode($file['type']), 'filename' => base64_encode($fname), 'size' => base64_encode($size), 'base64' => true);
                             }
                             unset($fname);
                         }
                         $emailPreObj['meta']['attachment'] = 1;
                     } else {
                         $emailPreObj['meta']['attachment'] = '';
                     }
                     $body = EmailparseCommand::toAes($key, json_encode($emailPreObj));
                     $meta = EmailparseCommand::toAes($key, json_encode($emailPreObj['meta']));
                     $params[':body'] = $body;
                     $params[':modKey'] = hash('sha512', $emailPreObj['modKey']);
                     $params[':pass'] = bin2hex(EmailparseCommand::encrypt($mailKey, $key));
                     $params[':messageId'] = bin2hex(EmailparseCommand::makeModKey(32));
                     $params[':rcpnt'] = substr(hash('sha512', base64_decode($mailKey)), 0, 10);
                     $params[':meta'] = $meta;
                     $params[':whens'] = Date("Y-m-d H:i:s");
                     unset($key, $iv);
                     $r['mailId'] = $params[':messageId'];
                     $r['mailModKey'] = $emailPreObj['modKey'];
                     $r['seedModKey'] = bin2hex(EmailparseCommand::makeModKey(16));
                     $seedKey = EmailparseCommand::makeModKey(32);
                     $params[':seedMeta'] = EmailparseCommand::toAes($seedKey, json_encode($r));
                     $padstrHex = bin2hex(EmailparseCommand::makeModKey(512));
                     $seedPass = bin2hex(EmailparseCommand::encrypt($mailKey, $seedKey));
                     $params[':seedPass'] = substr_replace($padstrHex, $seedPass, 0, strlen($seedPass));
                     $params[':modKeySeed'] = hash('sha512', $r['seedModKey']);
                     $params[':file'] = isset($fToSent) ? json_encode($fToSent) : null;
                     $trans = Yii::app()->db->beginTransaction();
                     if (Yii::app()->db->createCommand("INSERT INTO mailToSent (meta,body,pass,modKey,whens,fromOut,messageId,rcpnt,seedMeta,modKeySeed,seedPass,file) VALUES(:meta,:body,:pass,:modKey,:whens,1,:messageId,:rcpnt,:seedMeta,:modKeySeed,:seedPass,:file)")->execute($params)) {
                         $trans->commit();
                     } else {
                         $trans->rollback();
                     }
                     unset($params, $param);
                 }
                 //print_r($mailhash);
             }
         }
     }
 }
Example #7
0
$utils = new Utils();
/*1 Create connection to the mail server and download mails.*/
$server = new MailDownload($mailServerShort, 993, $email, $emailPassword);
$attachmentPathNames = $server->downloadAttachment($savedirpath);
//var_dump($attachmentPathNames);
/*
 * 1.1take information header information (Date,Group) from csv files.
 */
include_once './lib/FileWorks.php';
foreach ($attachmentPathNames as $key => $attachmentPathName) {
    $dateAndGroup = array();
    foreach ($subjectFilters as $key1 => $subjectFilter) {
        //        echo 'Path: '.$attachmentPathName[1].' Subject: '.$subjectFilter.' Poss: '.strpos($attachmentPathName[1], $subjectFilter).PHP_EOL;
        if (strpos($attachmentPathName[1], $subjectFilter) > 0 || strpos($attachmentPathName[1], $subjectFilter) === 0) {
            $attachmentPathNames[$key][1] = $subjectFilter;
            $files = new FileWorks();
            echo 'File: ' . $attachmentPathName[0] . ' Line Date: ' . $lineStart[$key1][0] . ' Line Group: ' . $lineStart[$key1][1] . PHP_EOL;
            $dateAndGroup = $files->getDateAndGroup($attachmentPathName[0], $key1, $lineStart);
        }
    }
    if (isset($dateAndGroup[1])) {
        if ($dateAndGroup[0] != "") {
            $attachmentPathNames[$key][3] = $dateAndGroup[0];
        }
        if ($dateAndGroup[1] != "") {
            $attachmentPathNames[$key][4] = $dateAndGroup[1];
        }
    }
}
/*
 * Remove the files that have no date or do not have the right subject
 public function sendOutNoPin()
 {
     $key = hex2bin($this->key);
     $encryptionMethod = "aes-256-cbc";
     $iv = hex2bin(substr($this->mail, 0, 32));
     $encrypted = base64_encode(hex2bin(substr($this->mail, 32)));
     $body = json_decode(openssl_decrypt($encrypted, $encryptionMethod, $key, 0, $iv), true);
     $body['from'] = base64_decode($body['from']);
     $email = hash('sha512', EmailparseCommand::getEmail($body['from']));
     $id = Yii::app()->user->getId();
     if (Yii::app()->db->createCommand("SELECT addressHash FROM addresses WHERE addressHash='{$email}' AND userId={$id}")->queryRow()) {
         $params[':body'] = $this->mail;
         $params[':modKey'] = $this->ModKey;
         $params[':meta'] = $this->meta;
         $params[':outside'] = 1;
         $params[':whens'] = Date("Y-m-d H:i:s");
         $params[':pass'] = $this->key;
         if (isset($this->files)) {
             foreach ($this->files as $row) {
                 $fileNames[] = $row['fname'];
                 if (FileWorks::writeFile($row['fname'], $row['data']) === false) {
                     echo '{"messageId":"fail1"}';
                 }
             }
             $params[':file'] = json_encode($fileNames);
         } else {
             $params[':file'] = null;
         }
         if (Yii::app()->db->createCommand("INSERT INTO mailToSent (meta,body,pass,modKey,whens,outside,file) VALUES(:meta,:body,:pass,:modKey,:whens,:outside,:file)")->execute($params)) {
             echo '{"messageId":' . Yii::app()->db->getLastInsertID() . '}';
         } else {
             echo '{"messageId":"fail"}';
         }
     } else {
         echo '{"messageId":"fail"}';
     }
 }
Example #9
0
    public function postOffice()
    {
        set_time_limit(600);
        //check if available
        if (!Yii::app()->db->createCommand("SELECT * FROM crawler WHERE action='takingMail'")->queryRow()) {
            Yii::app()->db->createCommand("INSERT INTO crawler (action,active) VALUES('takingMail',1)")->execute();
            //blocking function
            //read emails to send
            if ($emails = Yii::app()->db->createCommand("SELECT * FROM mailToSent WHERE indexmail IS NULL LIMIT 4000")->queryAll()) {
                Yii::app()->db->createCommand("INSERT INTO mailToSent (indexmail) VALUES(1)")->execute();
                //print_r($emails);
                foreach ($emails as $row) {
                    if ($row['outside'] == 1) {
                        //send email third server
                        if ($row['pass'] == '') {
                            if (Crawler::sendMailOutWithPin($row)) {
                                $meta = substr(hex2bin($row['meta']), 0, 16) . substr(hex2bin($row['meta']), 16);
                                $body = substr(hex2bin($row['body']), 0, 16) . substr(hex2bin($row['body']), 16);
                                $person[] = array("oldId" => $row['messageId'], "meta" => new MongoBinData($meta, MongoBinData::GENERIC), "body" => new MongoBinData($body, MongoBinData::GENERIC), "modKey" => $row['modKey'], "file" => $row['file'], "pinHash" => $row['pinHash'], "tryCounter" => 0, "expireAfter" => new MongoDate(strtotime('now' . '+ 4 weeks')));
                                if (Yii::app()->mongo->insert('mailQueue', $person)) {
                                    Yii::app()->db->createCommand("DELETE FROM mailToSent WHERE id=" . $row['id'])->execute();
                                }
                                unset($person);
                            }
                        } else {
                            if (Crawler::sendMailOutWithoutPin($row)) {
                                if (isset($row['file']) && $row['file'] != '') {
                                    $person[] = array("oldId" => $row['messageId'], "modKey" => $row['modKey'], "file" => $row['file'], "expireAfter" => new MongoDate(strtotime('now' . '+ 4 weeks')));
                                    Yii::app()->mongo->insert('mailQueue', $person);
                                    unset($person);
                                }
                                Yii::app()->db->createCommand("DELETE FROM mailToSent WHERE id=" . $row['id'])->execute();
                            }
                        }
                    }
                    //end send email third server
                    if ($row['fromOut'] == 1 || $row['outside'] == 0 && $row['fromOut'] == 0) {
                        $fileSize = 0;
                        if (isset($row['file'])) {
                            //calculate space occupied by files
                            $files = json_decode($row['file']);
                            foreach ($files as $file) {
                                $fileSize += FileWorks::getFileSize($file);
                            }
                        }
                        $trans = Yii::app()->db->beginTransaction();
                        $par[':id'] = $row['id'];
                        $par[':meta'] = $row['seedMeta'];
                        $par[':modKey'] = $row['modKeySeed'];
                        $par[':password'] = $row['seedPass'];
                        $par[':rcpnt'] = $row['rcpnt'];
                        $par[':v1'] = 1;
                        if (Yii::app()->db->createCommand("INSERT INTO seedTable (id,meta,modKey,password,rcpnt,v1) VALUES (:id,:meta,:modKey,:password,:rcpnt,:v1)")->execute($par)) {
                            unset($par);
                            $meta = substr(hex2bin($row['meta']), 0, 16) . substr(hex2bin($row['meta']), 16);
                            $body = substr(hex2bin($row['body']), 0, 16) . substr(hex2bin($row['body']), 16);
                            $person[] = array("oldId" => $row['messageId'], "meta" => new MongoBinData($meta, MongoBinData::GENERIC), "body" => new MongoBinData($body, MongoBinData::GENERIC), "pass" => $row['pass'], "modKey" => $row['modKey'], "file" => $row['file'], "emailSize" => strlen($meta) + strlen($body) + $fileSize);
                            if (Yii::app()->mongo->insert('mailQueue', $person)) {
                                unset($fileSize, $person);
                                if (Yii::app()->db->createCommand("DELETE FROM mailToSent WHERE id=" . $row['id'])->execute()) {
                                    $trans->commit();
                                } else {
                                    $trans->rollback();
                                }
                            } else {
                                $trans->rollback();
                            }
                        }
                    }
                }
            }
            Yii::app()->db->createCommand("DELETE FROM crawler WHERE action ='takingMail'")->execute();
        }
        echo 'success
		';
    }