Current File : /home/mobaewow/public_html/waxamailer.php
<?php
/**
 * Waxa PHP Mailer - Ultimate Bulk Email Sender for cPanel
 * @version : 3.2
 * @author : Waxa Mailer
 * @security : Password protected
 */

// ==================== CONFIGURATION ====================
$password = "waxa123"; // SET YOUR PASSWORD HERE

// ==================== SECURITY & SESSION ====================
@session_start();
@ob_start(); // Start output buffering to fix header issues
error_reporting(E_ALL);
ini_set('display_errors', 0); // Disable error display in production
set_time_limit(0);
ini_set("memory_limit", "-1");

// Create unique session key for this installation
$session_key = md5(__FILE__ . $_SERVER['DOCUMENT_ROOT']);

// ==================== AUTHENTICATION ====================
function checkAuth() {
    global $password, $session_key;
    
    // If password is empty, disable authentication
    if (empty($password)) {
        $_SESSION[$session_key] = true;
        return true;
    }
    
    // Check if already authenticated
    if (isset($_SESSION[$session_key]) && $_SESSION[$session_key] === true) {
        return true;
    }
    
    // Check if password is being submitted
    if (isset($_POST['pass']) && $_POST['pass'] === $password) {
        $_SESSION[$session_key] = true;
        
        // Clear POST data to prevent resubmission on refresh
        unset($_POST['pass']);
        
        // Redirect to clear POST data
        header("Location: " . $_SERVER['PHP_SELF']);
        exit;
    }
    
    // Not authenticated - show login
    displayLogin();
    exit;
}

