Linux cesa-www-main 6.1.0-49-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
Apache/2.4.68 (Debian)
Server IP : 10.218.0.2 & Your IP : 216.73.216.28
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
var /
www /
cesa.co.za /
crons /
Delete
Unzip
Name
Size
Permission
Date
Action
Mandrill
[ DIR ]
drwxr-sr-x
2016-02-10 08:42
temp
[ DIR ]
drwxr-sr-x
2022-06-16 13:37
.htaccess
35
B
-rw-r--r--
2023-03-13 09:52
CESA_Ci Applications2b.pdf
800.6
KB
-rw-r--r--
2008-08-14 11:23
CESA_vector logo_high res.jpg
334.84
KB
-rw-r--r--
2008-08-14 11:10
Fulton_Press_small.pdf
84.39
KB
-rw-r--r--
2008-08-11 10:41
LAUNCH OF CESA.pdf
69.23
KB
-rw-r--r--
2008-08-14 11:24
Mandrill.php
6.44
KB
-rw-r--r--
2016-02-10 08:42
Overview_template_QMS_for_SMME-v2 _2.pdf
43.08
KB
-rw-r--r--
2008-09-26 12:04
ToSendProcess.php
46.4
KB
-rw-r--r--
2026-04-01 10:55
XPertMailer.php
38.69
KB
-rw-r--r--
2008-08-06 07:29
ad-reminders.php
2.7
KB
-rw-r--r--
2024-05-16 09:16
awards-from-forminator-debug.php
7.13
KB
-rw-r--r--
2025-06-23 16:02
awards-from-forminator-direct.php
9.69
KB
-rw-r--r--
2025-06-24 06:23
awards-from-forminator-fixed.php
7.42
KB
-rw-r--r--
2025-06-23 16:09
awards-from-forminator-step-by-step.php
6.93
KB
-rw-r--r--
2025-06-23 16:12
awards-from-forminator.php
18.54
KB
-rw-r--r--
2026-06-29 10:02
batch-job.php
948
B
-rw-r--r--
2026-08-24 10:20
bulk-mail-check.php
443
B
-rw-r--r--
2025-08-22 11:48
checkmail.php
6.35
KB
-rw-r--r--
2008-08-06 09:18
class.email-reader.php
15.58
KB
-rw-r--r--
2008-08-06 09:18
cron-5-minutes-root.sh
527
B
-rwxr-xr-x
2026-08-21 08:23
cron-daily-v3.sh
192
B
-rwxr-xr-x
2025-09-11 17:37
cron-daily.sh
500
B
-rwxr-xr-x
2025-12-29 09:32
cron-hourly.sh
413
B
-rwxr-xr-x
2025-09-01 13:33
cron-monthly.sh
83
B
-rwxr-xr-x
2025-06-27 15:38
cron.sh
369
B
-rwxr-xr-x
2026-04-16 10:02
export-attendees-google.php
3.07
KB
-rw-r--r--
2026-08-24 10:20
export-member-data-google.php
3.69
KB
-rw-r--r--
2026-08-24 10:20
export.php
1.96
KB
-rw-r--r--
2010-04-13 14:54
exportgooglecontacts.php
1.18
KB
-rw-r--r--
2022-06-16 14:41
import.php.bak
4.84
KB
-rw-r--r--
2010-05-06 07:59
importdup.php
3.34
KB
-rw-r--r--
2010-05-19 14:20
importschool.php
5.09
KB
-rw-r--r--
2010-05-19 14:05
php8.1_cli_errors.log
43.15
KB
-rw-r--r--
2025-12-31 10:58
phpinfo.php
20
B
-rw-r--r--
2024-04-16 11:40
receivemail.class.php
4.65
KB
-rw-r--r--
2008-08-06 07:51
sce-send-certificates.php
750
B
-rw-r--r--
2026-08-24 10:20
sendlater.php
12.86
KB
-rw-r--r--
2026-01-16 09:53
sendsms.php
4.3
KB
-rw-r--r--
2026-01-16 09:43
simple-wp-test.php
1.74
KB
-rw-r--r--
2025-06-23 16:05
sync-anual-declarations.php
3.22
KB
-rw-r--r--
2026-08-24 10:20
system-checks.php
798
B
-rw-r--r--
2026-08-24 10:20
test-send.php
786
B
-rw-r--r--
2024-04-11 07:55
test-wp-load.php
2.29
KB
-rw-r--r--
2025-06-23 16:02
training-material-expiry-check.php
4.12
KB
-rw-r--r--
2026-06-12 11:48
training-provider-expiry-check.php
4.51
KB
-rw-r--r--
2026-06-12 11:48
unemployed-reminders.php
2.43
KB
-rw-r--r--
2024-05-16 09:06
update-qms-cert-status.php
3.54
KB
-rw-r--r--
2026-08-24 10:20
wp-diagnostic.php
4.39
KB
-rw-r--r--
2025-06-23 16:08
wp-load-bypass.php
3.03
KB
-rw-r--r--
2025-06-23 16:08
wp-load-minimal.php
3.01
KB
-rw-r--r--
2025-06-23 16:08
Save
Rename
<?php // No longer used - use ToSendProcess.php instead exit; //if ($_GET["override"] != 1) die(); ini_set('max_execution_time', '0'); // 0 = no limit ini_set('display_errors', 1); error_reporting(E_ALL); ob_start(); $maxmsgs = 20; $loopMax = 10; if (!isset($_SERVER['DOCUMENT_ROOT']) || strlen($_SERVER['DOCUMENT_ROOT']) <= 0) { $_SERVER['DOCUMENT_ROOT'] = str_replace('/crons', '', getcwd()); } // Check if process is running $lockFile = $_SERVER['DOCUMENT_ROOT'] . '/crons/ToSendProcess.lock'; if (file_exists($lockFile)) { echo "Process already running. Exiting.\n"; exit; } file_put_contents($lockFile, time()); // echo $_SERVER['DOCUMENT_ROOT']; // exit; include_once($_SERVER['DOCUMENT_ROOT'] . "/cfg/config.php"); include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/maill.php"); include_once($_SERVER['DOCUMENT_ROOT'] . "/php/includes/ErrorLog.php"); /** * Format and validate a list of email addresses * Handles comma, semicolon, and space-separated lists * Returns formatted comma-separated list of valid emails, or false if none valid * * @param string $emailList The email list string * @return string|false Formatted email list or false if no valid emails */ function formatEmailList($emailList) { if (empty($emailList)) { return false; } // Normalize separators: replace semicolons and multiple spaces with commas $emailList = str_replace(array(';', "\r\n", "\r", "\n", "\t"), ',', $emailList); // Replace multiple commas with single comma $emailList = preg_replace('/,+/', ',', $emailList); // Split by comma $emails = explode(',', $emailList); $validEmails = array(); $invalidEmails = array(); foreach ($emails as $email) { $email = trim($email); if (empty($email)) { continue; } // Extract email from "Name <email@domain.com>" format if present if (preg_match('/<(.+?)>/', $email, $matches)) { $email = trim($matches[1]); } // Validate email if (filter_var($email, FILTER_VALIDATE_EMAIL)) { // Remove duplicates (case-insensitive) $emailLower = strtolower($email); if (!isset($validEmails[$emailLower])) { $validEmails[$emailLower] = $email; } } else { $invalidEmails[] = $email; } } // Log invalid emails if any if (!empty($invalidEmails)) { ErrorLog::logError("Invalid email addresses found in list: " . implode(', ', $invalidEmails)); } // Return formatted list or false if no valid emails if (empty($validEmails)) { return false; } return implode(', ', array_values($validEmails)); } $db = mysqli_connect(EW_CONN_HOST, MAILDB_USER, MAILDB_PASS, MAILDB_DB); $bCanSend = false; $bSomethingSent = false; $sql = "SELECT StartSend, EndSend FROM LastSend"; $rsRec = mysqli_query($db, $sql); // echo 'Selecting last send: ' . $rsRec . "\r\n"; if ($rsR = mysqli_fetch_assoc($rsRec)) { // echo 'Last send was ' . $rsR["StartSend"] . ' and ' . $rsR["EndSend"] . "\r\n"; // Has 15 seconds passed since the last send? if ((time() - strtotime($rsR["StartSend"])) >= 15) { $bCanSend = true; // Or, was the last start a loooong time ago? } elseif ((time() - strtotime($rsR["StartSend"])) >= 10) { $bCanSend = true; } } if ($bCanSend) { // Get the messages $sql = "SELECT * " . "FROM Messages " . "WHERE FromSchool=0 " . "AND EXISTS (SELECT * FROM ToSend WHERE ToSend.MessageID=Messages.MessageID AND ToSend.Sent=0) " . "ORDER BY Messages.Prioritise DESC, Messages.MessageID"; $rsMsg = mysqli_query($db, $sql); if ($rsM = mysqli_fetch_assoc($rsMsg)) { } else { // echo 'Select from messages failed: ' . $sql . ' <br />'; $bCanSend = false; } } if ($bCanSend) { for ($loopCnt = 1; $loopCnt <= $loopMax; $loopCnt++) { //Send 20 messages 10 times // Make sure another instance of this script doesn't start sending!! $sql = "UPDATE LastSend SET StartSend='" . date("Y-m-d H:i:s") . "', EndSend='2020-01-01'"; mysqli_query($db, $sql); $iMsgsSent = 0; $sql = "SELECT ToSend.SendTo, ToSend.Message FROM ToSend WHERE ToSend.MessageID=" . $rsM["MessageID"] . " and ToSend.Sent=0 and ToSend.SendTo LIKE '%@cesa.co.za' " . "ORDER BY ToSend.SendTo LIMIT 0," . $maxmsgs; // echo $sql . "\r\n"; $rsRec = mysqli_query($db, $sql); if (mysqli_num_rows($rsRec) <= 0) { $sql = "SELECT ToSend.SendTo, ToSend.Message FROM ToSend WHERE ToSend.MessageID=" . $rsM["MessageID"] . " and ToSend.Sent=0 and NOT (ToSend.SendTo LIKE '%@cesa.co.za') " . "ORDER BY ToSend.SendTo LIMIT 0," . $maxmsgs; // echo $sql . "\r\n"; $rsRec = mysqli_query($db, $sql); } while ($rsR = mysqli_fetch_assoc($rsRec)) { $sMessage = $rsM["Message"]; if (!empty($rsR["Message"])) $sMessage = $rsR["Message"]; // Format and validate email list $formattedEmailList = formatEmailList($rsR["SendTo"]); if ($formattedEmailList === false) { echo 'No valid e-mail addresses found in: ' . $rsR["SendTo"] . "\r\n"; ErrorLog::logError("No valid e-mail addresses found in: " . $rsR["SendTo"]); // Mark as sent with error status (Sent=2) $sql = "UPDATE ToSend SET Sent=2 WHERE SendTo='" . addslashes($rsR["SendTo"]) . "' AND MessageID=" . $rsM["MessageID"]; mysqli_query($db, $sql); continue; } // Use formatted email list $sendToEmail = $formattedEmailList; // If list was reformatted, log it if ($sendToEmail !== $rsR["SendTo"]) { echo 'Email list reformatted from "' . $rsR["SendTo"] . '" to "' . $sendToEmail . '"' . "\r\n"; ErrorLog::logInfo("Email list reformatted from \"" . $rsR["SendTo"] . "\" to \"" . $sendToEmail . "\""); } ErrorLog::logInfo("Valid e-mail address(es): " . $sendToEmail); if ($rsM['Headers'] != '') { // echo 'using built in mail <br />' . "\r\n"; // var_dump($rsM["Headers"]); // exit; // mail(stripslashes($rsR["SendTo"]), $rsM["Subject"], $sMessage, $rsM["Headers"]); //TODO: Send raw message via SMTP server $messageFile = sys_get_temp_dir() . '/' . $rsM["MessageID"] . '.html'; if (strpos($rsM["MessageFrom"], 'cesa.co.za') !== false) { $fromAddress = $rsM["MessageFrom"]; } else { $fromAddress = $smtp_user; } $headerValues = explode("\r\n", $rsM["Headers"]); $contentType = ''; $boundary = ''; foreach ($headerValues as $headerValue) { echo 'Looking for boundary: ' . $headerValue . ' ' . strpos($headerValue, 'boundary') . "\r\n"; if (strpos($headerValue, 'Content-Type:') === 0) { $contentType = $headerValue; } elseif (strpos($headerValue, 'boundary') !== false) { $boundary = $headerValue; echo 'Found: ' . $boundary . "\r\n"; } } // var_dump($headerValues); // echo "\r\n\r\n"; $msgPre = "From: " . $smtp_user . "\r\n" . "Reply-To: " . $fromAddress . "\r\n" . "To: " . $sendToEmail . "\r\n" . "Subject: " . $rsM["Subject"] . "\r\n" . "MIME-Version: 1.0\r\n" . $contentType . "\r\n" . $boundary . "\r\n\r\n"; // echo $msgPre; $sMessage = $msgPre . $sMessage; file_put_contents($messageFile, $sMessage); // echo 'python3 ' // . $_SERVER['DOCUMENT_ROOT'] . '/python/send-mail.py ' . $messageFile . ' "' // . $fromAddress . '" "' . $rsR["SendTo"] . '" ' . $smtp_host . ' ' // . $smtp_port . ' "' . $smtp_user . '" "' . $smtp_pass . '"'; $response = shell_exec('python3 ' . $_SERVER['DOCUMENT_ROOT'] . '/python/send-mail.py ' . $messageFile . ' "' . $fromAddress . '" "' . $sendToEmail . '" ' . $smtp_host . ' ' . $smtp_port . ' "' . $smtp_user . '" "' . $smtp_pass . '"'); if (strpos($response, 'Email sent successfully') !== false) { echo 'Python send response: ' . $response . "\r\n"; ErrorLog::logInfo("Email sent successfully"); } else { echo 'Python send response: ' . $response . "\r\n"; ErrorLog::logError("Email sent failed: " . $response); } $iMsgsSent++; $bSomethingSent = true; } elseif ($rsM['Options'] != '') { $json_obj = json_decode($rsM['Options'], true); if (!is_array($json_obj)) { $json_obj = []; } if (!isset($json_obj['from-name'])) { $json_obj['from-name'] = 'CESA'; } maill(stripslashes($sendToEmail), $rsM["Subject"], $sMessage, null, $json_obj, true); } $iMsgsSent++; $bSomethingSent = true; $sql = "UPDATE ToSend SET Sent=1 " . "WHERE SendTo='" . addslashes($rsR["SendTo"]) . "' " . "AND MessageID=" . $rsM["MessageID"]; // echo 'Updating ToSend: ' . $sql . "\r\n"; mysqli_query($db, $sql); echo $sendToEmail . "<br />\r\n"; // echo "."; flush(); ob_flush(); //wait for a quarter second // usleep(250); } //while mysqli_free_result($rsRec); $sql = "DELETE ts FROM ToSend ts " . "INNER JOIN Messages m ON ts.MessageID = m.MessageID " . "WHERE ts.Sent = 1 AND m.DateSent <= DATE_SUB(NOW(), INTERVAL 21 DAY)"; // echo 'Cleaning out ToSend: ' . $sql . "\r\n"; mysqli_query($db, $sql); $sql = "SELECT Messages.MessageID, COUNT(ToSend.ToSendID) AS Num FROM Messages LEFT JOIN ToSend USING (MessageID) " . "WHERE SendComplete=0 GROUP BY Messages.MessageID"; $rsRec = mysqli_query($db, $sql); while ($rsRow = mysqli_fetch_assoc($rsRec)) { if ($rsRow["Num"] == 0) { $sql = "UPDATE Messages SET SendComplete=1, DateComplete='" . date("Y-m-d H:i:s") . "' WHERE MessageID='" . $rsRow["MessageID"] . "'"; mysqli_query($db, $sql); } } //while // Get school mailing list messages /* $sql = "SELECT sml_message_archive.subject AS Subject, sml_message_archive.message AS Message, sml_message_archive.id AS MessageID, sml_delivery_queue.email AS SendTo FROM sml_message_archive, sml_delivery_queue WHERE sml_message_archive.id=sml_delivery_queue.message_id AND sml_message_archive.start_send<=UNIX_TIMESTAMP()"; $rsMsg = mysql_query($sql); echo "."; flush(); ob_flush(); while (($iMsgsSent <= $maxmsgs) && ($rsM = mysql_fetch_assoc($rsMsg))) { $bSendFinished = false; $sql = "DELETE FROM sml_delivery_queue WHERE message_id=".$rsM["MessageID"]." AND email='".$rsM["SendTo"]."'"; mysql_query($sql); mail(stripslashes($rsM["SendTo"]), $rsM["Subject"], $rsM["Message"], "MIME-Version: 1.0" . "\r\n"."Content-type:text/html;charset=UTF-8" . "\r\n"."From: brenda@cesa.co.za"."\r\n"."Reply-To: brenda@cesa.co.za"."\r\n"); $iMsgsSent++; $bSomethingSent = true; $sql = "UPDATE sml_message_archive SET recipients=recipients+1 WHERE id=".$rsM["MessageID"]; mysql_query($sql); echo $rsM["SendTo"]."<BR>"; echo "."; flush(); ob_flush(); usleep(100000); } */ //if ($bSomethingSent) { $sql = "UPDATE LastSend SET EndSend='" . date("Y-m-d H:i:s") . "'"; mysqli_query($db, $sql); } //} } else { echo "Can't send yet."; } flush(); ob_flush(); unlink($lockFile);