From 40888bf1970ce6b87fe9ca2378744220147aaac1 Mon Sep 17 00:00:00 2001 From: Konstantinos Arvanitakis Date: Tue, 29 Sep 2026 01:09:57 +0300 Subject: [PATCH] Chore: Adding override for email from --- src/Providers/StoreServiceProvider.php | 33 ++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/Providers/StoreServiceProvider.php b/src/Providers/StoreServiceProvider.php index af603af..4b0c1fe 100644 --- a/src/Providers/StoreServiceProvider.php +++ b/src/Providers/StoreServiceProvider.php @@ -2,15 +2,48 @@ namespace Modules\Core\Providers; +use Illuminate\Mail\Events\MessageSending; use Illuminate\Support\Facades\Event; use Illuminate\Support\ServiceProvider; use Modules\Core\Store\Events\StoreDetailsUpdated; use Modules\Core\Store\Listeners\FlushStoreDetailsCache; +use Modules\Core\Store\Services\StoreDetailsService; +use Symfony\Component\Mime\Address; class StoreServiceProvider extends ServiceProvider { public function boot(): void { Event::listen(StoreDetailsUpdated::class, FlushStoreDetailsCache::class); + Event::listen(MessageSending::class, [$this, 'applyMailFromName']); + } + + /** + * Renames the From header's display name to the store's own Store + * Details setting, when filled in — leaves the address itself alone + * (a deliverability/domain-authentication concern, not something a + * merchant should freely edit via a text field) and leaves an + * EXPLICIT sender alone too: anything whose From address isn't + * config('mail.from.address') deliberately chose a different sender + * (e.g. a mailable/notification that calls ->from() itself), which + * this provider has no business second-guessing. + * StoreDetailsService::current() is forever-cached (see its own + * docblock), so this costs nothing extra per send. + */ + public function applyMailFromName(MessageSending $event): void + { + $name = app(StoreDetailsService::class)->current()->mail_from_name; + + if (blank($name)) { + return; + } + + $from = $event->message->getFrom()[0] ?? null; + + if ($from === null || $from->getAddress() !== config('mail.from.address')) { + return; + } + + $event->message->from(new Address($from->getAddress(), $name)); } }