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

Laravel Dkim Laravel Package

simonschaufi/laravel-dkim

Add DKIM signing to outgoing Laravel mail with this simple package. Configure your domain, selector, and private key, and it automatically signs emails through Laravel’s mailer to improve authentication and deliverability.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

simonschaufi/laravel-dkim is a single-purpose Laravel package that signs outgoing mail with DKIM by hooking into the framework's mail-sending event pipeline and delegating the cryptographic work to the underlying Symfony Mailer DKIM signer. v3.6.0 is a compatibility-only release: two PRs adding Laravel 13.x support, no new features, no deprecations, no documented breaking changes. The minor version bump (3.5.0 → 3.6.0) is consistent with semver for "added platform support."

Architecture fit

  • Low-footprint, config-driven package: a service provider, a published config file (domain, selector, private key path), and an event listener. No database, no queue worker, no external service, no new infrastructure.
  • Signing happens in-process at message dispatch, which means it fits any Laravel app already using the framework mailer — including apps that send via SES, Postmark, or SMTP relays.
  • It does not replace transport-level DKIM (e.g. SES Easy DKIM, MTA signing). Teams must consciously choose app-layer signing, transport-layer signing, or both, and understand which signature validators will see. Double-signing with mismatched selectors is a common misconfiguration.

Integration feasibility

  • Adoption is a Composer require plus vendor:publish plus three config values. Realistic effort for a competent Laravel developer: a few hours including DNS record publication and propagation wait.
  • Principal integration work is not code — it is DNS (TXT record at selector._domainkey.domain), secret storage for the private key, and alignment between the From: header domain and the signing domain (DMARC alignment).
  • Key rotation is a process to design up front: overlapping selectors, staged DNS publication, then cutover. The package does not manage this for you.

Technical risk

  • Overall: low-to-moderate. Small, well-bounded surface area; failure is contained to mail delivery, not core application paths.
  • Maintenance concentration is the main structural risk: a single-maintainer package in the critical path of outbound email. Bus factor and response latency on Laravel major releases matter more than code quality.
  • Dependency risk sits with the upstream Symfony Mailer DKIM signer, which has historically been treated as less-than-fully-public API. Upstream signature or behavior changes could surface as silent verification failures rather than exceptions.
  • Release hygiene signal: two PRs with identical titles landed for the same compatibility work. This reads as automated/duplicate tooling rather than deep review. Not disqualifying, but the Laravel 13 support should be independently verified rather than assumed from the changelog.
  • Secret handling: the private key is read from disk or env. A misconfigured path can fail at send time, potentially affecting all outbound mail.

Key questions

  1. Did the Laravel 13 compatibility PRs narrow the supported version matrix in composer.json, or only widen it? Does v3.6.0 still support the Laravel version we run today?
  2. Which mailer are we on — Symfony Mailer (Laravel 9+) — and does v3.6.0's supported dependency range match our locked Symfony Mailer version?
  3. Do we send from multiple domains or per-tenant domains? If so, does the package support runtime selector/domain switching, or is it one global config?
  4. Are we already DKIM-signing at the transport layer (SES/Postmark/MTA)? If yes, what is the rationale for app-layer signing, and will both signatures align with DMARC?
  5. Who owns the private key, where is it stored, and what is the rotation runbook?
  6. What is the maintainer's release cadence and historical latency for new Laravel majors? Is there a credible fork/vendor-patch fallback?

Integration Approach

Stack fit

  • Fits cleanly into a standard Laravel application using the framework mailer. No conflict with queues, notifications, or Mailable classes — signing attaches to the send event, so existing mail code is untouched.
  • Does not fit well where outbound mail is centralized in a relay or gateway that already signs, or where the app has no filesystem access to key material (e.g. some serverless/container setups without secret mounting).

