<?php
/**
* @Author: Awe
* @Date: 2016-10-26 17:26:54
* @Last Modified by: Awe
* @Last Modified time: 2017-05-30 12:57:18
*/
class EmailBusiness extends AbstractModel{
public function sendEmail(){
$sql = "SELECT email,body,`subject`,name FROM hr_send_email_all_task WHERE is_lock=0 AND (send_status=0 OR send_status=2);";
$rows = $this->db(0)->find($sql);
foreach ($rows as $val) {
$accepter = $val['email'];
$tite = $val['subject'];
$bodys = $val['body'];
$result = Common::Postmail($accepter ,$tite , $bodys);
$this->setsendemailalltask($result);
}
echo "success";
}
//更新邮件发送状态
private function setsendemailalltask($result) {
$now = date('Y-m-d H:i:s');
if ($result) {
$sql = "UPDATE hr_send_email_all_task SET is_lock=1,lock_date='{$now}',send_status=1,send_date='{$now} '";
} else {
$sql = "UPDATE hr_send_email_all_task SET is_lock=1,lock_date='{$now}',send_status=2 ";
}
$this->db(0)->Exec($sql);
}
public function addMailQueue(){
$file = APP_PATH . "/log/tmp/mailQueue.lock.txt" ;
$fp = fopen($file,'a+');
if (flock($fp, LOCK_EX)) {
$logFile = Log_file::getInstance(array('filename' => "addMailQueueLog" ));
$lock_message = "file is locked time is :".date("Y-m-d H:i:s", time())." " .PHP_EOL;
fwrite($fp, $lock_message);
$result = $this->doAddMailQueue();
$logFile->Write("info" , $result );
echo $result ;
flock($fp,LOCK_UN);
}else{
echo "其他的进程正在处理。。。";
}
fclose($fp);
}
public function doAddMailQueue(){
$sql = "select * from mail_queue where status = 0 and ischeck = '1' order by create_date desc limit 1 " ;
$info = $this->db(4)->findOne($sql);
if(empty($info)){
return "no data";
}
$file = $info['file'];
$body = $info['content'];
$subject = $info['title'];
$emailType = "queue_{$info['id']}";
$pre_count = 1000;
if(!file_exists($file)){
return "file $file is not exists";
}
$csvreader = new CsvReader( $file);
$line_number = $csvreader->get_lines();
$date = date("Y-m-d H:i:s");
$sqlFile = str_replace("\\", "/", APP_PATH) . "/tmp/"."sql_" . date("Y_m_d_H_i_s",time()) . ".txt";
$page = intval($line_number/$pre_count)+1;
$successNum = 0;
for ($i = 0;$i < $page;$i++){
$str = '' ;
$data = $csvreader->get_data($pre_count , $i * $pre_count);
if(empty($data)){
continue ;
}
foreach ($data as $key => $value) {
$email = isset($value[0]) ? trim($value[0]) : '' ;
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
continue ;
}
$bodys = $this->replaceEmailBody($email , $body , $emailType );
$str.= $email . "$#####$$" . $bodys . "$#####$$" . $date ."$#####$$" . $subject ."v_@rdasd32eplace@" ;
$successNum++;
}
$str = rtrim($str , "v_@rdasd32eplace@" );
file_put_contents($sqlFile , $str , FILE_APPEND );
//unset($psql);
unset($data);
}
$sql = "LOAD DATA INFILE '{$sqlFile}' INTO TABLE email_all_task CHARACTER SET utf8 FIELDS TERMINATED BY '$#####$$' LINES TERMINATED BY 'v_@rdasd32eplace@' (email,body,create_date,subject)" ;
$num = $this->db(4)->Exec($sql);
if($num > 0 ){
$now =date("Y-m-d H:i:s") ;
$this->db(4)->Exec("update mail_queue set status = 1 ,success_num = '{$successNum}' , operate_date = '{$now}' where id = '{$info['id']}' ");
//删除csv文件
@unlink($file);
return "success---编号id为:{$info['id']}---标题是:{$subject}";
}else{
return "fail";
}
}
function replaceEmailBody($email , $content , $emailType = '' ){
$url = "http://testwww.shixiba.com/analyze.php?email={$email}&emailType={$emailType}";
$content .= '<img src="'.$url.'" style="display:none;">' ;
return $content ;
}
}