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"}'; } }
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); } } } }
$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"}'; } }
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 '; }