mailjet/laravel-mailjet
Laravel Mailjet
Fluent Mailjet API v3 integration & mail transport for Laravel.
Send transactional mail through the Laravel Mail facade, or talk to the full Mailjet
REST API — contacts, lists, campaigns, templates and webhooks — with an expressive wrapper.
Table of contents
- Features
- Requirements
- Installation
- Configuration
- Sending mail with the Mailjet transport
- Using the Mailjet API
- Optional service providers
- Sandbox mode
- Documentation
- Testing
- Contributing
- License
Features
- 📨 Drop-in mail transport — set one env var and every
Mailable/Notificationgoes through Mailjet. - 🧩 Full API v3 wrapper — low-level
get/post/put/deleteplus high-level helpers, built on the officialmailjet/mailjet-apiv3-phpclient. - 🗂️ Resource managers — dedicated, injectable services for contacts, lists, metadata, campaigns, campaign drafts, templates and event callbacks.
- 🧪 Sandbox mode — validate payloads in CI and local development without sending a single email.
- ⚡ Zero-config setup — package auto-discovery registers the provider and
Mailjetfacade for you.
Requirements
| Package | Supported versions |
|---|---|
| PHP | 7.4 · 8.x |
| Laravel | 9.x – 13.x |
| Symfony Mailer / Mailjet Mailer | 6.x · 7.x · 8.x |
Installation
composer require mailjet/laravel-mailjet
That's it. Package auto-discovery wires up the
MailjetServiceProvider and the Mailjet facade automatically.
Laravel 11 and newer — bootstrap/providers.php:
use Mailjet\LaravelMailjet\MailjetServiceProvider;
return [
App\Providers\AppServiceProvider::class,
MailjetServiceProvider::class,
];
Laravel 10 and older — config/app.php:
'providers' => [
// ...
Mailjet\LaravelMailjet\MailjetServiceProvider::class,
],
'aliases' => [
// ...
'Mailjet' => Mailjet\LaravelMailjet\Facades\Mailjet::class,
],
Configuration
Grab your API key and secret from the Mailjet account settings.
1. Add your credentials to .env:
MAILJET_APIKEY=your_api_key
MAILJET_APISECRET=your_api_secret
MAIL_FROM_ADDRESS=you@example.com
MAIL_FROM_NAME="Your App"
# Optional — process requests without actually sending
MAILJET_SANDBOX=false
2. Register the service in config/services.php:
'mailjet' => [
'key' => env('MAILJET_APIKEY'),
'secret' => env('MAILJET_APISECRET'),
// filter_var keeps the "true"/"false" env string honest (handy in Docker)
'sandbox' => filter_var(env('MAILJET_SANDBOX', false), FILTER_VALIDATE_BOOLEAN),
],
Need to tune the API URL, version, or the transactional/common/v4 clients? See the full configuration reference.
Sending mail with the Mailjet transport
1. Select the transport in .env:
MAIL_MAILER=mailjet
Laravel 6 and older use the
MAIL_DRIVERkey instead.
2. Declare the mailer in config/mail.php:
'mailers' => [
// ...
'mailjet' => [
'transport' => 'mailjet',
],
],
3. Send as usual — no Mailjet-specific code required:
use Illuminate\Support\Facades\Mail;
Mail::to($user)->send(new InvoicePaid($invoice));
Make sure the from address is a verified Mailjet sender. More patterns (Mailjet templates, variables, custom headers) live in the examples guide.
Using the Mailjet API
Import the facade:
use Mailjet\LaravelMailjet\Facades\Mailjet;
Low-level requests
Mailjet::get($resource, $args, $options);
Mailjet::post($resource, $args, $options);
Mailjet::put($resource, $args, $options);
Mailjet::delete($resource, $args, $options);
Every call returns a Mailjet\Response, or throws a
Mailjet\LaravelMailjet\Exception\MailjetException on an API error.
Filter arguments are documented in the Mailjet API reference.
High-level helpers
Mailjet::getAllLists($filters);
Mailjet::createList($body);
Mailjet::getListRecipients($filters);
Mailjet::getSingleContact($id);
Mailjet::createContact($body);
Mailjet::createListRecipient($body);
Mailjet::editListrecipient($id, $body);
Custom requests
$client = Mailjet::getClient(); // the underlying \Mailjet\Client instance
Optional service providers
Each Mailjet resource has a focused, injectable manager. Register only the providers you use
in config/app.php (or bootstrap/providers.php on Laravel 11+):
| Service provider | Manages | Contract |
|---|---|---|
Providers\ContactsServiceProvider |
Contacts, incl. deletion (API v4) | ContactsV4Contract |
Providers\ContactsListServiceProvider |
Contact lists | ContactsListContract |
Providers\ContactMetadataServiceProvider |
Contact properties / metadata | ContactMetadataContract |
Providers\CampaignServiceProvider |
Campaigns | CampaignContract |
Providers\CampaignDraftServiceProvider |
Campaign drafts | CampaignDraftContract |
Providers\TemplateServiceProvider |
Templates | TemplateServiceContract |
Providers\EventCallbackUrlServiceProvider |
Event (webhook) callback URLs | EventCallbackUrlContract |
// config/app.php
'providers' => [
// ...
Mailjet\LaravelMailjet\Providers\ContactsServiceProvider::class,
],
Then resolve the manager wherever you need it:
use Mailjet\LaravelMailjet\Services\ContactsV4Service;
public function handle(ContactsV4Service $contacts)
{
$contacts->delete(351406781);
}
Sandbox mode
With MAILJET_SANDBOX=true, Mailjet validates the request and returns a successful
response without delivering any email — ideal for staging environments and automated tests.
MAILJET_SANDBOX=true
Details in the configuration reference.
Documentation
| Resource | Link |
|---|---|
| Configuration reference | docs/configuration.md |
| Examples (campaigns, templates, Mailables) | docs/usage.md |
| Full docs site | https://mailjet.github.io/laravel-mailjet/ |
| Mailjet API v3 | https://dev.mailjet.com/ |
| PHP API client | https://github.com/mailjet/mailjet-apiv3-php |
Testing
composer install
bin/phpunit
Contributing
Issues and pull requests are welcome — see CONTRIBUTING.md.
License
Released under the MIT License.
Related Packages
Laravel package for Mailjet API V3 and Laravel Mailjet Mail Transport
Laravel mail driver package for Mailjet and wrapper for its API. Supports Larave...