moukail/mailgun-mail-status-bundle
Symfony bundle for tracking Mailgun email delivery statuses. Integrates Mailgun events/webhooks to monitor delivered, opened, clicked, bounced, and failed messages, helping applications manage transactional email feedback and status updates.
Package posture (from metadata alone): zero stars, zero dependents, zero dependents score, and a last release of 2021-12-14. That combination is the single most important input to this assessment. It indicates a package with no observable production adoption and no maintenance activity for roughly three-plus years. Treat this as a source-reference artifact, not a dependency.
Architecture fit: The intent is legible from the name: ingest Mailgun delivery events (delivered, bounced, dropped, complained, opened, clicked) and persist/expose mail status. That is a real, recurring need in any Laravel app sending transactional mail. The architectural pattern — webhook receiver → event normalization → status store → optional notification/fan-out — fits cleanly into Laravel's HTTP kernel, queue, and event system. The fit is conceptually good; the execution risk is the problem.
Integration feasibility: Mechanically trivial to install (composer require), but that is where the simplicity ends. Two immediate unknowns gate everything:
-bundle suffix implies Symfony Bundle conventions (Bundle class, services.yaml, AbstractBundle), which do not map onto Laravel's ServiceProvider model. If so, "leverage in Laravel" means porting, not installing.illuminate/* or symfony/* to ranges that exclude Laravel 10/11 and PHP 8.2/8.3.Technical risk (ranked):
guzzlehttp/guzzle, nesbot/carbon, symfony/*), which is how you get a CVE you cannot patch without forking.Key questions to resolve before any commitment:
composer.json declare for type, require, and license?Verdict: Do not adopt as a dependency. Evaluate strictly as a reference implementation to be read, harvested for domain knowledge (event taxonomy, status state machine), and reimplemented in-house. The business capability is worth building; this package is not worth inheriting.
Stack fit: Assume Laravel (the requester's framing) with a queue worker and a relational database. The target surface is narrow — one webhook route, one signature middleware, one event→status mapper, one persistence model. That is on the order of a few hundred lines in a first-party implementation. Against that baseline, the package's value is domain insight, not delivered functionality.
Recommended path — harvest, don't install:
dropped vs bounced, permanent_fail vs temporary_fail). Output: a one-page domain note plus a list of anything non-obvious it handles.POST /webhooks/mailgun route → signature verification middleware → ShouldQueue job → normalize payload to a mail_events table with a unique index on Mailgun's event/message ID for idempotency → derive an aggregate mail_status on the parent record. Emit a Laravel event for downstream consumers.If someone insists on installing it anyway:
composer why-not laravel/framework ^10 first; expect a hard stop.Migration path (if already in use): Strangler pattern. Stand up the first-party webhook route on a new path, point Mailgun at it, dual-write to both stores for one release cycle, diff the results, then decommission. Do not attempt an in-place upgrade.
Compatibility: Verify PHP version, Laravel/Symfony version, and whether it requires an explicitly deprecated Mailgun SDK. Assume incompatibility until proven otherwise.
Sequencing: Audit → decision gate (build vs. abandon the capability entirely) → build → shadow-run → cut over → delete the package reference. The audit must precede any scheduling commitment; it may reveal the capability is already covered by a maintained alternative (e.g., Laravel's native mail events plus Mailgun's own webhook docs), which would retire the whole workstream.
Maintenance: This is the decisive factor. An abandoned dependency with zero dependents becomes your codebase the moment it is installed — you inherit the review burden, the patch burden, and the upgrade burden without the upstream. Budget an ongoing 1–2 hours per quarter just to re-verify it hasn't broken against a PHP or framework bump, and accept that the answer will eventually be "fork it." A ~300-line first-party implementation is cheaper to own over a 24-month horizon than a maintained fork of a 2021 package.
Support: None. No issue triage, no security advisories, no maintainer response. Any incident is a first-principles debugging exercise against source you did not write and cannot ask about. This is acceptable for a copied-and-adapted pattern; unacceptable for a live production dependency on the mail path.
Scaling: Mailgun webhook volume scales with send volume and is bursty — a large campaign produces a spike of delivery/bounce events. Two concerns:
Failure modes to design for:
delivered may arrive after an opened. Status derivation must be timestamp-ordered, not arrival-ordered.Ramp-up: Low for the pattern (it's a webhook receiver), moderate for the domain (Mailgun's event taxonomy and the bounce/complaint semantics that drive suppression lists have real business consequences — misclassifying a temporary_fail as permanent will suppress a deliverable address). Allocate a half-day of a senior engineer's time on the domain note, and make sure whoever owns deliverability signs off on the status mapping before it ships.
Recommendation to stakeholders: Approve a ~1-week discovery-plus-build workstream to implement mail status ingestion first-party, using this package only as reading material. Reject adoption as a dependency on abandonment, compatibility, and support grounds. Revisit only if the repository shows a release within the last 12 months and non-trivial dependent count at review time.
How can I help you explore Laravel packages today?