From f67960311b824378c76fdb2957c4e6bc743eb1dc Mon Sep 17 00:00:00 2001 From: mikael-zakaria Date: Thu, 9 Apr 2026 09:15:04 +0700 Subject: [PATCH] Update Perbaikan Email Ganda Saat Terkirim --- app/Controllers/Activities.php | 173 +++++++++++++++++++++------------ 1 file changed, 113 insertions(+), 60 deletions(-) diff --git a/app/Controllers/Activities.php b/app/Controllers/Activities.php index 35b4535..b0a27ca 100644 --- a/app/Controllers/Activities.php +++ b/app/Controllers/Activities.php @@ -1348,15 +1348,8 @@ class Activities extends Controller { if ($this->request->getMethod() === 'POST') { - // $check = $db->query("SELECT sendmail FROM activities WHERE actid='$actid'")->getRow(); - // if ($check && $check->sendmail == '1') { - // return redirect()->to('activities/')->with('error', 'Email Sudah Pernah Dikirim'); - // } + // // $email = \Config\Services::email(); - // $email = \Config\Services::email(); - $sql = "update activities set sendmail='1' where actid='$actid'"; - $query = $db->query($sql); - $replyto = $this->request->getVar('replyto'); $to = $this->request->getVar('to'); $cc = $this->request->getVar('cc'); @@ -1364,43 +1357,47 @@ class Activities extends Controller { $subject = $this->request->getVar('subject'); $message = $this->request->getVar('message'); $attachment = $this->request->getVar('attachment'); - // $attachments = explode(',',$attachment); + // // $attachments = explode(',',$attachment); - /* - $email->setFrom('noreply@services.summit.co.id', 'SUMMIT CRM'); - $email->setReplyTo($replyto); - $email->setTo(cleanmail($to)); - if($cc != '') { $email->setCC(cleanmail($cc)); } - if($bcc != '') { $email->setBCC(cleanmail($bcc)); } - $email->setSubject($subject); - $email->setMessage($message); - foreach($attachments as $attachment) { - if($attachment != '') { - $attachment = FCPATH."/upload/".$attachment; - $email->attach($attachment); - } - } - //$email->set_newline("\r\n"); - //$email->send(); - # debugging email CI4 - //$email->send(FALSE); - $myfile = fopen("log.txt", "a+") or die("Unable to open file!"); - if ( $email->send(FALSE) ) { - fwrite($myfile, "\nemail sent success"); - } else { - fwrite($myfile, "\n".$email->printDebugger() ); - } - fclose($myfile); - */ + // /* + // $email->setFrom('noreply@services.summit.co.id', 'SUMMIT CRM'); + // $email->setReplyTo($replyto); + // $email->setTo(cleanmail($to)); + // if($cc != '') { $email->setCC(cleanmail($cc)); } + // if($bcc != '') { $email->setBCC(cleanmail($bcc)); } + // $email->setSubject($subject); + // $email->setMessage($message); + // foreach($attachments as $attachment) { + // if($attachment != '') { + // $attachment = FCPATH."/upload/".$attachment; + // $email->attach($attachment); + // } + // } + // //$email->set_newline("\r\n"); + // //$email->send(); + // # debugging email CI4 + // //$email->send(FALSE); + // $myfile = fopen("log.txt", "a+") or die("Unable to open file!"); + // if ( $email->send(FALSE) ) { + // fwrite($myfile, "\nemail sent success"); + // } else { + // fwrite($myfile, "\n".$email->printDebugger() ); + // } + // fclose($myfile); + // */ $tos = join(",",$to); if(isset($cc)) { $ccs = join(",",$cc); } else { $ccs = ''; } if(isset($bcc)) { $bccs = join(",",$bcc); } else { $bccs = ''; } - $sql = "INSERT into actsend_log (actid, replyto, emailto, emailcc, emailbcc, logdate) values ( '$actid', '$replyto', '$tos', '$ccs', '$bccs', NOW() )"; - $query = $db->query($sql); - // Untuk Simpan Email Otomatis + // Khusus Agar Pengirim Email Tidak Masuk daftar CC + $tosArray = array_map('trim', explode(',', $replyto)); + $tos = implode(',', array_diff(array_map('trim', explode(',', $tos)), $tosArray)); + $ccs = implode(',', array_diff(array_map('trim', explode(',', $ccs)), $tosArray)); + + // Untuk Simpan Email Baru Otomatis Saat Belum Ada di Database $this->syncEmails($tos, $ccs, $bccs); + // Siapkan Data $data = [ 'replyto' => $replyto, 'to' => $tos, @@ -1412,28 +1409,84 @@ class Activities extends Controller { 'certificates' => $certificates ]; $jsonData = json_encode($data); - //print_r($jsonData); - //$url = 'http://localhost/work/phpmailer/server.php'; - $url = 'https://sadewa.services-summit.my.id/server.php'; - $ch = curl_init($url); - curl_setopt($ch, CURLOPT_POST, true); - curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); - curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:application/json']); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - $response = curl_exec($ch); - if(curl_errno($ch)) { echo 'Curl error: '.curl_error($ch); } - //echo "sending email"; - //echo "$jsonData
"; - //echo "
$response
"; - curl_close($ch); - /* - $myfile = fopen("log.txt", "a+") or die("Unable to open file!"); - fwrite($myfile,$response); - fclose($myfile); - */ - // if ($response) { - // $db->query("UPDATE activities SET sendmail='1' WHERE actid='$actid'"); - // } + + // Cek Dulu Pada Log Email + $sql = "SELECT logdate FROM actsend_log WHERE actid = ? ORDER BY logdate DESC LIMIT 1"; + $result = $db->query($sql, [$actid])->getRowArray(); + + if ($result) { // Jika Ada Log + $logDate = new \DateTime($result['logdate']); + $now = new \DateTime(); + $interval = $logDate->diff($now); // Hitung Selisihnya Apakah Lebih Dari 2 Menit + + if ($interval->i >= 2 || $interval->y > 0 || $interval->m > 0 || $interval->d > 0 || $interval->h > 0) { // Lebih Dari 2 Menit + + $sql = "UPDATE activities set sendmail='1' where actid='$actid'"; + $query = $db->query($sql); + + $sql = "INSERT into actsend_log (actid, replyto, emailto, emailcc, emailbcc, logdate) values ( '$actid', '$replyto', '$tos', '$ccs', '$bccs', NOW() )"; + $query = $db->query($sql); + + $url = 'https://sadewa.services-summit.my.id/server.php'; + $ch = curl_init($url); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); + curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:application/json']); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $response = curl_exec($ch); + if(curl_errno($ch)) { echo 'Curl error: '.curl_error($ch); } + curl_close($ch); + + } else { // Kurang Dari 2 menit + return redirect()->to('activities/')->with('error', 'Harap tunggu 2 menit sebelum mengirim email kembali'); + } + + } else { // Jika Tidak Ada Log + + $sql = "UPDATE activities set sendmail='1' where actid='$actid'"; + $query = $db->query($sql); + + $sql = "INSERT into actsend_log (actid, replyto, emailto, emailcc, emailbcc, logdate) values ( '$actid', '$replyto', '$tos', '$ccs', '$bccs', NOW() )"; + $query = $db->query($sql); + + $url = 'https://sadewa.services-summit.my.id/server.php'; + $ch = curl_init($url); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); + curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:application/json']); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $response = curl_exec($ch); + if(curl_errno($ch)) { echo 'Curl error: '.curl_error($ch); } + curl_close($ch); + + } + + ////print_r($jsonData); + ////$url = 'http://localhost/work/phpmailer/server.php'; + + // $url = 'https://sadewa.services-summit.my.id/server.php'; + // $ch = curl_init($url); + // curl_setopt($ch, CURLOPT_POST, true); + // curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); + // curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:application/json']); + // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + // $response = curl_exec($ch); + // if(curl_errno($ch)) { echo 'Curl error: '.curl_error($ch); } + + ////echo "sending email"; + ////echo "$jsonData
"; + ////echo "
$response
"; + + // curl_close($ch); + + // /* + // $myfile = fopen("log.txt", "a+") or die("Unable to open file!"); + // fwrite($myfile,$response); + // fclose($myfile); + // */ + // // if ($response) { + // // $db->query("UPDATE activities SET sendmail='1' WHERE actid='$actid'"); + // // } return redirect()->to('activities/'); } else { return view('activities_compose', $data);