use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'vendor/autoload.php'; require 'functions.php'; // Include common functions // Load configuration $config = require 'config.php'; // Configuration $dbFile = $config['db_file']; $emailConfig = $config['email']; $smtpConfig = $config['smtp']; // Create or open the SQLite database $db = new PDO('sqlite:' . $dbFile); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Get statistics and domain details $data = getDomainStatsAndDetails($db); $stats = $data['stats']; $enabledDomainsCount = $data['enabledDomainsCount']; $checkedDomainsPercentage = $data['checkedDomainsPercentage']; $disabledDomainsPercentage = $data['disabledDomainsPercentage']; $oldestCheckedDomain = $data['oldestCheckedDomain']; $newestCheckedDomain = $data['newestCheckedDomain']; $domains = $data['domains']; // Generate the email body $emailBody = "Domain Expiration Report:\n\n"; $emailBody .= "Statistics:\n"; $emailBody .= "Total Domains: {$stats['total_domains']}\n"; emailBody .= "Checked Domains: {$stats['checked_domains']} (" . round($checkedDomainsPercentage, 2) . "%)\n"; $emailBody .= "Disabled Domains: {$stats['disabled_domains']} (" . round($disabledDomainsPercentage, 2) . "%)\n"; emailBody .= "Average Execution Time (ms): " . round($stats['avg_execution_time'], 2) . "\n"; $emailBody .= "Oldest Check: {$stats['oldest_check']} (Domain: " . implode(', ', $oldestCheckedDomain) . ")\n"; $emailBody .= "Most Recent Check: {$stats['most_recent_check']} (Domain: " . implode(', ', $newestCheckedDomain) . ")\n\n"; $emailBody .= "Domain Details:\n\n"; foreach ($domains as $row) { $emailBody .= "Domain: {$row['domain']}\n"; $emailBody .= "Domain Expiry Date: {$row['domain_expiry']}\n"; $emailBody .= "SSL Expiry Date: {$row['ssl_expiry']}\n"; $emailBody .= "Last Check: {$row['last_check']}\n"; $emailBody .= "Execution Time (ms): {$row['execution_time_ms']}\n"; $emailBody .= "NS Record: {$row['ns_record']}\n"; $emailBody .= "A Record: {$row['a_record']}\n"; $emailBody .= "MX Record: {$row['mx_record']}\n"; $emailBody .= "SPF Record: {$row['spf_record']}\n"; $emailBody .= "DMARC Record: {$row['dmarc_record']}\n"; $emailBody .= "DKIM Record: {$row['dkim_record']}\n"; $emailBody .= "Fixed Subdomain TXT Record: {$row['subdomain_txt_record']}\n"; $emailBody .= "WWW A Record: {$row['www_a_record']}\n"; $emailBody .= "WWW CNAME Record: {$row['www_cname_record']}\n"; $emailBody .= "\n"; // Compare actual DNS records to expected values and add to email body $emailBody .= "Comparison with expected values:\n"; $emailBody .= "NS Record match: " . (compareDNSRecords($row['ns_record'], $row['expected_ns']) ? 'Yes' : 'No') . "\n"; $emailBody .= "A Record match: " . (compareDNSRecords($row['a_record'], $row['expected_a']) ? 'Yes' : 'No') . "\n"; $emailBody .= "MX Record match: " . (compareDNSRecords($row['mx_record'], $row['expected_mx']) ? 'Yes' : 'No') . "\n"; $emailBody .= "SPF Record match: " . (compareDNSRecords($row['spf_record'], $row['expected_spf']) ? 'Yes' : 'No') . "\n"; $emailBody .= "DMARC Record match: " . (compareDNSRecords($row['dmarc_record'], $row['expected_dmarc']) ? 'Yes' : 'No') . "\n"; $emailBody .= "DKIM Record match: " . (compareDNSRecords($row['dkim_record'], $row['expected_dkim']) ? 'Yes' : 'No') . "\n"; $emailBody .= "Fixed Subdomain TXT Record match: " . (compareDNSRecords($row['subdomain_txt_record'], $row['expected_subdomain_txt']) ? 'Yes' : 'No') . "\n"; $emailBody .= "WWW A Record match: " . (compareDNSRecords($row['www_a_record'], $row['expected_www_a']) ? 'Yes' : 'No') . "\n"; $emailBody .= "WWW CNAME Record match: " . (compareDNSRecords($row['www_cname_record'], $row['expected_www_cname']) ? 'Yes' : 'No') . "\n"; $emailBody .= "\n"; } // Send the email report $mail = new PHPMailer(true); try { $mail->isSMTP(); $mail->Host = $smtpConfig['host']; $mail->SMTPAuth = true; $mail->Username = $smtpConfig['username']; $mail->Password = $smtpConfig['password']; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = $smtpConfig['port']; $mail->setFrom($emailConfig['from']); foreach ($emailConfig['recipients'] as $recipient) { $mail->addAddress($recipient); } $mail->isHTML(false); $mail->Subject = $emailConfig['subject']; $mail->Body = $emailBody; $mail->send(); echo "Email sent successfully!"; } catch (Exception $e) { echo "Failed to send email: {$mail->ErrorInfo}"; } // Reset the checked flag for all domains to prepare for the next day's processing $db->exec("UPDATE domains SET checked = 0"); ?>