EMAIL TRACKING PRO SUITE (PHP + MySQL) ---------------------------------------- This package includes: - Advanced open & click tracking with: - Device / OS / Browser detection - Country / Region / City (via MaxMind GeoLite2 City, optional) - Bot & blacklist flags - Pro dashboard: - Campaign comparison & CTR - Device/OS/Browser charts - Timeline graph (opens vs clicks) - Click heatmap (top URLs) - Geo map by country - Tools: - Tracking Link Generator (+ Base64) - Email Cleaning (syntax, duplicates, disposable, spam-trap) - DNS Checker (SPF/DMARC) - Bounce Analyzer (soft/hard classification) - A/B Test manager (compare campaign CTR) - Auto-Tag & Inactive Management (subscribers table) - CSV Export - Security: - Password + static 2FA code - Simple login rate limiting (per session) FILES ----- - config.php - pixel.php - redirect.php - dashboard.php - link_generator.php - email_tools.php - dns_tools.php - bounce_tools.php - ab_tests.php - maintenance.php - export_csv.php - README.txt DATABASE -------- Example schema: CREATE DATABASE email_tracking CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'tracker'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD_HERE'; GRANT ALL PRIVILEGES ON email_tracking.* TO 'tracker'@'localhost'; FLUSH PRIVILEGES; USE email_tracking; CREATE TABLE events ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, created_at DATETIME NOT NULL, type ENUM('open','click') NOT NULL, campaign_id VARCHAR(255) DEFAULT NULL, email_id VARCHAR(255) DEFAULT NULL, url TEXT DEFAULT NULL, ip VARCHAR(45) DEFAULT NULL, user_agent TEXT DEFAULT NULL, country VARCHAR(2) DEFAULT NULL, region VARCHAR(100) DEFAULT NULL, city VARCHAR(100) DEFAULT NULL, device_type VARCHAR(20) DEFAULT NULL, os VARCHAR(50) DEFAULT NULL, browser VARCHAR(50) DEFAULT NULL, is_bot TINYINT(1) DEFAULT 0, is_blacklisted TINYINT(1) DEFAULT 0, reading_time_seconds INT DEFAULT NULL, INDEX idx_campaign (campaign_id), INDEX idx_email (email_id), INDEX idx_type (type), INDEX idx_created (created_at), INDEX idx_country (country), INDEX idx_city (city), INDEX idx_device (device_type) ); CREATE TABLE subscribers ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, subscriber_id VARCHAR(255) NOT NULL, status VARCHAR(30) DEFAULT 'new', tags TEXT DEFAULT NULL, last_open DATETIME DEFAULT NULL, last_click DATETIME DEFAULT NULL, open_count INT DEFAULT 0, click_count INT DEFAULT 0, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, UNIQUE KEY uniq_subscriber (subscriber_id) ); CREATE TABLE ab_tests ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, campaign_a VARCHAR(255) NOT NULL, campaign_b VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL ); SERVER SETUP (Ubuntu) --------------------- 1) Install Apache + PHP + MySQL: sudo apt update sudo apt install apache2 php php-mysql mysql-server -y sudo mysql_secure_installation 2) Put these files under: /var/www/html/tracking/ 3) Edit config.php: - $DB_HOST, $DB_NAME, $DB_USER, $DB_PASS - $DEFAULT_REDIRECT - $DASHBOARD_USER, $DASHBOARD_PASS - $DASHBOARD_2FA_CODE (choose your own code) MAXMIND GEOIP (OPTIONAL) ------------------------ Follow earlier instructions (create free MaxMind account, download GeoLite2-City.mmdb, install geoip2/geoip2 via Composer, set correct $geoDbPath in config.php). USING THE TOOLS --------------- Dashboard: https://YOURDOMAIN.com/tracking/dashboard.php Link generator: https://YOURDOMAIN.com/tracking/link_generator.php Email cleaning: https://YOURDOMAIN.com/tracking/email_tools.php DNS checker: https://YOURDOMAIN.com/tracking/dns_tools.php Bounce analyzer: https://YOURDOMAIN.com/tracking/bounce_tools.php A/B tests: https://YOURDOMAIN.com/tracking/ab_tests.php Auto-tag & inactive: https://YOURDOMAIN.com/tracking/maintenance.php CSV export: https://YOURDOMAIN.com/tracking/export_csv.php?from=YYYY-MM-DD&to=YYYY-MM-DD PRIVACY & COMPLIANCE -------------------- You must: - Only email people who consented to receive marketing. - Include unsubscribe links and contact info. - Update your privacy policy to mention tracking (opens, clicks, IP, approximate location). - Respect GDPR and local laws. This code is a base; customize it to match your legal requirements and sending environment.