Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Fin Mail Laravel Package

finity-labs/fin-mail

FinMail for Filament is an email template manager and composer. Build, manage, and send emails from your admin panel with token replacement, multilingual templates, themes, versioning, email logging, and a reusable Send Email action.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. buy for transactional email templating. Buying this package replaces what is typically a 2–6 week internal build (template CRUD, token/merge-tag parsing, rendering engine, version history, send logging, editor integration) with a composer require plus a day of configuration. The decision is less "is this package perfect" and more "is templated transactional email a differentiator for us" — for the vast majority of SaaS and internal-tool products, it is not.
  • Who edits email copy. The core product decision this unlocks is delegation: marketing, support, and ops can create and change transactional emails from the admin panel without an engineering ticket or a deploy. That converts a recurring engineering interruption into a self-serve workflow — worth quantifying against your current ticket volume for copy changes, subject-line tweaks, and translation updates.
  • Localization roadmap. Translatable templates (all locales in one record, per-locale rendering, TemplateMail::make('x', locale: 'hu')) mean "support German/Spanish/Japanese emails" becomes a content task rather than an engineering project. This directly de-risks international expansion: you can commit to new markets without a per-locale template engineering workstream.
  • Customer communications as a first-class product surface. Email logging with polymorphic model links, status tracking, and stored rendered bodies makes "what did we send this customer, when, and what did it say?" an answerable product question inside the admin — supporting support-agent workflows, dispute resolution, and CSAT investigations.
  • Auditability and change control. Automatic versioning with preview and one-click restore means non-technical editors can be given write access without fear: every change is reversible and inspectable. This is a prerequisite for letting non-engineers near customer-facing copy.
  • Roadmap sequencing for notification features. Because every send is a TemplateMail::make('slug') call, adding a new lifecycle email (order shipped, trial ending, invoice overdue) becomes content + a one-line trigger rather than a new Mailable class, view, and test. This materially lowers the cost of "add another notification" items on the roadmap and makes them schedulable in a single sprint alongside other work.
  • Admin UX consistency bet. If your panel is already Filament, this is a native-resource addition (SendEmailAction, SentEmailsRelationManager, Shield policies, nav control) rather than a bolt-on third-party UI. That constrains the decision usefully: the value is high because of the Filament context, not independent of it.
  • Branding/theming as a configurable, not coded, concern. Themes plus per-email branding overrides (withoutLogo(), overrideBranding([...])) let you support partner co-branding or white-label variants without forking views — a real enabler if co-marketing or reseller motions are on the roadmap.

Decision this most clearly answers: "Should we build an in-admin email template manager, or adopt one?" — Adopt, if you are on Filament and your needs are transactional (not campaign) email.

When to Consider This Package

Adopt when most of these are true:

  • The application runs Laravel 11/12/13 on PHP 8.2+ with Filament 4 or 5 already as the admin panel. This is a hard prerequisite — the package's value is inseparable from that stack.
  • Email volume is transactional and moderate (tens to low hundreds of thousands per month): receipts, onboarding, notifications, password resets, status changes. Not marketing blasts.
  • Non-engineers need to own email copy, or you anticipate needing that within 2–3 quarters.
  • You need multi-locale templates and want them in one record rather than duplicated rows.
  • You want send history tied to domain models ("show me emails sent for this invoice") without building a logging table and relation manager yourself.
  • You can accept a small, single-maintainer, MIT-licensed dependency, and your team is comfortable reading package source when edge cases appear. The escape hatch is real and important: templates render into standard Laravel mail, so a migration off the package means exporting rendered bodies and reintroducing Mailables — annoying, not catastrophic.
  • One engineer can own the integration and the dependency-resolution risk: the README documents a phpdocumentor/reflection-docblock vs. spatie/laravel-settings conflict. Budget half a day for install friction rather than assuming a clean composer require.

