YT Email Log Viewer
Log all outgoing emails sent by wp_mail() for debugging with admin viewer and log management.
Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/krasenslavov/yt-email-log-viewer/archive/refs/heads/main.zipA WordPress plugin that logs all outgoing emails sent by wp_mail() for debugging purposes. Perfect for development, staging, and production environments where email monitoring is essential.
Features
- Automatic Email Logging: Captures all emails sent via
wp_mail() - Custom Database Table: Stores logs efficiently in a dedicated table
- Admin Interface: Clean, intuitive interface for viewing email logs
- Status Tracking: Distinguishes between sent and failed emails
- Detailed View: Expandable rows to view full email content, headers, and messages
- Pagination: Handles large numbers of logs efficiently (20 per page)
- Individual Log Deletion: Remove specific logs with AJAX
- Bulk Clear: Clear all logs with one click
- Auto-Cleanup: Automatically removes old logs when exceeding 1000 entries
- Secure: Proper nonce verification, capability checks, and sanitization
- WPCS Compliant: Follows WordPress Coding Standards
- Translation Ready: Full i18n/l10n support
Installation
- Upload the
yt-email-log-viewerfolder to/wp-content/plugins/ - Activate the plugin through the 'Plugins' menu in WordPress
- Access email logs via Tools > Email Logs in the admin menu
Usage
Viewing Email Logs
- Navigate to Tools > Email Logs in the WordPress admin
- View the list of all logged emails with:
- ID
- Status (Sent/Failed)
- Recipient email address
- Subject line
- Date sent
- Click View to expand and see full email details:
- Headers
- Complete message content
Managing Logs
- Delete Individual Log: Click the "Delete" button next to any log entry
- Clear All Logs: Click the "Clear All Logs" button in the header
- Auto-Cleanup: Plugin automatically maintains a maximum of 1000 logs
Quick Access
- A "View Logs" link is added to the plugin's row on the Plugins page for quick access
File Structure
yt-email-log-viewer/
├── class-yt-email-log-viewer.php # Main plugin file (480 lines)
├── assets/
│ ├── css/
│ │ └── admin.css # Admin interface styles
│ └── js/
│ └── admin.js # Admin AJAX functionality
└── README.md # This file
Technical Details
Database Schema
The plugin creates a custom table wp_yt_email_logs with the following structure:
CREATE TABLE wp_yt_email_logs (
id bigint(20) NOT NULL AUTO_INCREMENT,
email_to varchar(255) NOT NULL,
subject varchar(255) NOT NULL,
message longtext NOT NULL,
headers text,
status varchar(20) NOT NULL DEFAULT 'sent',
sent_date datetime NOT NULL,
PRIMARY KEY (id),
KEY status (status),
KEY sent_date (sent_date)
);
Hooks Used
Actions:
wp_mail- Captures outgoing email dataadmin_menu- Adds admin page under Toolsadmin_enqueue_scripts- Loads CSS/JS on admin pagewp_ajax_ytelv_clear_logs- AJAX handler for clearing logswp_ajax_ytelv_delete_log- AJAX handler for deleting single log
Filters:
wp_mail_failed- Captures failed email attemptsplugin_action_links_*- Adds "View Logs" link to plugins page
Prefixes
All functions, classes, and database elements are prefixed with ytelv_ or YT_Email_Log_Viewer to avoid conflicts:
- Class:
YT_Email_Log_Viewer - Constants:
YT_EMAIL_LOG_VIEWER_* - Functions:
ytelv_* - Database Table:
wp_yt_email_logs - AJAX Actions:
ytelv_* - CSS/JS Classes:
.ytelv-*
Security Features
- Nonce verification for all AJAX requests
- Capability checks (
manage_options) for admin access - Sanitized input data (
sanitize_text_field()) - Escaped output (
esc_html(),esc_attr(),esc_url()) - Prepared SQL statements (
$wpdb->prepare()) - Direct file access prevention
Data Management
On Activation
- Creates custom database table with proper indexes
- Uses
dbDelta()for safe table creation/updates
On Deactivation
- Keeps data intact (logs preserved)
On Uninstall
- Drops custom database table
- Removes all plugin options
- Clears cache
Auto-Cleanup
- Automatically removes oldest logs when exceeding 1000 entries
- Maintains optimal database performance
Browser Compatibility
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
WordPress Compatibility
- Requires WordPress: 5.8 or higher
- Tested up to: 6.7
- Requires PHP: 7.4 or higher
Performance
- Lightweight: Single PHP file + CSS + JS
- Efficient database queries with proper indexing
- AJAX-powered interface (no page reloads for actions)
- Pagination for large datasets
- Auto-cleanup prevents database bloat
Development
Line Count
- Main PHP: ~480 lines (including comments)
- CSS: ~220 lines
- JS: ~180 lines
- Total: ~880 lines
Coding Standards
Built following:
- WordPress Plugin Handbook
- WordPress Coding Standards (WPCS)
- PHP 7.4+ best practices
Testing Checklist
- [x] Plugin activates without errors
- [x] Database table created successfully
- [x] Email logging works for sent emails
- [x] Failed email logging works
- [x] Admin page displays correctly
- [x] View details functionality works
- [x] Delete single log works (AJAX)
- [x] Clear all logs works (AJAX)
- [x] Pagination works correctly
- [x] Auto-cleanup maintains max logs
- [x] Plugin deactivates cleanly
- [x] Plugin uninstalls and removes all data
- [x] No PHP warnings or notices
- [x] WPCS compliant
Use Cases
- Development: Debug email sending issues during development
- Staging: Verify email content before production deployment
- Production: Monitor outgoing emails and track delivery
- Troubleshooting: Investigate email-related issues
- Compliance: Maintain records of sent emails
- Testing: Verify email functionality without actual sending
Limitations
- Does not prevent emails from being sent (logs only)
- Does not handle attachments separately (stored in message body if inline)
- Maximum 1000 logs stored (auto-cleanup removes older entries)
- Admin-only access (requires
manage_optionscapability)
Future Enhancements
Potential features for future versions:
- Export logs to CSV/JSON
- Email search and filtering
- Attachments tracking
- Email resend functionality
- Scheduled log cleanup options
- Email statistics dashboard
- Custom retention periods
- Role-based access control
Support
For issues, questions, or contributions:
- GitHub: krasenslavov/yt-email-log-viewer
- Author: Krasen Slavov
License
GPL v2 or later - https://www.gnu.org/licenses/gpl-2.0.html
Credits
Built using the YT WordPress Plugin Boilerplate following WordPress Plugin Handbook and WPCS guidelines.
Changelog
1.0.0
- Initial release
- Email logging functionality
- Admin interface with pagination
- Individual log deletion
- Bulk log clearing
- Auto-cleanup feature
- Full WPCS compliance