directorytree/imapengine-laravel
Laravel integration for ImapEngine, a PHP IMAP client that manages mailboxes without the PHP imap extension. Configure connections, access mailboxes and messages, and use a clean API to work with IMAP servers in your Laravel apps.
imap extension. It abstracts IMAP complexity into a Laravel-friendly API, aligning well with:
imap:watch for long-polling/idle).MailboxSynced events for reacting to changes).directorytree/imapengine PHP library, which may introduce latency or resource overhead compared to native extensions.imap:watch command supports idle (low-resource) or long-polling (fallback for restrictive environments).MailboxSynced, MailboxWatchAttemptsExceeded, etc., for reactivity.directorytree/imapengine (v1.19.0+), Laravel 10–13, PHP 8.1+.php-mime-mail-parser).config or Vault). No built-in encryption for credentials in transit/storage.imapengine's test utilities or custom stubs).mailhog or dovecot).ImapEngine as a singleton, integrating seamlessly with Laravel’s IoC.imap:watch for CLI-driven monitoring (ideal for cron jobs or Laravel Forge/Forge).MailboxSynced (for new emails) and MailboxWatchAttemptsExceeded (for failures), enabling reactive workflows (e.g., Queues, Notifications)..env for IMAP host, port, credentials, and polling intervals.ProcessIncomingEmail::dispatch($email)).spatie/array-to-xml or spatie/laravel-html-email for rich email handling.composer require directorytree/imapengine-laravel
imap:watch command:
php artisan imap:watch --mailbox=INBOX --method=idle
ImapEngine facade in AppServiceProvider:
$this->app->singleton(ImapEngine::class, function ($app) {
return new ImapEngine(config('imap.host'), config('imap.port'), config('imap.user'), config('imap.pass'));
});
MailboxSynced to process emails:
public function handle(MailboxSynced $event) {
foreach ($event->emails as $email) {
ProcessIncomingEmail::dispatch($email);
}
}
imap:watch in config/imap.php:
'watch' => [
'mailbox' => 'INBOX',
'method' => env('IMAP_WATCH_METHOD', 'idle'), // 'idle' or 'long-polling'
'interval' => 30, // seconds for long-polling
],
app/Console/Kernel.php:
$schedule->command('imap:watch')->everyMinute();
MailboxWatchAttemptsExceeded listener to log failures or trigger alerts:
public function handle(MailboxWatchAttemptsExceeded $event) {
Log::error("IMAP watch failed for {$event->mailbox}", ['attempts' => $event->attempts]);
// Optionally: Send Slack/email notification
}
illuminate/contracts version matches.directorytree/imapengine (v1.19.0+). Test with PHP 8.2+ for future compatibility.database, redis). Test with your preferred driver.imap:watch for a single mailbox.emails table with message_id, subject, body, attachments).ping endpoint).MailboxWatchAttemptsExceeded.directorytree/imapengine for breaking changes (e.g., IMAP protocol updates).How can I help you explore Laravel packages today?