loadComponent('RequestHandler'); } /** * This function will be called to login and authenticate user * * @param params will be as post request * @return json response output * @link http://host/Emails/processRegEmails */ public function processRegEmails(){ $this->defineConstant(); $content = "";// $this->readFileContent(); try{ if($content == ""){ //first time writing in the file //$this->writeFileContent("FALSE"); $this->startFetchAndProcess(); //$this->writeFileContent("TRUE"); } else { //every 5 second, it will come here and try to fetch DB // set 5 sec in cron job $contentArray = explode(':',$content); if($contentArray[0] == "FALSE"){ //if FALSE returns morn than 2 min, then write TRUE in the file $currentTime = time(); $lastUpdatedTimeTime = $contentArray[1]; if((round(abs($currentTime - $lastUpdatedTimeTime) / 60,2)) > EMAIL_ROWS_PROCESS_TIME_MIN_MAX){ // SET it in constant $this->writeFileContent("TRUE"); } return; } else { $this->writeFileContent("FALSE"); $this->startFetchAndProcess(); $this->writeFileContent("TRUE"); } } } catch(Exception $ex){ } exit; } private function startFetchAndProcess(){ //fetch first 10 rows from DB where sending_count < 3 $update_time_target = date("Y-m-d H:i:s", strtotime("-3 min")); $emailInfo = $this->TempExpenseEmail->find('all', array( 'conditions' => array('count_email_attempt < ' => MAX_SENDING_COUNT, 'update_date <' => $update_time_target), 'limit' => NUM_OF_EMAIL_ROW_FETCH, 'order'=>array('create_date ASC') )); // SET it in constant /* $dbo = $this->TempExpenseEmail->getDatasource(); $logs = $dbo->_queriesLog; var_dump($logs); echo "
";
print_r($emailInfo); exit;
*/
if(!empty($emailInfo)){
foreach($emailInfo as $key=>$value){
$value = $value["TempExpenseEmail"];
$count = $value["count_email_attempt"];
$count++;
try{
$currentDate = "'".date("Y-m-d H:i:s")."'";
//process each row and update sending count
$userUpdated = $this->TempExpenseEmail->updateAll(
array('count_email_attempt' => $count,'update_date' => $currentDate ),
array('id' => $value["id"]));
$emailData = array();
$emailData["title"] = $value["title"];
$emailData["unique_url"] = $value["unique_url"];
$emailData["email"] = $value["email"];
//send email
$this->sendEmail($emailData);
//insert into ExpenseEmail
$inputData = array();
$inputData["id"] = $value["id"];
$inputData["unique_url"] = $value["unique_url"];
$inputData["email"] = $value["email"];
$inputData["title"] = $value["title"];
$inputData["count_email_attempt"] = $value["count_email_attempt"];
$this->ExpenseEmail->insertExpenseEmail($inputData);
// delete the email record after successful sending
$result = $this->TempExpenseEmail->deleteAll(array('id' => $value["id"]));
} catch(Exception $ex){
}
}
}
}
private function writeFileContent($flag){
$handle = fopen(REGISTRATION_EMAIL_SCHEDULE_TRACKING_FILE,"w+");
try{
fwrite($handle, $flag.":".time());
} catch(Exceptoin $ex){
}
fclose($handle);
}
private function readFileContent(){
$handle = fopen(REGISTRATION_EMAIL_SCHEDULE_TRACKING_FILE, "r");
try{
$contents = fread($handle, filesize(REGISTRATION_EMAIL_SCHEDULE_TRACKING_FILE));
} catch(Exceptoin $ex){
}
fclose($handle);
return trim($contents);
}
private function sendEmail($emailData){
$data = array();
$data["email"] = $emailData["email"];
$data["expense_title"] = $emailData["title"];
$data["unique_url"] = $emailData["unique_url"];
$default = array(
'host' => Configure::read('expensecount.email.smtp.host'),
'port' => 587,
'auth' => 'plain',
'username' => Configure::read('expensecount.email.smtp.username'),
'password' => Configure::read('expensecount.email.smtp.password'),
'tsl' => false,
'transport' => 'Smtp',
'from' => array(Configure::read('expensecount.email.smtp.from') => 'ExpenseCount'),
'returnPath' => Configure::read('expensecount.email.smtp.from'),
'layout' => false,
'emailFormat' => 'html',
//'template' => 'only_text',
'charset' => 'utf-8',
'headerCharset' => 'utf-8',
);
App::uses('CakeEmail', 'Network/Email');
//echo $Email->
$Email = new CakeEmail($default);
$Email->to($data["email"]);
$Email->emailFormat('html');
$Email->template('email',null)->viewVars( array('data' => $data));
$Email->subject('ExpenseCount "'.$data["expense_title"].'" ');
$Email->replyTo(Configure::read('expensecount.email.smtp.from'));
$Email->from(array(Configure::read('expensecount.email.smtp.from') => "ExpenseCount.com"));
//$Email->smtpOptions = $default;
$Email->delivery = 'Smtp';
$Email->send();
}
private function getEmailTemplate($templatePath,$local){
return $templatePath."_".$local;
}
private function defineConstant(){
define("EMAIL_ROWS_PROCESS_TIME_MIN_MAX",2); //value in minute
define("NUM_OF_EMAIL_ROW_FETCH",10);
define("MAX_SENDING_COUNT",3);
}
}