marceloeatworld / plunk-laravel
Laravel mail transport for Plunk API with event tracking and email verification
v1.0.0
2026-03-29 21:36 UTC
Requires
- php: ^8.2
- illuminate/mail: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0|^10.0
- phpunit/phpunit: ^10.0|^11.0|^12.0
README
A Laravel mail transport for Plunk with event tracking and email verification. Works with both the official Plunk service and self-hosted instances.
Requirements
- PHP 8.2+
- Laravel 10, 11, or 12
Installation
composer require marceloeatworld/plunk-laravel
Publish the config file:
php artisan vendor:publish --tag="plunk-config"
Configuration
Add the Plunk mailer to config/mail.php:
'mailers' => [ // ... other mailers 'plunk' => [ 'transport' => 'plunk', ], ],
Add to your .env:
MAIL_MAILER=plunk PLUNK_API_KEY=sk_your_secret_key
For self-hosted Plunk:
PLUNK_API_URL=https://plunk.yourdomain.com PLUNK_API_ENDPOINT=/api/v1/send
Usage
Sending Emails (Laravel Mail)
Use Laravel's mail system as usual -- emails are sent through Plunk automatically:
Mail::to('user@example.com')->send(new WelcomeMail());
Attachments, CC, BCC, and reply-to are all supported:
Mail::to('user@example.com') ->cc('manager@example.com') ->bcc('audit@example.com') ->send(new InvoiceMail());
Direct API Access (Facade)
Use the Plunk facade for direct API access:
use MarceloEatWorld\PlunkLaravel\Facades\Plunk; // Send email directly Plunk::sendEmail('user@example.com', 'Welcome', '<h1>Hello!</h1>', [ 'from' => 'hello@yourdomain.com', 'name' => 'Your App', 'reply' => 'support@yourdomain.com', ]); // Send with a Plunk template Plunk::sendTemplate('user@example.com', 'tmpl_welcome', [ 'name' => 'John', 'action_url' => 'https://app.example.com/verify', ]);
Event Tracking
Track events to trigger automations and segment contacts:
Plunk::trackEvent('user@example.com', 'signed_up', [ 'plan' => 'pro', 'source' => 'landing_page', ]);
Email Verification
Verify email addresses before sending:
$result = Plunk::verifyEmail('user@example.com'); if ($result['data']['valid']) { // Email is valid }
Multiple Recipients with Names
Plunk::sendEmail( [ 'alice@example.com', ['name' => 'Bob Smith', 'email' => 'bob@example.com'], ], 'Team Update', '<p>Hello team!</p>', );
Attachments (Direct API)
Plunk::sendEmail('user@example.com', 'Your Invoice', '<p>Attached.</p>', [ 'from' => 'billing@yourdomain.com', 'attachments' => [ [ 'filename' => 'invoice.pdf', 'content' => base64_encode(file_get_contents('/path/to/invoice.pdf')), 'contentType' => 'application/pdf', ], ], ]);
Testing
composer test
Credits
License
The MIT License (MIT). See LICENSE.md for details.