resend/resend-laravel
Provides Resend integration for Laravel and Symfony Mailer, including a Resend facade and a ready-to-use Laravel mail transport. Install via Composer, set RESEND_API_KEY, and send emails through Resend with minimal configuration.
Architecture fit
Resend facade for direct API calls and a native Laravel mail transport ('transport' => 'resend') that plugs into the existing Mail/Mailable abstraction. This is the lowest-friction shape possible for a Laravel codebase — the transport path requires only config/mail.php plus one env var, not application code changes.resend/resend-php. Feature surface (attachments, inline attachments, tags, idempotency keys, custom headers, webhook events) tracks the upstream SDK, so capability gains arrive via dependency bumps rather than package-specific work. That is good for maintenance but means the Laravel package adds little beyond ergonomics and mailer wiring — assess the upstream SDK and the Resend API contract as the real dependency.VerifyWebhookSignature middleware, a webhook controller, and typed event support (email.*, contact.*, domain.*, plus contact.topics.*/topic.* from v1.6.0). This matters — deliverability operations (bounces, complaints, suppressions) are webhook-driven, so an integration without signed webhooks would force us to build that plumbing ourselves.Integration feasibility
resend-php v1) is a meaningful stabilization signal versus the 0.x churn.Technical risk
resend-php constraint bump or a Laravel-version compatibility fix (0.16.1 fixed Laravel 12; 1.3.1 added Laravel 13). This is a package that moves in lockstep with two upstreams. Budget for periodic, low-effort-but-nonzero upgrade work, and pin both packages.0.16.0, ResendTransportFactory missing-error handling in 0.23.0, content-ID parameter rename in 0.21.0). The trajectory is healthy, but transport-layer error surfacing is exactly what determines whether failures are visible or silent. Verify current exception behavior (TransportException) under API errors, timeouts, and rate limits.Key questions
X-Resend-Email-ID returned on SentMessage?Stack fit
Mail facade and Mailables. Near-zero fit risk for teams already on the Mail abstraction; higher touch for code that bypasses Mailables and talks to a provider SDK or raw SMTP directly (custom headers, per-message provider options, bounce parsing).Migration path
RESEND_API_KEY — keep the existing mailer configuration intact and switchable.VerifyWebhookSignature in a staging route, and prove signature rejection works with a deliberately bad secret.X-Resend-Email-ID, log transport exceptions, and add a dashboard or alert keyed on send-failure rate.Compatibility
resend/resend-laravel and resend/resend-php together; treat them as a single versioned unit. A composer.lock change here should always be a deliberate, reviewed change, not an incidental composer update side effect.Sequencing
Maintenance
Support
Scaling
1.3.0) is the lever for duplicate-send prevention on retried jobs — adopt it deliberately for critical flows rather than retrofitting after an incident.Failure modes
email.suppressed and related events, we keep sending to dead or hostile addresses and degrade shared reputation. Mitigation: reconcile suppression state into our own store, not just Resend's.composer update pulls a new resend-php constraint and changes behavior. Mitigation: paired pinning and a CI job that exercises a test send on dependency changes.Ramp-up
How can I help you explore Laravel packages today?