2lenet/hermes-bundle
HermesBundle is a simple mail manager for the Crudit Bundle: create and send templated emails through Symfony Mailer. Per-template statistics track link clicks, and a statistics flag enables consent management links so recipients can manage consent. Install with composer require 2lenet/hermes-bundle...
Feature decisions
Build vs buy vs borrow
Roadmap / risk decisions this surfaces
Adopt when
Look elsewhere when
illuminate/mail, Blade/Markdown mailables, and Notifications; port Hermes' ideas (recipient status model, unsubscribe token, draft/cancel states) rather than the code.Minimum due-diligence checklist before committing
docs/ end-to-end; confirm config surface (CKEditor, MJML, transports) matches your environment.For executives
"Hermes is a small, MIT-licensed component that gives us an admin screen for managing and sending templated emails — multilingual, with attachments, unsubscribe handling, and per-recipient delivery status. It could take roughly 3–6 engineering weeks out of an email-admin roadmap item, with no license cost and no vendor lock-in. The project is still shipping steady, low-risk patch releases, which is a modest positive. Two caveats unchanged: it only fits our Symfony-based admin stack, not our Laravel services, and it's a low-adoption open-source project, so we'd own a pinned fork. Recommendation: adopt in the Symfony admin surface where it fits, and treat it as a design reference for the Laravel side."
For engineering
"It's a thin Symfony Mailer wrapper with CruditBundle CRUD on top:
Recipiententities, Twig templates (CKEditor + MJML configurable), status filtering, drafts, cancel-send, resend-per-recipient, CC sublists, attachments, and unsubscribe tokens. Value is the domain model and admin glue, not novel mail logic. Latest release 1.14.5 is a patch — mail status now counts CC recipients, plus a new partial; nothing breaking. Cost remains Symfony DI + Twig + Crudit coupling and a small, single-vendor maintainer base — so we vendor it, pin it, keep our own PHPStan/PHPUnit gates, and don't build anything on undocumented internals. On Laravel, we don't install it; we copy the recipient-status and unsubscribe patterns into our existing mailables, and copy the corrected status semantics too — a failed CC should flip the envelope to failed."
Framing the ask
How can I help you explore Laravel packages today?