thedoctor0/laravel-mailjet-driver
thedoctor0/laravel-mailjet-driver provides a Mailjet transport for Laravel's native mail system, letting you send email through Mailjet's API via the Mail facade. Configure credentials and use familiar Laravel mail workflows with minimal setup.
Architecture fit — The package occupies a well-defined seam: it is a mail transport adapter registered through Laravel's mail manager, configured via config/services.php + config/mail.php, and swappable by config alone. Blast radius is limited to outbound email, and the framework boundary is thin. That is the right shape for a third-party dependency.
The concern in 2.1.0 is that it opens a second, parallel integration surface. Mailjet::sendEmail() and Mailjet::sendSms() are static calls that bypass Illuminate\Mail\Mailer entirely — no Mailable, no mail events, no Mail::fake(), no queue integration, no log/array driver fallback in local and test environments. TPM framing: treat "mail transport" and "Send/SMS API facade" as two separate integrations with two separate testing and observability stories, not one package with a convenience method.
Integration feasibility — High. Composer-installable, package auto-discovery, no infrastructure prerequisites beyond an existing Mailjet account. The gating constraints are version, not effort: Laravel 11–13 and PHP 8.2+ only.
Technical risk
mailjet-apiv3-php ^1.6 changes the authentication surface (setAuthentication() made public) and raw-data parameter handling. Credential-handling changes are the highest-consequence class of change here: misconfiguration tends to fail opaquely.src/ across 184 tests is a strong regression signal for logic, but it says nothing about the live Mailjet HTTP contract, which is where failures actually originate. Coverage is a weak proxy; the CI matrix is the better evidence.Key questions for the maintainer / internal owners
sendEmail() method?sendEmail() for partial batch failures?Stack fit — Drop-in for any Laravel 11–13 service currently sending through Mailjet SMTP or the API directly; it replaces relay configuration with an API transport and yields structured API responses rather than SMTP status codes. SMS v4 is additive and architecturally independent — it should be evaluated on its own merits, not inherited from the mail decision.
Migration path — There is no 1.x → 2.x migration for L9/L10 apps; the framework upgrade is the prerequisite. For apps already on 2.0.x, 2.1.0 is minor and additive with no announced deprecations: pin ^2.1 rather than ^2.0 so the SDK fixes land, and expect no code changes to existing mail sending.
Compatibility checks before merge
mailjet/mailjet-apiv3-php at ^1.0–^1.5 will either block the upgrade or resolve to a version that breaks the driver.symfony/mailer constraints in our lockfile are satisfied by the Laravel 11–13 range.Sequencing
Mailer and one through Mailjet::sendEmail(). Compare logs, error surfaces, and test ergonomics. This single step resolves most open risk.Mailer for all user-facing transactional mail; the static facade only where we need raw Send API capabilities that Mailable cannot express. Without this, teams will adopt whichever is shorter to write.sendSms() directly.mailjet-apiv3-php directly — that is a different upgrade with different risk.Maintenance — Low steady-state toil while we sit on the supported matrix, but the "last three Laravel majors" policy converts every Laravel major into a package major and a potential forced app upgrade. Treat this dependency as part of the framework upgrade cycle in planning, not as a passive library.
Support — Single maintainer, no commercial backing. File upstream rather than fork. Because outbound mail is usually business-critical, keep a lightweight fork-feasibility note on file. The 1.x branch for L9/L10 has no stated sunset, which is unpriced risk for anyone still there.
Scaling — Throughput is bounded by the Mailjet plan's Send API rate limits and by Laravel queue worker concurrency, not by this package — no horizontal-scaling concern. The real scaling mistake is calling Mailjet::sendEmail() synchronously in a request path, which couples user latency to a third-party API and removes queue-based retry. Mandate queueing for anything on the facade.
Failure modes
Ramp-up — Roughly half a day for a Laravel developer to configure the transport and verify delivery. The facade and SMS add about a day once error handling and test fakes are accounted for. Required runbook additions: key rotation procedure, rate-limit alerting, bounce/complaint handling owner, and (if SMS ships) a spend cap. TPM-owned decisions: version pin policy (^2.1), a CI smoke test that actually sends and asserts, and a named owner for the Mailjet account.
How can I help you explore Laravel packages today?