conduit-ui / email
Provider-agnostic Laravel email client — Gmail first, extensible to Outlook/IMAP
v0.1.0
2026-04-09 23:33 UTC
Requires
- php: ^8.2
- laravel/framework: ^12.0|^13.0
- saloonphp/saloon: ^4.0
- spatie/laravel-data: ^4.0
Requires (Dev)
- laravel/pint: ^1.14
- orchestra/testbench: ^10.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
README
Provider-agnostic email client for Laravel. Gmail first, extensible to Outlook, IMAP, and more.
Installation
composer require conduit-ui/email
Configuration
Publish the config:
php artisan vendor:publish --tag=email-config
Set your Gmail access token:
EMAIL_DRIVER=gmail GMAIL_ACCESS_TOKEN=your-token
Usage
use ConduitUI\Email\EmailManager; $email = app(EmailManager::class); // List recent unread messages $messages = $email->driver()->listMessages('is:unread', maxResults: 10); // Each message is an EmailMessage DTO foreach ($messages as $message) { echo "{$message->fromName}: {$message->subject}"; echo PHP_EOL; } // Get a specific message $message = $email->driver()->getMessage('message-id'); // Search with Gmail syntax $results = $email->driver()->searchMessages('from:boss@company.com has:attachment');
EmailMessage DTO
ConduitUI\Email\Contracts\EmailMessage { string $id string $threadId string $subject string $from ?string $fromName ?string $date string $snippet array $labelIds }
Adding Drivers
Implement EmailProvider:
use ConduitUI\Email\Contracts\EmailProvider; class OutlookDriver implements EmailProvider { public function listMessages(string $query = '', int $maxResults = 10): Collection { ... } public function getMessage(string $messageId): EmailMessage { ... } public function searchMessages(string $query, int $maxResults = 10): Collection { ... } }
Register in the EmailManager or extend via config.
Requirements
- PHP 8.2+
- Laravel 12 or 13
- Saloon 4.x
- Spatie Laravel Data 4.x
License
MIT