// ==================== DISPLAY LOGIN ====================
function displayLogin() {
    global $password;
    ob_clean(); // Clear any output buffers
    
    // If no password is set, auto-login
    if (empty($password)) {
        $_SESSION[md5(__FILE__ . $_SERVER['DOCUMENT_ROOT'])] = true;
        header("Location: " . $_SERVER['PHP_SELF']);
        exit;
    }
    
    ?>
    <!DOCTYPE html>
    <html>
    <head>
        <title>Waxa Mailer - Login</title>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
        <style>
            body { 
                background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 
                height: 100vh;
                margin: 0;
                padding: 0;
                font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
            }
            .login-container {
                display: flex;
                justify-content: center;
                align-items: center;
                min-height: 100vh;
                padding: 20px;
            }
            .login-card { 
                background: rgba(255,255,255,0.98); 
                border-radius: 20px; 
                box-shadow: 0 20px 60px rgba(0,0,0,0.3);
                width: 100%;
                max-width: 400px;
                overflow: hidden;
            }
            .logo { 
                background: linear-gradient(135deg, #667eea, #764ba2);
                -webkit-background-clip: text;
                -webkit-text-fill-color: transparent;
                background-clip: text;
                font-weight: 800; 
                font-size: 2.5rem;
                margin-bottom: 10px;
            }
            .login-header {
                background: linear-gradient(135deg, #667eea, #764ba2);
                color: white;
                padding: 30px;
                text-align: center;
            }
            .login-body {
                padding: 40px;
            }
            .form-control-lg {
                border-radius: 10px;
                padding: 15px 20px;
                font-size: 1.1rem;
                border: 2px solid #e0e0e0;
                transition: all 0.3s;
            }
            .form-control-lg:focus {
                border-color: #667eea;
                box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
            }
            .btn-login {
                background: linear-gradient(135deg, #667eea, #764ba2);
                border: none;
                padding: 15px;
                font-size: 1.1rem;
                font-weight: 600;
                border-radius: 10px;
                transition: all 0.3s;
            }
            .btn-login:hover {
                transform: translateY(-2px);
                box-shadow: 0 10px 20px rgba(102, 126, 234, 0.3);
            }
            .version {
                font-size: 0.9rem;
                color: #666;
                margin-top: 20px;
                text-align: center;
            }
        </style>
    </head>
    <body>
        <div class="login-container">
            <div class="login-card">
                <div class="login-header">
                    <div class="logo">WAXA MAILER</div>
                    <p>Ultimate Bulk Email Sender v3.2</p>
                </div>
                <div class="login-body">
                    <form method="post" action="">
                        <div class="mb-4">
                            <label class="form-label text-muted mb-2">Enter Password</label>
                            <input type="password" name="pass" class="form-control form-control-lg" 
                                   placeholder="Enter your password" required autofocus>
                        </div>
                        <button type="submit" class="btn btn-login text-white w-100">
                            <i class="bi bi-box-arrow-in-right"></i> Login
                        </button>
                        <div class="version">
                            Secure cPanel Email System
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </body>
    </html>
    <?php
    exit;
}

// ==================== ADVANCED SENDING METHODS ====================

class WaxaMailSender {
    private $logs = [];
    private $method_preference = [];
    
    public function __construct() {
        // Test and rank sending methods
        $this->detectBestMethod();
    }
    
    private function detectBestMethod() {
        // Test each method and rank them
        $methods = [
            'sendmail_direct' => 'Direct Sendmail',
            'sendmail_shell' => 'Shell Sendmail',
            'php_mail' => 'PHP mail()',
            'socket_smtp' => 'SMTP Socket',
            'phpmailer_local' => 'PHPMailer Local'
        ];
        
        $this->method_preference = array_keys($methods);
    }
    
    public function sendEmail($to, $subject, $message, $from_email, $from_name = "", $is_html = false) {
        // Try all methods until one works
        $methods = [
            'method1' => [$this, 'sendViaSendmailDirect'],
            'method2' => [$this, 'sendViaPHPMail'],
            'method3' => [$this, 'sendViaSocketSMTP'],
            'method4' => [$this, 'sendViaPHPMailer'],
            'method5' => [$this, 'sendViaShellExec']
        ];
        
        foreach($methods as $method_name => $method) {
            $result = call_user_func_array($method, [$to, $subject, $message, $from_email, $from_name, $is_html]);
            
            if($result['success']) {
                $this->logs[] = "[$method_name] ✓ Success: $to";
                return $result;
            }
        }
        
        return ['success' => false, 'error' => 'All sending methods failed'];
    }
    
    // METHOD 1: Direct Sendmail (Most reliable for cPanel)
    private function sendViaSendmailDirect($to, $subject, $message, $from_email, $from_name, $is_html) {
        try {
            $headers = "From: \"$from_name\" <$from_email>\r\n";
            $headers .= "Reply-To: $from_email\r\n";
            $headers .= "Return-Path: $from_email\r\n";
            $headers .= "MIME-Version: 1.0\r\n";
            $headers .= "X-Priority: 3\r\n";
            $headers .= "X-Mailer: Waxa Mailer 3.2\r\n";
            
            if($is_html) {
                $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
                if(!preg_match('/<html|<body/i', $message)) {
                    $message = $this->wrapHtml($message, $subject);
                }
            } else {
                $headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
                $message = strip_tags($message);
            }
            
            // Try different sendmail paths
            $sendmail_paths = [
                '/usr/sbin/sendmail',
                '/usr/lib/sendmail',
                '/usr/local/sbin/sendmail',
                '/usr/bin/sendmail',
                '/usr/sbin/exim',
                '/usr/lib/exim',
                trim(ini_get('sendmail_path'))
            ];
            
            foreach($sendmail_paths as $sendmail_path) {
                if(empty($sendmail_path) || !file_exists($sendmail_path)) {
                    continue;
                }
                
                // Clean path from options
                $sendmail_path = preg_replace('/\s+-.*/', '', $sendmail_path);
                
                // Prepare email data
                $mail_data = "To: $to\r\n";
                $mail_data .= "From: \"$from_name\" <$from_email>\r\n";
                $mail_data .= "Subject: $subject\r\n";
                $mail_data .= $headers . "\r\n";
                $mail_data .= $message . "\r\n";
                
                // Method A: Using popen
                $handle = @popen("$sendmail_path -t -i", 'w');
                if($handle) {
                    fwrite($handle, $mail_data);
                    $result = pclose($handle);
                    if($result === 0) {
                        return ['success' => true, 'method' => 'sendmail_direct'];
                    }
                }
                
                // Method B: Using mail() with this path
                ini_set('sendmail_path', "$sendmail_path -t -i");
                if(@mail($to, $subject, $message, $headers)) {
                    return ['success' => true, 'method' => 'sendmail_direct'];
                }
            }
            
            return ['success' => false, 'error' => 'Sendmail methods failed'];
            
        } catch(Exception $e) {
            return ['success' => false, 'error' => $e->getMessage()];
        }
    }
    
    // METHOD 2: PHP mail() function
    private function sendViaPHPMail($to, $subject, $message, $from_email, $from_name, $is_html) {
        try {
            // Prepare headers
            $headers = "From: \"$from_name\" <$from_email>\r\n";
            $headers .= "Reply-To: $from_email\r\n";
            $headers .= "Return-Path: $from_email\r\n";
            $headers .= "MIME-Version: 1.0\r\n";
            $headers .= "X-Priority: 3\r\n";
            $headers .= "X-Mailer: Waxa Mailer 3.2\r\n";
            
            if($is_html) {
                $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
                if(!preg_match('/<html|<body/i', $message)) {
                    $message = $this->wrapHtml($message, $subject);
                }
            } else {
                $headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
                $message = strip_tags($message);
            }
            
            // Try with additional parameters
            $additional_params = "-f$from_email";
            
            // Encode subject for special characters
            $encoded_subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';
            
            if(@mail($to, $encoded_subject, $message, $headers, $additional_params)) {
                return ['success' => true, 'method' => 'php_mail'];
            }
            
            // Try without encoded subject
            if(@mail($to, $subject, $message, $headers, $additional_params)) {
                return ['success' => true, 'method' => 'php_mail'];
            }
            
            // Try without additional parameters
            if(@mail($to, $subject, $message, $headers)) {
                return ['success' => true, 'method' => 'php_mail'];
            }
            
            return ['success' => false, 'error' => 'PHP mail() function failed'];
            
        } catch(Exception $e) {
            return ['success' => false, 'error' => $e->getMessage()];
        }
    }
    
    // METHOD 3: Direct SMTP Socket Connection
    private function sendViaSocketSMTP($to, $subject, $message, $from_email, $from_name, $is_html) {
        try {
            // Try different SMTP configurations
            $configs = [
                ['host' => 'localhost', 'port' => 25, 'ssl' => false],
                ['host' => '127.0.0.1', 'port' => 25, 'ssl' => false],
                ['host' => 'localhost', 'port' => 587, 'ssl' => false],
                ['host' => '127.0.0.1', 'port' => 587, 'ssl' => false],
                ['host' => 'localhost', 'port' => 465, 'ssl' => true],
                ['host' => $_SERVER['HTTP_HOST'], 'port' => 25, 'ssl' => false],
            ];
            
            foreach($configs as $config) {
                $result = $this->sendSMTP($config['host'], $config['port'], $to, $from_email, $from_name, $subject, $message, $is_html, $config['ssl']);
                if($result['success']) {
                    return $result;
                }
            }
            
            return ['success' => false, 'error' => 'SMTP socket connection failed'];
            
        } catch(Exception $e) {
            return ['success' => false, 'error' => $e->getMessage()];
        }
    }
    
    private function sendSMTP($host, $port, $to, $from_email, $from_name, $subject, $message, $is_html, $ssl = false) {
        $timeout = 10;
        $hostname = $ssl ? "ssl://$host" : $host;
        
        $sock = @fsockopen($hostname, $port, $errno, $errstr, $timeout);
        
        if(!$sock) {
            return ['success' => false, 'error' => "Connection failed: $errstr ($errno)"];
        }
        
        stream_set_timeout($sock, $timeout);
        
        // Read welcome
        $response = fgets($sock, 4096);
        
        // Send EHLO
        fputs($sock, "EHLO " . $_SERVER['HTTP_HOST'] . "\r\n");
        $response = fgets($sock, 4096);
        
        // MAIL FROM
        fputs($sock, "MAIL FROM: <$from_email>\r\n");
        $response = fgets($sock, 4096);
        
        // RCPT TO
        fputs($sock, "RCPT TO: <$to>\r\n");
        $response = fgets($sock, 4096);
        
        // DATA
        fputs($sock, "DATA\r\n");
        $response = fgets($sock, 4096);
        
        // Build email headers
        $headers = "From: \"$from_name\" <$from_email>\r\n";
        $headers .= "To: $to\r\n";
        $headers .= "Subject: $subject\r\n";
        $headers .= "Date: " . date('r') . "\r\n";
        $headers .= "MIME-Version: 1.0\r\n";
        $headers .= "X-Priority: 3\r\n";
        $headers .= "X-Mailer: Waxa Mailer 3.2\r\n";
        
        if($is_html) {
            $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
            if(!preg_match('/<html|<body/i', $message)) {
                $message = $this->wrapHtml($message, $subject);
            }
        } else {
            $headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
            $message = strip_tags($message);
        }
        
        $headers .= "\r\n";
        
        // Send data
        fputs($sock, $headers . $message . "\r\n.\r\n");
        $response = fgets($sock, 4096);
        
        // QUIT
        fputs($sock, "QUIT\r\n");
        fclose($sock);
        
        if(strpos($response, '250') === 0 || strpos($response, '354') === 0) {
            return ['success' => true, 'method' => 'smtp_socket'];
        }
        
        return ['success' => false, 'error' => "SMTP error: $response"];
    }
    
    // METHOD 4: PHPMailer
    private function sendViaPHPMailer($to, $subject, $message, $from_email, $from_name, $is_html) {
        try {
            // Try to load PHPMailer
            $phpmailer_loaded = false;
            
            // Check multiple possible locations
            $possible_locations = [
                __DIR__ . '/PHPMailer/src/PHPMailer.php',
                __DIR__ . '/phpmailer/PHPMailer.php',
                'PHPMailer.php'
            ];
            
            foreach($possible_locations as $location) {
                if(file_exists($location)) {
                    require_once $location;
                    require_once str_replace('PHPMailer.php', 'SMTP.php', $location);
                    require_once str_replace('PHPMailer.php', 'Exception.php', $location);
                    $phpmailer_loaded = true;
                    break;
                }
            }
            
            if(!$phpmailer_loaded) {
                return ['success' => false, 'error' => 'PHPMailer not found'];
            }
            
            $mail = new PHPMailer\PHPMailer\PHPMailer(true);
            
            try {
                // Try SMTP first
                $mail->isSMTP();
                $mail->Host = 'localhost';
                $mail->Port = 25;
                $mail->SMTPAuth = false;
                $mail->SMTPSecure = false;
                $mail->SMTPAutoTLS = false;
                $mail->Timeout = 10;
                
                $mail->setFrom($from_email, $from_name);
                $mail->addAddress($to);
                $mail->Subject = $subject;
                
                if($is_html) {
                    $mail->isHTML(true);
                    $mail->Body = $this->wrapHtml($message, $subject);
                    $mail->AltBody = strip_tags($message);
                } else {
                    $mail->Body = strip_tags($message);
                }
                
                if($mail->send()) {
                    return ['success' => true, 'method' => 'phpmailer_smtp'];
                }
                
            } catch(Exception $e) {
                // Try sendmail as fallback
                try {
                    $mail->isSendmail();
                    $mail->setFrom($from_email, $from_name);
                    $mail->addAddress($to);
                    $mail->Subject = $subject;
                    
                    if($is_html) {
                        $mail->isHTML(true);
                        $mail->Body = $this->wrapHtml($message, $subject);
                        $mail->AltBody = strip_tags($message);
                    } else {
                        $mail->Body = strip_tags($message);
                    }
                    
                    if($mail->send()) {
                        return ['success' => true, 'method' => 'phpmailer_sendmail'];
                    }
                } catch(Exception $e) {
                    return ['success' => false, 'error' => $e->getMessage()];
                }
            }
            
            return ['success' => false, 'error' => 'PHPMailer failed'];
            
        } catch(Exception $e) {
            return ['success' => false, 'error' => $e->getMessage()];
        }
    }
    
    // METHOD 5: Shell Exec
    private function sendViaShellExec($to, $subject, $message, $from_email, $from_name, $is_html) {
        try {
            // Prepare the email
            $boundary = md5(time());
            $headers = "From: \"$from_name\" <$from_email>\r\n";
            $headers .= "To: $to\r\n";
            $headers .= "Subject: $subject\r\n";
            $headers .= "MIME-Version: 1.0\r\n";
            
            if($is_html) {
                $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
                $message = $this->wrapHtml($message, $subject);
            } else {
                $headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
                $message = strip_tags($message);
            }
            
            $headers .= "X-Mailer: Waxa Mailer 3.2\r\n";
            
            // Try using mail command
            $mail_content = $headers . "\r\n" . $message;
            $mail_content_encoded = escapeshellarg($mail_content);
            
            $command = "echo $mail_content_encoded | /usr/sbin/sendmail -t -i 2>/dev/null";
            @shell_exec($command);
            
            // Alternative: use mailx if available
            $command = "echo \"" . addslashes($message) . "\" | mail -s \"" . addslashes($subject) . "\" -a \"From: $from_name <$from_email>\" $to 2>/dev/null";
            @shell_exec($command);
            
            // We'll assume it worked if no error (since we can't easily check shell_exec success)
            return ['success' => true, 'method' => 'shell_exec'];
            
        } catch(Exception $e) {
            return ['success' => false, 'error' => $e->getMessage()];
        }
    }
    
    private function wrapHtml($content, $subject) {
        $content = nl2br(htmlspecialchars($content));
        return '<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>' . htmlspecialchars($subject) . '</title>
    <style>
        body { 
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; 
            line-height: 1.6; 
            color: #333; 
            max-width: 600px; 
            margin: 0 auto; 
            padding: 20px; 
            background: #f9f9f9; 
        }
        .container { 
            background: white; 
            border-radius: 10px; 
            overflow: hidden; 
            box-shadow: 0 2px 10px rgba(0,0,0,0.1); 
        }
        .header { 
            background: linear-gradient(135deg, #667eea, #764ba2); 
            color: white; 
            padding: 30px; 
            text-align: center; 
        }
        .content { 
            padding: 30px; 
            font-size: 16px; 
        }
        .footer { 
            background: #f5f5f5; 
            padding: 20px; 
            text-align: center; 
            color: #666; 
            font-size: 12px; 
            border-top: 1px solid #eee; 
        }
        a { 
            color: #667eea; 
            text-decoration: none; 
        }
        .button { 
            display: inline-block; 
            background: linear-gradient(135deg, #667eea, #764ba2); 
            color: white; 
            padding: 12px 24px; 
            border-radius: 5px; 
            text-decoration: none; 
            margin: 10px 0; 
        }
        @media only screen and (max-width: 600px) {
            .content { padding: 20px; }
            .header { padding: 20px; }
            body { padding: 10px; }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <h2>' . htmlspecialchars($subject) . '</h2>
        </div>
        <div class="content">
            ' . $content . '
        </div>
        <div class="footer">
            <p>This email was sent via <strong>Waxa Mailer</strong></p>
            <p>© ' . date('Y') . ' ' . htmlspecialchars($_SERVER['HTTP_HOST'] ?? 'Your Domain') . '. All rights reserved.</p>
        </div>
    </div>
</body>
</html>';
    }
    
    public function getLogs() {
        return $this->logs;
    }
}

// ==================== HELPER FUNCTIONS ====================
function waxaClear($text, $email) {
    $e = explode('@', $email);
    $emailuser = isset($e[0]) ? $e[0] : '';
    $emaildomain = isset($e[1]) ? $e[1] : '';
    
    $replacements = array(
        "[-time-]" => date("m/d/Y h:i:s a", time()),
        "[-email-]" => $email,
        "[-emailuser-]" => $emailuser,
        "[-emaildomain-]" => $emaildomain,
        "[-randomletters-]" => randString('abcdefghijklmnopqrstuvwxyz'),
        "[-randomstring-]" => randString('abcdefghijklmnopqrstuvwxyz0123456789'),
        "[-randomnumber-]" => randString('0123456789'),
        "[-randommd5-]" => md5(randString('abcdefghijklmnopqrstuvwxyz0123456789')),
        "[-date-]" => date("Y-m-d"),
        "[-year-]" => date("Y"),
        "[-month-]" => date("F"),
        "[-day-]" => date("l"),
        "[-ip-]" => $_SERVER['SERVER_ADDR'] ?? '127.0.0.1',
        "[-domain-]" => $_SERVER['HTTP_HOST'] ?? 'localhost',
        "[-unix-]" => time(),
        "[-token-]" => bin2hex(random_bytes(8)),
        "[-serial-]" => strtoupper(uniqid())
    );
    
    return str_replace(array_keys($replacements), array_values($replacements), $text);
}

function randString($charset) {
    $length = rand(8, 20);
    $result = '';
    for($i = 0; $i < $length; $i++) {
        $result .= $charset[rand(0, strlen($charset) - 1)];
    }
    return $result;
}

function isValidEmail($email) {
    return filter_var($email, FILTER_VALIDATE_EMAIL);
}

function extractEmailsFromText($text) {
    $pattern = '/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/';
    preg_match_all($pattern, $text, $matches);
    return array_unique($matches[0]);
}

function checkMailSystem() {
    $checks = [];
    
    // Check sendmail paths
    $sendmail_paths = [
        '/usr/sbin/sendmail',
        '/usr/lib/sendmail', 
        '/usr/local/sbin/sendmail',
        '/usr/bin/sendmail',
        '/usr/sbin/exim'
    ];
    
    foreach($sendmail_paths as $path) {
        $checks[$path] = file_exists($path) ? '<span class="text-success">✓ Exists</span>' : '<span class="text-muted">Not found</span>';
    }
    
    // Check mail() function
    $checks['mail() function'] = function_exists('mail') ? '<span class="text-success">✓ Enabled</span>' : '<span class="text-danger">✗ Disabled</span>';
    
    // Check SMTP ports
    $ports = [25, 587, 465];
    foreach($ports as $port) {
        $sock = @fsockopen('localhost', $port, $errno, $errstr, 2);
        if($sock) {
            $checks["Port $port"] = '<span class="text-success">✓ Open</span>';
            fclose($sock);
        } else {
            $checks["Port $port"] = '<span class="text-warning">✗ Closed</span>';
        }
    }
    
    // Check PHP ini settings
    $sendmail_path = ini_get('sendmail_path');
    $checks['sendmail_path'] = $sendmail_path ? '<span class="text-success">' . htmlspecialchars($sendmail_path) . '</span>' : '<span class="text-warning">Not set</span>';
    
    return $checks;
}

// ==================== AUTHENTICATION CHECK ====================
checkAuth();

// ==================== HANDLE LOGOUT ====================
if(isset($_GET['logout'])) {
    session_destroy();
    session_start();
    session_regenerate_id(true);
    
    // Clear all session data
    $_SESSION = array();
    
    // Redirect to login
    header("Location: " . strtok($_SERVER['REQUEST_URI'], '?'));
    exit;
}

// ==================== INITIALIZE MAILER ====================
$mailer = new WaxaMailSender();
$sent_count = 0;
$failed_count = 0;
$system_checks = checkMailSystem();
$logs = [];

// ==================== PROCESS FORM SUBMISSIONS ====================
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['action'])) {
    if($_POST['action'] == 'send') {
        $from_email = $_POST['from_email'] ?? '';
        $from_name = $_POST['from_name'] ?? '';
        $subject = $_POST['subject'] ?? '';
        $message = $_POST['message'] ?? '';
        $email_list = $_POST['email_list'] ?? '';
        $is_html = isset($_POST['is_html']) ? true : false;
        $delay = intval($_POST['delay'] ?? 100000);
        
        // Validate from email
        if(empty($from_email) || !isValidEmail($from_email)) {
            $logs[] = '<div class="alert alert-danger">Error: Invalid sender email address</div>';
        } else {
            $emails = explode("\n", $email_list);
            $emails = array_map('trim', $emails);
            $emails = array_filter($emails, 'isValidEmail');
            
            if(empty($emails)) {
                $logs[] = '<div class="alert alert-warning">Warning: No valid email addresses found</div>';
            } else {
                $total = count($emails);
                $counter = 1;
                
                foreach($emails as $email) {
                    $clear_subject = waxaClear($subject, $email);
                    $clear_message = waxaClear($message, $email);
                    
                    $result = $mailer->sendEmail($email, $clear_subject, $clear_message, $from_email, $from_name, $is_html);
                    
                    if($result['success']) {
                        $sent_count++;
                        $logs[] = "<div class='alert alert-success'>[$counter/$total] ✓ Sent to: $email <small>(Method: {$result['method']})</small></div>";
                    } else {
                        $failed_count++;
                        $logs[] = "<div class='alert alert-danger'>[$counter/$total] ✗ Failed: $email <small>- {$result['error']}</small></div>";
                    }
                    
                    $counter++;
                    @ob_flush();
                    @flush();
                    usleep($delay);
                }
            }
        }
    } elseif($_POST['action'] == 'extract') {
        $text = $_POST['extract_text'] ?? '';
        $emails = extractEmailsFromText($text);
        $email_list = implode("\n", $emails);
        $logs[] = '<div class="alert alert-success">✓ Extracted ' . count($emails) . ' email addresses</div>';
    } elseif($_POST['action'] == 'test') {
        $test_email = $_POST['test_email'] ?? '';
        if(isValidEmail($test_email)) {
            $result = $mailer->sendEmail(
                $test_email,
                'Test from Waxa Mailer v3.2',
                'This is a test email sent from Waxa Mailer v3.2. If you receive this, your email system is working correctly.',
                $_POST['from_email'] ?? 'noreply@' . $_SERVER['HTTP_HOST'],
                'Waxa Test',
                true
            );
            
            if($result['success']) {
                $logs[] = '<div class="alert alert-success">✓ Test email sent successfully! <small>(Method: ' . $result['method'] . ')</small></div>';
            } else {
                $logs[] = '<div class="alert alert-danger">✗ Test failed: ' . $result['error'] . '</div>';
            }
        } else {
            $logs[] = '<div class="alert alert-danger">Please enter a valid test email address</div>';
        }
    }
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Waxa Mailer v3.2 - Ultimate cPanel Bulk Email Sender</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
    <style>
        :root {
            --primary: #667eea;
            --secondary: #764ba2;
            --success: #10b981;
            --danger: #ef4444;
            --warning: #f59e0b;
            --info: #3b82f6;
            --dark: #1f2937;
            --light: #f9fafb;
        }
        
        body {
            background: linear-gradient(135deg, #f5f7fa 0%, #e4e8f0 100%);
            min-height: 100vh;
            font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
        }
        
        .navbar {
            background: white;
            box-shadow: 0 4px 20px rgba(0,0,0,0.08);
            padding: 15px 0;
        }
        
        .navbar-brand {
            font-weight: 800;
            background: linear-gradient(135deg, var(--primary), var(--secondary));
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
            font-size: 1.8rem;
        }
        
        .card {
            border: none;
            border-radius: 15px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.08);
            transition: all 0.3s ease;
            margin-bottom: 24px;
            overflow: hidden;
        }
        
        .card:hover {
            transform: translateY(-5px);
            box-shadow: 0 15px 40px rgba(0,0,0,0.12);
        }
        
        .card-header {
            background: white;
            border-bottom: 2px solid #f0f0f0;
            padding: 20px 25px;
            font-weight: 600;
            font-size: 1.2rem;
        }
        
        .card-body {
            padding: 25px;
        }
        
        .btn-primary {
            background: linear-gradient(135deg, var(--primary), var(--secondary));
            border: none;
            padding: 12px 28px;
            font-weight: 600;
            border-radius: 10px;
            transition: all 0.3s;
        }
        
        .btn-primary:hover {
            transform: translateY(-2px);
            box-shadow: 0 10px 20px rgba(102, 126, 234, 0.3);
        }
        
        .form-control, .form-select {
            border: 2px solid #e5e7eb;
            border-radius: 10px;
            padding: 12px 16px;
            font-size: 1rem;
            transition: all 0.3s;
        }
        
        .form-control:focus, .form-select:focus {
            border-color: var(--primary);
            box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
        }
        
        .nav-tabs {
            border-bottom: 2px solid #e5e7eb;
            margin-bottom: 25px;
        }
        
        .nav-tabs .nav-link {
            border: none;
            color: #6b7280;
            font-weight: 500;
            padding: 12px 24px;
            border-radius: 10px 10px 0 0;
            margin-right: 5px;
            transition: all 0.3s;
        }
        
        .nav-tabs .nav-link:hover {
            color: var(--primary);
            background: rgba(102, 126, 234, 0.05);
        }
        
        .nav-tabs .nav-link.active {
            background: linear-gradient(135deg, var(--primary), var(--secondary));
            color: white;
            border: none;
            box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
        }
        
        .stats-card {
            text-align: center;
            padding: 25px;
            border-radius: 12px;
            background: white;
            transition: all 0.3s;
        }
        
        .stats-card:hover {
            transform: translateY(-3px);
        }
        
        .stats-icon {
            font-size: 2.5rem;
            margin-bottom: 15px;
            background: linear-gradient(135deg, var(--primary), var(--secondary));
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
        }
        
        .stats-number {
            font-size: 2.2rem;
            font-weight: 700;
            margin: 10px 0;
        }
        
        .method-badge {
            font-size: 0.75rem;
            padding: 4px 10px;
            border-radius: 20px;
            font-weight: 600;
        }
        
        .badge-primary { background: linear-gradient(135deg, var(--primary), var(--secondary)); }
        .badge-success { background: linear-gradient(135deg, var(--success), #059669); }
        .badge-info { background: linear-gradient(135deg, var(--info), #2563eb); }
        .badge-warning { background: linear-gradient(135deg, var(--warning), #d97706); }
        
        .log-container {
            max-height: 400px;
            overflow-y: auto;
            background: var(--dark);
            color: white;
            padding: 20px;
            border-radius: 10px;
            font-family: 'Courier New', monospace;
            font-size: 0.9rem;
        }
        
        .log-success { color: #4ade80; }
        .log-error { color: #f87171; }
        .log-warning { color: #fbbf24; }
        .log-info { color: #60a5fa; }
        
        .template-card {
            cursor: pointer;
            transition: all 0.3s;
            border: 2px dashed #d1d5db;
            height: 100%;
            border-radius: 12px;
            padding: 25px;
            text-align: center;
            background: white;
        }
        
        .template-card:hover {
            border-color: var(--primary);
            transform: translateY(-5px);
            box-shadow: 0 10px 25px rgba(0,0,0,0.1);
        }
        
        .template-icon {
            font-size: 2.5rem;
            margin-bottom: 15px;
            background: linear-gradient(135deg, var(--primary), var(--secondary));
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
        }
        
        .system-check-item {
            padding: 15px;
            margin-bottom: 10px;
            background: #f9fafb;
            border-radius: 8px;
            border-left: 4px solid #d1d5db;
        }
        
        .system-check-item.success { border-left-color: var(--success); }
        .system-check-item.warning { border-left-color: var(--warning); }
        .system-check-item.danger { border-left-color: var(--danger); }
        
        .tag-btn {
            border: 1px solid #d1d5db;
            background: white;
            color: #6b7280;
            padding: 6px 12px;
            border-radius: 6px;
            font-size: 0.85rem;
            margin: 2px;
            transition: all 0.2s;
        }
        
        .tag-btn:hover {
            background: #f3f4f6;
            border-color: var(--primary);
            color: var(--primary);
        }
        
        .modal-header {
            background: linear-gradient(135deg, var(--primary), var(--secondary));
            color: white;
            border-radius: 15px 15px 0 0;
            padding: 20px 25px;
        }
        
        .progress {
            height: 10px;
            border-radius: 5px;
            background: #e5e7eb;
        }
        
        .progress-bar {
            background: linear-gradient(135deg, var(--primary), var(--secondary));
            border-radius: 5px;
        }
        
        .alert {
            border: none;
            border-radius: 10px;
            padding: 15px 20px;
            margin-bottom: 15px;
        }
        
        .alert-success {
            background: linear-gradient(135deg, rgba(16, 185, 129, 0.1), rgba(16, 185, 129, 0.05));
            color: #065f46;
            border-left: 4px solid var(--success);
        }
        
        .alert-danger {
            background: linear-gradient(135deg, rgba(239, 68, 68, 0.1), rgba(239, 68, 68, 0.05));
            color: #991b1b;
            border-left: 4px solid var(--danger);
        }
        
        .alert-warning {
            background: linear-gradient(135deg, rgba(245, 158, 11, 0.1), rgba(245, 158, 11, 0.05));
            color: #92400e;
            border-left: 4px solid var(--warning);
        }
        
        .alert-info {
            background: linear-gradient(135deg, rgba(59, 130, 246, 0.1), rgba(59, 130, 246, 0.05));
            color: #1e40af;
            border-left: 4px solid var(--info);
        }
        
        @media (max-width: 768px) {
            .card-body {
                padding: 20px;
            }
            
            .stats-card {
                padding: 20px;
            }
            
            .navbar-brand {
                font-size: 1.5rem;
            }
        }
    </style>
</head>
<body>
    <!-- Navigation -->
    <nav class="navbar navbar-expand-lg">
        <div class="container">
            <a class="navbar-brand" href="#">
                <i class="bi bi-send-check me-2"></i>Waxa Mailer
            </a>
            <div class="d-flex align-items-center">
                <span class="badge bg-primary me-3">
                    <i class="bi bi-lightning-charge"></i> v3.2
                </span>
                <div class="dropdown">
                    <button class="btn btn-outline-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown">
                        <i class="bi bi-person-circle"></i> Admin
                    </button>
                    <ul class="dropdown-menu dropdown-menu-end">
                        <li><a class="dropdown-item" href="#" data-bs-toggle="modal" data-bs-target="#helpModal">
                            <i class="bi bi-question-circle"></i> Help
                        </a></li>
                        <li><hr class="dropdown-divider"></li>
                        <li><a class="dropdown-item text-danger" href="?logout=1">
                            <i class="bi bi-box-arrow-right"></i> Logout
                        </a></li>
                    </ul>
                </div>
            </div>
        </div>
    </nav>

    <div class="container py-4">
        <!-- Tabs Navigation -->
        <ul class="nav nav-tabs" id="waxaTabs" role="tablist">
            <li class="nav-item" role="presentation">
                <button class="nav-link active" id="compose-tab" data-bs-toggle="tab" data-bs-target="#compose" type="button">
                    <i class="bi bi-envelope-paper me-2"></i>Compose
                </button>
            </li>
            <li class="nav-item" role="presentation">
                <button class="nav-link" id="system-tab" data-bs-toggle="tab" data-bs-target="#system" type="button">
                    <i class="bi bi-gear me-2"></i>System
                </button>
            </li>
            <li class="nav-item" role="presentation">
                <button class="nav-link" id="templates-tab" data-bs-toggle="tab" data-bs-target="#templates" type="button">
                    <i class="bi bi-file-earmark-text me-2"></i>Templates
                </button>
            </li>
            <li class="nav-item" role="presentation">
                <button class="nav-link" id="logs-tab" data-bs-toggle="tab" data-bs-target="#logs" type="button">
                    <i class="bi bi-list-check me-2"></i>Logs
                </button>
            </li>
        </ul>

        <div class="tab-content" id="waxaTabsContent">
            <!-- Compose Tab -->
            <div class="tab-pane fade show active" id="compose" role="tabpanel">
                <div class="row">
                    <div class="col-lg-8">
                        <div class="card">
                            <div class="card-header">
                                <h5 class="mb-0"><i class="bi bi-envelope-paper me-2"></i>Compose Email</h5>
                            </div>
                            <div class="card-body">
                                <form method="post" id="emailForm">
                                    <input type="hidden" name="action" value="send">
                                    
                                    <div class="row mb-3">
                                        <div class="col-md-6">
                                            <label class="form-label">From Email *</label>
                                            <input type="email" class="form-control" name="from_email" required 
                                                   value="<?= htmlspecialchars($_POST['from_email'] ?? 'noreply@' . $_SERVER['HTTP_HOST']) ?>">
                                            <small class="text-muted">Use an email from your domain</small>
                                        </div>
                                        <div class="col-md-6">
                                            <label class="form-label">Sender Name</label>
                                            <input type="text" class="form-control" name="from_name" 
                                                   value="<?= htmlspecialchars($_POST['from_name'] ?? 'Waxa Mailer') ?>">
                                        </div>
                                    </div>
                                    
                                    <div class="mb-3">
                                        <label class="form-label">Subject *</label>
                                        <div class="input-group">
                                            <input type="text" class="form-control" name="subject" required 
                                                   value="<?= htmlspecialchars($_POST['subject'] ?? 'Important Message from ' . $_SERVER['HTTP_HOST']) ?>">
                                            <button type="button" class="btn btn-outline-secondary" onclick="addTag('subject', '[-randomstring-]')">
                                                Add Tag
                                            </button>
                                        </div>
                                    </div>
                                    
                                    <div class="mb-3">
                                        <label class="form-label">Message *</label>
                                        <textarea class="form-control" name="message" rows="12" required 
                                                  id="messageArea"><?= htmlspecialchars($_POST['message'] ?? "Hello [-emailuser-],

This is a test email sent from Waxa Mailer v3.2.

• Your email: [-email-]
• Domain: [-emaildomain-]
• Time: [-time-]
• Reference: [-randomstring-]

Thank you,
The Team") ?></textarea>
                                        <div class="mt-2">
                                            <small class="text-muted">Quick tags: </small>
                                            <?php
                                            $tags = ['[-email-]', '[-emailuser-]', '[-emaildomain-]', '[-time-]', '[-date-]', '[-randomstring-]', '[-randommd5-]', '[-token-]'];
                                            foreach($tags as $tag){
                                                echo '<button type="button" class="tag-btn" onclick="addTag(\'message\', \'' . $tag . '\')">' . $tag . '</button>';
                                            }
                                            ?>
                                        </div>
                                    </div>
                                    
                                    <div class="mb-3">
                                        <label class="form-label">Email List (one per line) *</label>
                                        <textarea class="form-control" name="email_list" rows="8" required id="emailListArea"><?= htmlspecialchars($_POST['email_list'] ?? '') ?></textarea>
                                        <div class="mt-2">
                                            <button type="button" class="btn btn-outline-info btn-sm me-2" data-bs-toggle="modal" data-bs-target="#extractModal">
                                                <i class="bi bi-magic"></i> Extract Emails
                                            </button>
                                            <button type="button" class="btn btn-outline-success btn-sm me-2" data-bs-toggle="modal" data-bs-target="#testModal">
                                                <i class="bi bi-check-circle"></i> Send Test
                                            </button>
                                            <button type="button" class="btn btn-outline-secondary btn-sm" onclick="document.getElementById('emailListArea').value = ''">
                                                <i class="bi bi-trash"></i> Clear
                                            </button>
                                        </div>
                                    </div>
                                    
                                    <div class="row mb-4">
                                        <div class="col-md-6">
                                            <div class="form-check form-switch">
                                                <input class="form-check-input" type="checkbox" name="is_html" id="is_html" checked>
                                                <label class="form-check-label" for="is_html">
                                                    <i class="bi bi-code-slash"></i> Send as HTML email
                                                </label>
                                            </div>
                                        </div>
                                        <div class="col-md-6">
                                            <label class="form-label">Delay between emails (ms)</label>
                                            <input type="range" class="form-range" name="delay" min="0" max="1000" value="100" 
                                                   oninput="document.getElementById('delayValue').innerText = this.value + 'ms'">
                                            <div class="text-center">
                                                <span id="delayValue" class="badge bg-secondary">100ms</span>
                                            </div>
                                            <input type="hidden" name="delay" value="100000">
                                        </div>
                                    </div>
                                    
                                    <div class="d-grid gap-2 d-md-flex justify-content-md-between">
                                        <button type="submit" class="btn btn-primary btn-lg">
                                            <i class="bi bi-send-check"></i> Send Emails
                                        </button>
                                        <button type="button" class="btn btn-outline-secondary btn-lg" onclick="clearForm()">
                                            <i class="bi bi-eraser"></i> Clear All
                                        </button>
                                    </div>
                                </form>
                            </div>
                        </div>
                    </div>
                    
                    <div class="col-lg-4">
                        <!-- Stats -->
                        <div class="card">
                            <div class="card-header">
                                <h5 class="mb-0"><i class="bi bi-bar-chart me-2"></i>Statistics</h5>
                            </div>
                            <div class="card-body">
                                <div class="row">
                                    <div class="col-6 mb-3">
                                        <div class="stats-card">
                                            <i class="bi bi-check-circle stats-icon"></i>
                                            <div class="stats-number"><?= $sent_count ?></div>
                                            <p class="text-muted mb-0">Sent</p>
                                        </div>
                                    </div>
                                    <div class="col-6 mb-3">
                                        <div class="stats-card">
                                            <i class="bi bi-x-circle stats-icon"></i>
                                            <div class="stats-number"><?= $failed_count ?></div>
                                            <p class="text-muted mb-0">Failed</p>
                                        </div>
                                    </div>
                                </div>
                                <?php if($sent_count + $failed_count > 0): ?>
                                <div class="mt-3">
                                    <div class="d-flex justify-content-between mb-2">
                                        <span>Success Rate</span>
                                        <span><?= $sent_count > 0 ? round(($sent_count/($sent_count+$failed_count))*100, 2) : 0 ?>%</span>
                                    </div>
                                    <div class="progress">
                                        <div class="progress-bar" style="width: <?= $sent_count > 0 ? ($sent_count/($sent_count+$failed_count))*100 : 0 ?>%"></div>
                                    </div>
                                </div>
                                <?php endif; ?>
                            </div>
                        </div>
                        
                        <!-- Sending Methods -->
                        <div class="card">
                            <div class="card-header">
                                <h5 class="mb-0"><i class="bi bi-lightning-charge me-2"></i>Sending Methods</h5>
                            </div>
                            <div class="card-body">
                                <div class="list-group list-group-flush">
                                    <div class="list-group-item d-flex align-items-center">
                                        <div class="flex-grow-1">
                                            <strong>Method 1:</strong> Direct Sendmail
                                        </div>
                                        <span class="badge badge-primary method-badge">Primary</span>
                                    </div>
                                    <div class="list-group-item d-flex align-items-center">
                                        <div class="flex-grow-1">
                                            <strong>Method 2:</strong> PHP mail()
                                        </div>
                                        <span class="badge badge-success method-badge">Fallback</span>
                                    </div>
                                    <div class="list-group-item d-flex align-items-center">
                                        <div class="flex-grow-1">
                                            <strong>Method 3:</strong> SMTP Socket
                                        </div>
                                        <span class="badge badge-info method-badge">Fallback</span>
                                    </div>
                                    <div class="list-group-item d-flex align-items-center">
                                        <div class="flex-grow-1">
                                            <strong>Method 4:</strong> PHPMailer
                                        </div>
                                        <span class="badge badge-warning method-badge">Optional</span>
                                    </div>
                                    <div class="list-group-item d-flex align-items-center">
                                        <div class="flex-grow-1">
                                            <strong>Method 5:</strong> Shell Commands
                                        </div>
                                        <span class="badge badge-info method-badge">Fallback</span>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            
            <!-- System Tab -->
            <div class="tab-pane fade" id="system" role="tabpanel">
                <div class="card">
                    <div class="card-header">
                        <h5 class="mb-0"><i class="bi bi-gear me-2"></i>System Diagnostics</h5>
                    </div>
                    <div class="card-body">
                        <h6 class="mb-3">Mail System Status</h6>
                        <?php foreach($system_checks as $check => $status): ?>
                            <?php
                            $class = 'success';
                            if(strpos($status, 'Not found') !== false || strpos($status, 'Disabled') !== false) {
                                $class = 'danger';
                            } elseif(strpos($status, 'Closed') !== false || strpos($status, 'Not set') !== false) {
                                $class = 'warning';
                            }
                            ?>
                            <div class="system-check-item <?= $class ?>">
                                <div class="d-flex justify-content-between align-items-center">
                                    <span><strong><?= $check ?>:</strong></span>
                                    <span><?= $status ?></span>
                                </div>
                            </div>
                        <?php endforeach; ?>
                        
                        <hr class="my-4">
                        
                        <h6 class="mb-3">Server Information</h6>
                        <div class="row">
                            <div class="col-md-6">
                                <div class="system-check-item success">
                                    <strong>Domain:</strong><br>
                                    <?= htmlspecialchars($_SERVER['HTTP_HOST'] ?? 'Unknown') ?>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <div class="system-check-item success">
                                    <strong>Server IP:</strong><br>
                                    <?= htmlspecialchars($_SERVER['SERVER_ADDR'] ?? 'Unknown') ?>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <div class="system-check-item success">
                                    <strong>PHP Version:</strong><br>
                                    <?= phpversion() ?>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <div class="system-check-item success">
                                    <strong>Server Software:</strong><br>
                                    <?= htmlspecialchars($_SERVER['SERVER_SOFTWARE'] ?? 'Unknown') ?>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            
            <!-- Templates Tab -->
            <div class="tab-pane fade" id="templates" role="tabpanel">
                <div class="row">
                    <?php
                    $templates = [
                        'newsletter' => [
                            'title' => 'Newsletter',
                            'icon' => 'bi-newspaper',
                            'subject' => 'Monthly Newsletter - [-month-] [-year-]',
                            'message' => "Dear [-emailuser-],

Welcome to our [-month-] newsletter!

Here are the latest updates:
• New features added
• Upcoming events
• Special offers

Visit our website for more details.

Best regards,
Newsletter Team"
                        ],
                        'welcome' => [
                            'title' => 'Welcome Email',
                            'icon' => 'bi-emoji-smile',
                            'subject' => 'Welcome to Our Service, [-emailuser-]!',
                            'message' => "Hello [-emailuser-],

Welcome aboard! We're excited to have you with us.

Your account has been successfully created.

Account Details:
• Email: [-email-]
• Join Date: [-date-]
• Reference: [-randomstring-]

Get started by visiting your dashboard.

Thank you for choosing us!

Best regards,
Support Team"
                        ],
                        'promotion' => [
                            'title' => 'Promotion',
                            'icon' => 'bi-percent',
                            'subject' => 'Special Offer Just for You!',
                            'message' => "Hello [-emailuser-],

We have a special promotion for our valued members!

Use code: [-randomstring-]
Valid until: [-date-]

This offer is exclusive to you. Don't miss this opportunity!

Click here to claim your offer.

Best regards,
Promotions Team"
                        ],
                        'notification' => [
                            'title' => 'Notification',
                            'icon' => 'bi-bell',
                            'subject' => 'Important Notification - Reference: [-serial-]',
                            'message' => "Dear [-emailuser-],

This is an important notification regarding your account.

Notification ID: [-randommd5-]
Time: [-time-]
Reference: [-serial-]

Please take appropriate action if needed.

Best regards,
Notification System"
                        ]
                    ];
                    
                    foreach($templates as $key => $template):
                    ?>
                    <div class="col-md-6 col-lg-3 mb-4">
                        <div class="template-card" onclick="loadTemplate('<?= $key ?>')">
                            <i class="bi <?= $template['icon'] ?> template-icon"></i>
                            <h5><?= $template['title'] ?></h5>
                            <p class="text-muted small mb-0">Click to load this template</p>
                        </div>
                    </div>
                    <?php endforeach; ?>
                </div>
            </div>
            
            <!-- Logs Tab -->
            <div class="tab-pane fade" id="logs" role="tabpanel">
                <div class="card">
                    <div class="card-header d-flex justify-content-between align-items-center">
                        <h5 class="mb-0"><i class="bi bi-list-check me-2"></i>Sending Logs</h5>
                        <button class="btn btn-outline-secondary btn-sm" onclick="clearLogs()">
                            <i class="bi bi-trash"></i> Clear Logs
                        </button>
                    </div>
                    <div class="card-body">
                        <div class="log-container" id="logsContainer">
                            <?php if(!empty($logs)): ?>
                                <?php foreach(array_reverse($logs) as $log): ?>
                                    <?= $log ?>
                                <?php endforeach; ?>
                            <?php else: ?>
                                <div class="text-center text-muted py-4">
                                    <i class="bi bi-inbox display-4 mb-3"></i>
                                    <p>No logs yet. Send some emails to see logs here.</p>
                                </div>
                            <?php endif; ?>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    
    <!-- Modals -->
    <div class="modal fade" id="extractModal" tabindex="-1">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title"><i class="bi bi-magic me-2"></i>Extract Emails</h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>
                <div class="modal-body">
                    <form method="post" id="extractForm">
                        <input type="hidden" name="action" value="extract">
                        <div class="mb-3">
                            <label class="form-label">Paste text containing emails:</label>
                            <textarea class="form-control" name="extract_text" rows="10" placeholder="Paste any text here..."></textarea>
                        </div>
                    </form>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
                    <button type="submit" class="btn btn-primary" form="extractForm">Extract Emails</button>
                </div>
            </div>
        </div>
    </div>
    
    <div class="modal fade" id="testModal" tabindex="-1">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title"><i class="bi bi-check-circle me-2"></i>Send Test Email</h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>
                <div class="modal-body">
                    <form method="post" id="testForm">
                        <input type="hidden" name="action" value="test">
                        <div class="mb-3">
                            <label class="form-label">Test Email Address:</label>
                            <input type="email" class="form-control" name="test_email" placeholder="test@example.com" required>
                        </div>
                        <div class="mb-3">
                            <label class="form-label">From Email:</label>
                            <input type="email" class="form-control" name="from_email" value="<?= htmlspecialchars($_POST['from_email'] ?? 'noreply@' . $_SERVER['HTTP_HOST']) ?>" required>
                        </div>
                    </form>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
                    <button type="submit" class="btn btn-success" form="testForm">Send Test</button>
                </div>
            </div>
        </div>
    </div>
    
    <!-- Help Modal -->
    <div class="modal fade" id="helpModal" tabindex="-1">
        <div class="modal-dialog modal-lg">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title"><i class="bi bi-question-circle me-2"></i>Help & Documentation</h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>
                <div class="modal-body">
                    <h6>Available Tags</h6>
                    <div class="row mb-3">
                        <div class="col-md-6">
                            <ul class="list-unstyled">
                                <li><code>[-email-]</code> - Full recipient email</li>
                                <li><code>[-emailuser-]</code> - Email username part</li>
                                <li><code>[-emaildomain-]</code> - Email domain part</li>
                                <li><code>[-time-]</code> - Current date/time</li>
                                <li><code>[-date-]</code> - Current date</li>
                            </ul>
                        </div>
                        <div class="col-md-6">
                            <ul class="list-unstyled">
                                <li><code>[-randomstring-]</code> - Random alphanumeric</li>
                                <li><code>[-randommd5-]</code> - Random MD5 hash</li>
                                <li><code>[-token-]</code> - Security token</li>
                                <li><code>[-serial-]</code> - Unique serial number</li>
                                <li><code>[-domain-]</code> - Your domain name</li>
                            </ul>
                        </div>
                    </div>
                    
                    <h6>Tips for Success</h6>
                    <ul>
                        <li>Always use an email from your domain as sender</li>
                        <li>Start with a test email to verify setup</li>
                        <li>Use HTML format for better presentation</li>
                        <li>Add delay between emails to avoid limits</li>
                        <li>Check system diagnostics for issues</li>
                    </ul>
                </div>
            </div>
        </div>
    </div>
    
    <!-- Scripts -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
    <script>
        // Form functions
        function clearForm() {
            if(confirm('Clear all form data?')) {
                document.getElementById('emailForm').reset();
                localStorage.clear();
            }
        }
        
        function clearLogs() {
            document.getElementById('logsContainer').innerHTML = 
                '<div class="text-center text-muted py-4">' +
                '<i class="bi bi-inbox display-4 mb-3"></i>' +
                '<p>Logs cleared</p>' +
                '</div>';
        }
        
        function addTag(field, tag) {
            let textarea;
            if(field === 'message') {
                textarea = document.getElementById('messageArea');
            } else if(field === 'subject') {
                textarea = document.querySelector('[name="subject"]');
            } else {
                textarea = document.getElementById('emailListArea');
            }
            
            const start = textarea.selectionStart;
            const end = textarea.selectionEnd;
            const text = textarea.value;
            
            textarea.value = text.substring(0, start) + tag + text.substring(end);
            textarea.focus();
            textarea.setSelectionRange(start + tag.length, start + tag.length);
        }
        
        function loadTemplate(type) {
            const templates = {
                'newsletter': {
                    subject: 'Monthly Newsletter - [-month-] [-year-]',
                    message: `Dear [-emailuser-],

Welcome to our [-month-] newsletter!

Here are the latest updates:
• New features added
• Upcoming events
• Special offers

Visit our website for more details.

Best regards,
Newsletter Team`
                },
                'welcome': {
                    subject: 'Welcome to Our Service, [-emailuser-]!',
                    message: `Hello [-emailuser-],

Welcome aboard! We're excited to have you with us.

Your account has been successfully created.

Account Details:
• Email: [-email-]
• Join Date: [-date-]
• Reference: [-randomstring-]

Get started by visiting your dashboard.

Thank you for choosing us!

Best regards,
Support Team`
                },
                'promotion': {
                    subject: 'Special Offer Just for You!',
                    message: `Hello [-emailuser-],

We have a special promotion for our valued members!

Use code: [-randomstring-]
Valid until: [-date-]

This offer is exclusive to you. Don't miss this opportunity!

Click here to claim your offer.

Best regards,
Promotions Team`
                },
                'notification': {
                    subject: 'Important Notification - Reference: [-serial-]',
                    message: `Dear [-emailuser-],

This is an important notification regarding your account.

Notification ID: [-randommd5-]
Time: [-time-]
Reference: [-serial-]

Please take appropriate action if needed.

Best regards,
Notification System`
                }
            };
            
            if(templates[type]) {
                document.querySelector('[name="subject"]').value = templates[type].subject;
                document.getElementById('messageArea').value = templates[type].message;
                
                // Switch to compose tab
                const composeTab = new bootstrap.Tab(document.getElementById('compose-tab'));
                composeTab.show();
            }
        }
        
        // Auto-save form
        const emailForm = document.getElementById('emailForm');
        const formFields = ['from_email', 'from_name', 'subject', 'message', 'email_list'];
        
        formFields.forEach(field => {
            const element = emailForm.elements[field];
            if(element) {
                // Load saved data
                const saved = localStorage.getItem('waxa_' + field);
                if(saved) {
                    element.value = saved;
                }
                
                // Save on change
                element.addEventListener('input', function() {
                    localStorage.setItem('waxa_' + field, this.value);
                });
            }
        });
        
        // Form validation
        emailForm.addEventListener('submit', function(e) {
            const emailList = emailForm.elements['email_list'].value.trim();
            if(!emailList) {
                e.preventDefault();
                alert('Please enter at least one email address');
                emailForm.elements['email_list'].focus();
                return;
            }
            
            const emails = emailList.split('\n').filter(email => email.trim());
            const validEmails = emails.filter(email => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email));
            
            if(validEmails.length === 0) {
                e.preventDefault();
                alert('No valid email addresses found. Please check your email list.');
                return;
            }
            
            const delayInput = document.querySelector('[name="delay"]');
            const delayMs = delayInput ? parseInt(delayInput.value) : 100;
            delayInput.value = delayMs * 1000; // Convert to microseconds
            
            if(!confirm(`Send ${validEmails.length} email${validEmails.length > 1 ? 's' : ''}? This will use 5 different sending methods for maximum delivery.`)) {
                e.preventDefault();
            }
        });
        
        // Update delay display
        const delayRange = document.querySelector('input[type="range"][name="delay"]');
        if(delayRange) {
            delayRange.addEventListener('input', function() {
                document.getElementById('delayValue').innerText = this.value + 'ms';
            });
        }
        
        // Auto-scroll logs
        const logsContainer = document.getElementById('logsContainer');
        if(logsContainer) {
            logsContainer.scrollTop = logsContainer.scrollHeight;
        }
        
        // Initialize tooltips
        const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
        tooltipTriggerList.map(function (tooltipTriggerEl) {
            return new bootstrap.Tooltip(tooltipTriggerEl);
        });
    </script>
</body>
</html>