designmynight/laravel-log-mailer
Laravel Log Mailer provides a mail transport that writes outgoing emails to your logs instead of sending them, making it easy to inspect messages during local development and testing without configuring SMTP.
composer require vendor/package:^2.1. The 2.1 line is the first release that accepts Laravel 7, so on a Laravel 7 app this is your minimum constraint — ^2.0 will fail resolution with illuminate/support ^7.0.composer show vendor/package should report 2.1.x and a illuminate/support requirement of ^6.0 || ^7.0. If it still shows ^6.0, you have a stale lockfile.^7.2.5, Laravel 6 requires ^7.2, so 2.1.0 quietly rules out anything below 7.2.5 in practice when paired with L7.extra.laravel.providers in the package's composer.json. Read register() for bindings/config merges and boot() for macros, Blade directives, and listeners. That split tells you the whole day-to-day surface.php artisan vendor:publish --provider="Vendor\Package\PackageServiceProvider"), then exercise a single call in php artisan tinker before wiring it into application code.illuminate/support, which usually signals a lightweight, framework-agnostic library: helpers, Macroable extensions on Collection/Str, custom validation rules, or a small manager class. Register its macros from your own AppServiceProvider::boot() rather than calling them ad hoc, so the extension point is discoverable.config/app.php — Laravel 6/7 will not auto-alias it unless the package explicitly declares extra.laravel.aliases. Prefer constructor injection over the facade in your own services so tests can substitute a fake.$this->app->bind()/singleton() in a provider or through published config. That is the intended extension point; avoid editing vendor files.orchestra/testbench ^4.0 for Laravel 6 and ^5.0 for Laravel 7, with a matrix job per framework version. A single shared lockfile defeats the purpose.config/your-package.php and reference package defaults rather than copying the published config verbatim, so composer update doesn't clobber your overrides.^6.0 || ^7.0 will actively block Laravel 8 and will conflict with anything still pinned to illuminate/support ^5.x. Run composer update vendor/package --with-dependencies and read the solver output; the failure message names the offending package, not this one.illuminate/support, the package may not pull in illuminate/console, illuminate/routing, or the full framework. If you call artisan commands or routes it doesn't register, that's on your app's laravel/framework, not the package.composer show vendor/package before debugging anything else.php artisan about or dd(array_keys(app()->getLoadedProviders())) confirms the provider actually loaded. A silently undiscovered provider looks identical to a misconfigured one.register() vs boot() split when extending: config merges and container bindings in register(), macros/Blade/listeners in boot(). Registering macros in register() works by accident and breaks when another provider resolves early.How can I help you explore Laravel packages today?