spatie/laravel-mailcoach-sendinblue-setup
Add-on for spatie/laravel-mailcoach that prepares a Sendinblue account for use with Mailcoach, enabling campaign sending and feedback processing through Sendinblue. Documentation available on the Mailcoach site.
Installation
composer require spatie/laravel-mailcoach-sendinblue-setup
Publish the config file:
php artisan vendor:publish --provider="Spatie\MailcoachSendinblueSetup\MailcoachSendinblueSetupServiceProvider" --tag="mailcoach-sendinblue-setup-config"
Configuration
Edit .env with your Sendinblue API credentials:
MAILCOACH_SENDINBLUE_API_KEY=your_sendinblue_api_key
MAILCOACH_SENDINBLUE_CONTACT_LIST_ID=your_contact_list_id
First Use Case
Use the MailcoachSendinblueSetup facade to create a Sendinblue contact list (if needed) and sync it with Mailcoach:
use Spatie\MailcoachSendinblueSetup\Facades\MailcoachSendinblueSetup;
MailcoachSendinblueSetup::syncContactList();
Syncing Contact Lists Periodically sync Mailcoach subscribers with Sendinblue:
// Run via cron or manually
MailcoachSendinblueSetup::syncContactList();
Handling Feedback Process email opens/clicks from Sendinblue webhooks:
// Define a webhook route in `routes/web.php`
Route::post('/sendinblue/webhook', [MailcoachSendinblueSetupController::class, 'handleWebhook']);
Campaign Tracking Use Mailcoach’s built-in tracking with Sendinblue’s API:
$campaign = Mailcoach::campaigns()->find($id);
$campaign->trackOpens(); // Uses Sendinblue's API under the hood
Leverage Mailcoach Events
Listen to Mailcoach\Events\CampaignSent to trigger syncs:
Mailcoach::campaigns()->sent(function ($campaign) {
MailcoachSendinblueSetup::syncContactList();
});
Batch Processing For large lists, use chunking:
MailcoachSendinblueSetup::syncContactList(100); // Sync 100 records at a time
Webhook Validation Validate Sendinblue webhook signatures in your controller:
public function handleWebhook(Request $request)
{
if (!MailcoachSendinblueSetup::validateWebhook($request)) {
abort(403);
}
// Process feedback
}
API Rate Limits Sendinblue’s API has rate limits (e.g., 100 requests/minute). Use batch processing to avoid hitting limits:
MailcoachSendinblueSetup::syncContactList(50); // Adjust batch size
Webhook Delays Sendinblue webhooks may arrive out of order or with delays. Use a queue for processing:
MailcoachSendinblueSetup::processFeedback($data)->onQueue('mailcoach');
Duplicate Contacts Ensure email addresses are deduplicated before syncing:
MailcoachSendinblueSetup::syncContactList(true); // Force deduplication
Missing Config
Forgetting to publish the config or set .env values will cause silent failures. Verify:
php artisan config:clear
Enable Logging
Add to config/mailcoach-sendinblue-setup.php:
'log' => env('MAILCOACH_SENDINBLUE_LOG', false),
Check logs in storage/logs/laravel.log.
Webhook Testing Use Sendinblue’s sandbox mode for testing:
MAILCOACH_SENDINBLUE_SANDBOX=true
Custom Contact Attributes Extend the sync to include custom fields:
MailcoachSendinblueSetup::extendContactSync(function ($subscriber) {
return ['custom_field' => $subscriber->custom_attribute];
});
Feedback Processing Override feedback handling:
MailcoachSendinblueSetup::extendFeedbackProcessing(function ($feedback) {
// Custom logic for opens/clicks
});
Contact List Filtering Filter subscribers before syncing:
MailcoachSendinblueSetup::extendContactFilter(function ($subscriber) {
return $subscriber->active; // Only sync active subscribers
});
How can I help you explore Laravel packages today?