Migration path

  • From unsigned mail: additive. Publish config, mount key, publish DNS, enable. Rollback is disabling the listener.
  • From transport-layer DKIM: do not rip out the existing signature first. Add app-layer signing alongside, verify both signatures pass, then decide which to retire. Removing transport signing first creates a deliverability gap.
  • From a custom signing implementation: run both in a staging environment and compare Authentication-Results headers before switching.
  • Version bump path: 3.5.0 → 3.6.0 is a minor update with no stated breaking changes; treat as low-risk, but pin and test.

Compatibility

  • Verify the composer.json constraint range rather than relying on changelog prose. Confirm coexistence with our locked symfony/mailer and PHP version.
  • If we are not yet on Laravel 13, v3.6.0 delivers no functional benefit; there is no forcing function to upgrade immediately. Schedule it with the Laravel 13 upgrade, not before.

Sequencing

  1. Confirm current Laravel/PHP/Symfony Mailer versions and the package's declared support range.
  2. Generate key pair (2048-bit RSA minimum; 4096 if volume allows), store private key in the secret manager.
  3. Publish selector DNS TXT record; verify with an external DKIM checker before enabling signing.
  4. Deploy in staging; send to seed addresses across major providers (Gmail, Outlook, Yahoo) and inspect Authentication-Results for dkim=pass and DMARC alignment.
  5. Enable in production behind a config flag; monitor deliverability and bounce/complaint rates for two weeks.
  6. Document key rotation, then schedule the v3.6.0 upgrade alongside the Laravel 13 migration.

Operational Impact

Maintenance

  • Low steady-state effort: no schema, no background jobs, no data to reconcile. Config and key material are the only moving parts.
  • Recurring work is (a) key rotation on a defined cadence (annual is typical), (b) dependency bumps on Laravel/Symfony majors, (c) DNS hygiene.
  • Principal maintenance risk is upstream abandonment. Mitigation: keep the package behind a thin internal abstraction (or at minimum a documented fork point) so a two-file patch can replace it if needed.

Support

  • Community-supported, single-maintainer project. No vendor SLA. Internal ownership must be explicit — assign the mail-delivery domain to a named team.
  • Issue triage for deliverability problems is slow because symptoms are indirect (mail lands in spam) and diagnosis requires reading raw headers from recipient side.

Scaling

  • Runtime cost is one RSA signature per message — negligible relative to network I/O at typical volumes (tens of thousands/day). At very high volume, prefer 2048-bit keys and confirm no per-message key re-read from disk (cache the key in memory if the package re-reads per send).
  • Horizontal scaling is trivial for stateless app nodes, but key distribution must be solved: every container needs the key mounted, and a rotation must roll out to all nodes before the old selector's DNS record is removed.
  • No shared state, no locking, no contention — this is the package's strongest operational property.

Failure modes

  • Missing/unreadable private key: send-time failure. Depending on implementation this either throws (blocking mail) or silently skips signing (mail delivers unsigned, DMARC may quarantine). Test both paths explicitly; prefer loud failure in staging, and monitor for a spike in unsigned mail after any deploy.
  • Wrong selector or stale DNS: dkim=fail at receivers, degrading deliverability with no application error. Requires external monitoring.
  • Domain misalignment: signature valid but not DMARC-aligned — effectively no benefit.
  • Key compromise: requires immediate rotation; a leaked key lets third parties sign as your domain.
  • Upstream Symfony change: silent verification failure after a routine dependency bump. Guard with a post-deploy smoke test that asserts dkim=pass.
  • Detection gap: none of these surface in application logs by default. Budget for synthetic mail monitoring to seed inboxes.

Ramp-up

  • A Laravel developer can integrate in under a day; the DNS and deliverability verification is the long pole (allow 24-72 hours for propagation and provider caching).
  • Organizational ramp-up is larger than the technical ramp-up: someone must own the key, the rotation calendar, and the deliverability monitoring. Assign that before adoption, not after.
  • Recommended first step is a time-boxed spike in staging that proves dkim=pass end-to-end at Gmail and Outlook, which de-risks the entire decision in about a day of effort.
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.
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle