dophp/laravel-mail-builder
dophp/laravel-mail-builder provides a fluent, code-driven way to compose rich HTML emails in Laravel, helping you build and send templated messages without hand-writing markup. A lightweight helper for cleaner mailables.
Architecture fit
getodden/mail remains a Laravel-first package: Composer install, vendor:publish for frontend assets, and an optional Filament field (php artisan filament:assets). No separate service, queue, or migration. v2.5.3 adds no infrastructure.<odden-mail-editor>) driven by a JSON schema export (v3 as of v2.4.0). v2.5.3 does not touch the schema or the editor bundle.MailBuilder::embedCidImages() and CidImageEmbedder::embed(). Compiled output is no longer in the "unchanged" category for base-path callers.src such as ../secret in HTML could attach a file from outside the base directory to an outgoing email. That is a confidentiality issue, not just a correctness one.Integration feasibility
composer update getodden/mail. No asset republish required for v2.5.3 (no new bundles, no new module imports), though republishing is harmless if the pipeline always does it.embedCidImages( and CidImageEmbedder usage and checking for a base-path argument.php://, file://), and protocol-relative addresses are never treated as local paths. Each criterion is a potential silent drop.Technical risk
src resolved outside the base path, exceeded 5 MB, had a non-image MIME type, or used a wrapper/URL form now fail to embed. Some of these are legitimate images that a permissive check previously accepted (e.g. large hero images over the 5 MB threshold).image/svg+xml), HEIC, or images served with generic application/octet-stream type. Needs a concrete test.icons.js, stale bundles, --force overwriting customized assets, changed keyboard navigation) remain valid and unaddressed by this release.Key questions
embedCidImages() / CidImageEmbedder::embed()? This is the single question that determines impact. Everything else is conditional on it.../ segments, stream wrappers, or protocol-relative // sources — deliberately or by accident?Stack fit
Migration path
embedCidImages( and CidImageEmbedder and classify each call site: passes a base path / does not. Record them.composer update getodden/mail lands v2.5.3, and review notes for v2.4.1–v2.5.2 before merging.../ path.icons.js present, palette/search/tabs render) if assets were republished in the same window.Compatibility
icons.js non-backward-tolerance still applies to partial asset deploys.Sequencing
Operational Impact
Maintenance
icons.js.Support
three_column, order_receipt, dynamic_feed, labeled_divider) remain worth a changelog line.Scaling
icons.js) from v2.4.0 remains the only added fetch.Failure modes
../ traversal: intentionally or accidentally dependent on the old permissive behavior. These will now fail — verify none of ours do, and treat any that do as a bug on our side.icons.js breaks the editor; stale cached bundles cause JS/CSS mismatch; --force silently discards patched published assets; custom palettes reading v3 keys without fallbacks break on older schemas; keyboard QA scripts may false-negative on the new tabs pattern.Ramp-up
How can I help you explore Laravel packages today?