A Laravel 13 application for monitoring DMARC aggregate reports delivered to one or more IMAP inboxes.
- Laravel 13 + Blade
- Breeze authentication (register, login, profile, logout)
- Tailwind-based UI with a dashboard and IMAP account management
- Multi-account IMAP configuration per user
- DMARC aggregate XML parsing
- Support for
.xml,.gz, and.zipreport attachments - Scheduled polling command:
dmarc:poll - Parsed storage for reports and per-source record rows
- PHP 8.3+
- Laravel 13
- SQLite by default for local development
- Tailwind CSS
webklex/php-imapfor mailbox access
Stores mailbox connection settings for each signed-in user.
Stores one imported DMARC aggregate report per mailbox/report id pair.
Stores parsed row-level DMARC data such as source IP, SPF, DKIM, and message count.
app/Http/Controllers/DashboardController.phpapp/Http/Controllers/ImapAccountController.phpapp/Services/Dmarc/DmarcIngestionService.phpapp/Services/Dmarc/DmarcXmlParser.phpapp/Services/Dmarc/DmarcAttachmentExtractor.phpapp/Console/Commands/DmarcPollCommand.php
From D:\Workspace\DMARC-Dashboard:
composer install
npm install
copy .env.example .env
php artisan key:generate
php artisan migrate
npm run buildphp artisan serve
php artisan schedule:work
npm run devOpen the app in your browser, register a user, and add one or more IMAP accounts from the dashboard.
Poll all active IMAP accounts:
php artisan dmarc:pollPoll a single IMAP account by id:
php artisan dmarc:poll --account=1The application schedules DMARC polling every five minutes in routes/console.php.
For production, wire Laravel's scheduler as usual:
php artisan schedule:runOr keep a foreground worker during development:
php artisan schedule:workFor providers such as Microsoft 365 or Gmail, an app password is usually the simplest v1 setup if standard password auth is enabled for IMAP.
Recommended starter values:
- Port:
993 - Encryption:
ssl - Folder:
INBOX - Search criteria:
UNSEEN
Run the automated test suite:
php artisan testThis repository includes a production-oriented container setup:
Dockerfiledocker-compose.ymldocker/entrypoint.sh
Start with:
docker compose up --build -dThe app is served on http://localhost:8080 by default.
See docker/README.md for service details, persistence, and operations commands.
Planned next-step features:
- Alert rules based on SPF/DKIM/disposition thresholds
- Email notifications
- Report detail pages and drill-down charts
- OAuth-based mailbox authentication
- Background queue-based mailbox polling