Look elsewhere when any of these are true:

  • You are not on Filament. The package is a Filament plugin; outside that ecosystem its value collapses to a small template-rendering library you could write in an afternoon.
  • You need campaign/bulk marketing email. No segmentation, no send-time optimization, no deliverability tooling, no bounce/complaint handling, no A/B testing. Use an ESP (Customer.io, Postmark, SendGrid, Mailchimp) for that and keep this for transactional only.
  • You require vendor SLAs, security review artifacts, or a support contract. 34 stars, 0 dependents, no release history depth. This is a credible small OSS package, not an enterprise-supported product. Treat it accordingly in your risk register.
  • Deliverability, suppression lists, or reputation monitoring are core requirements. Those belong in your sending infrastructure, not an admin template manager.
  • Your email bodies must be code-reviewed artifacts (regulated content, legal-approved wording with strict change control). Versioning helps, but "copy lives in a database and is edited in a browser" may fail a compliance review on its own; check with legal early.
  • You need the templating to handle complex logic. Token replacement, fallbacks, and {% if %} conditionals cover typical cases; anything resembling loops, computed totals, or rich formatting logic should be passed in via with()/extraData() and kept in code. If your emails need heavy logic, that logic does not belong in a WYSIWYG.

Two caveats to schedule as explicit review items, not footnotes:

  1. PII and stored rendered bodies. Email logging stores rendered HTML. The package already handles the obvious risk (password reset/verification emails skip body storage by default, and withoutStoringRenderedBody() exists), but you should still decide your retention policy up front — the install command offers scheduled cleanup of old sent emails, and you should turn it on with a defined window rather than defaulting to "forever."
  2. Queued-by-default behavior. TemplateMail is queued automatically and logged at dispatch with a Queued status, flipping to Sent/Failed after the worker runs. This is a good default, but it means your queue workers become part of the email critical path — confirm queue monitoring and failed-job alerting exist before launch.

How to Pitch It (Stakeholders)

For executives — the one-paragraph version: Transactional email is currently a developer task in our product: every copy change, every new notification, every new language is an engineering ticket and a deploy. This package moves that work into the admin panel, where marketing and support can do it themselves — with version history so nothing is unrecoverable, and a log of everything we've sent so support can answer "what did we tell this customer?" It is MIT-licensed and free, it plugs directly into the admin panel we already run, and the integration is roughly a day of engineering plus a day of hardening. We should treat it as a small, reversible bet: low cost, immediate reduction in engineering interruptions, and it unblocks our localization work without a separate project.

For engineering — the technical case:

  • One TemplateMail class replaces N per-template Mailables and Blade views. New transactional emails become TemplateMail::make('slug')->models([...]) — no new class, no new view, no new test scaffold.
  • First-class Filament integration: SendEmailAction drops into any resource's table/header actions; HasEmailTemplates + SentEmailsRelationManager gives per-record send history in two lines. Shield policies and nav config are handled.
  • Sensible seams where you'd want them: EditorContract for swapping the editor (RichEditor default, Tiptap/TinyMCE supported), resource classes are extendable and replaceable via the plugin, views are publishable, overrideView() per email, with()/extraData() for real Blade variables when tokens aren't enough.
  • Queued by default with configurable connection/queue; logging hooks are opt-in/opt-out per mailable (withLogging(), withoutLogging(), withoutStoringRenderedBody()).
  • Known friction to plan for: spatie/laravel-settings transitive dependency and a documented phpdocumentor resolution conflict; a custom Filament theme needs an @source line added (the installer attempts this). Test and style CI badges are green; a changelog and tagged releases exist.

For the risk-averse stakeholder — the honest framing: This is a young, single-maintainer package (34 stars, no known dependents). That is a real risk and we should not pretend otherwise. Three things make it acceptable: it is MIT-licensed so we can fork or patch it ourselves; it renders into standard Laravel mail, so removal is a contained migration rather than a rewrite; and it replaces code we would otherwise write and maintain ourselves — meaning the counterfactual is not "zero risk," it is "we own this code forever." Our mitigation is to pin the version, add an integration test around our three highest-value emails, and revisit the fork decision if the package goes 6+ months without a release.

Ask: Approve a timeboxed spike — one engineer, two days, installing against a staging panel and reproducing three real emails (including one translated, one with an attachment, and one with a conditional block). Success criteria: templates editable in-admin, sends logged and linked to their source record, and no unresolved dependency conflicts. On pass, adopt for transactional email only and keep campaign email out of scope.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
adachsoft/php-code-style