mettle/sendportal-core
Core Laravel package powering SendPortal, a self-hosted email marketing platform. It provides models, services, and backend logic for managing subscribers, lists, campaigns, templates, and sending email through multiple providers.
Fix PostalAdapter (#205), HandleSesWebhook update (#193), Normalize header case for message ID extraction (#213), and the new Postmark SubscriptionChange webhook (#191) collectively signal that the package's value proposition is "bring your own ESP" (SES, Postmark, Postal, SMTP). This supports a roadmap decision to decouple your product from a single email vendor.Fix SMTP sends being reported as successful when they fail (#223) and the header-case fix (#213) matter if you expose delivery stats to customers or depend on them for billing/analytics. Prior to this release, failure rates could be silently understated.Fix: slow campaign query (#204) enables consideration of this package for larger subscriber lists without premature infrastructure investment.Add IDs to campaign statuses in migration (#217) improves the ability to key off status records programmatically — useful for integrations and reporting.{{email}}, {{first_name}}, {{last_name}} are once again not replaced by that change. Any roadmap betting on that personalization behavior must be re-validated against this version before committing.Consider adoption when:
Look elsewhere when:
{{email}}/{{first_name}}/{{last_name}} substitution contract just changed (back). Validate your content and tests before upgrading from 4.0.0.For executives: SendPortal Core is a free, open-source Laravel package that lets us own our email marketing infrastructure — subscriber lists, campaigns, templates, and delivery webhooks — on our own servers, using whichever email provider we choose. Version 4.0.1 is a stabilization release: it fixes a false-success reporting bug for SMTP sends (accuracy of our delivery metrics), fixes a performance issue in campaign queries (scale), repairs multiple ESP adapters (Postal, SES, Postmark), and adds Postmark subscription-change webhook support (broader vendor flexibility). One behavior change — a revert of name/email merge-tag substitution — needs validation before we rely on it. Net: lower vendor cost, better data control, and improving reliability, with a community contribution trend that suggests active maintenance.
For engineering: This is a patch release on the 4.0.x line — mostly bug fixes plus one additive feature (Postmark SubscriptionChange webhook). Highlights worth flagging in upgrade notes: (1) revert of #161 means {{email}}, {{first_name}}, {{last_name}} are no longer substituted by that change — audit templates and any tests asserting personalization before bumping from 4.0.0; (2) SMTP failure reporting (#223) and header-case normalization (#213) change delivery-status semantics, so any dashboards/alerts may shift; (3) campaign query performance fix (#204) and 404-instead-of-500 for stale subscription links (#225) are straightforward wins; (4) migration adds explicit IDs to campaign statuses (#217) — run migrations and check any status lookups. Nine first-time contributors landed in this release; CI now runs on fork PRs (#230). Recommended upgrade path: pin, run test suite, spot-check ESP adapters in staging, then roll.
How can I help you explore Laravel packages today?