(string) Str::uuid(), 'subject' => (string) $event->message->getSubject(), 'from' => self::formatAddresses($event->message->getFrom()), 'to' => self::formatAddresses($event->message->getTo()), 'cc' => self::formatAddresses($event->message->getCc()), 'bcc' => self::formatAddresses($event->message->getBcc()), 'html' => method_exists($event->message, 'getHtmlBody') ? $event->message->getHtmlBody() : null, 'text' => method_exists($event->message, 'getTextBody') ? $event->message->getTextBody() : null, 'sent_at' => now()->toIso8601String(), 'headers' => method_exists($event->message, 'getHeaders') && method_exists($event->message->getHeaders(), 'toString') ? $event->message->getHeaders()->toString() : null, ]; self::write($messages); } public static function all(): array { return self::read(); } public static function flush(): void { self::write([]); } private static function read(): array { $disk = Storage::disk('local'); if (! $disk->exists(self::STORAGE_PATH)) { return []; } $decoded = json_decode($disk->get(self::STORAGE_PATH), true); return is_array($decoded) ? $decoded : []; } private static function write(array $messages): void { $disk = Storage::disk('local'); $disk->put(self::STORAGE_PATH, json_encode($messages, JSON_PRETTY_PRINT)); } /** * @param Address[]|array|null $addresses */ private static function formatAddresses(?array $addresses): array { return Collection::make($addresses) ->filter() ->map(function ($address) { if ($address instanceof Address) { return [ 'name' => $address->getName() ?: null, 'email' => $address->getAddress(), ]; } return [ 'name' => null, 'email' => (string) $address, ]; }) ->values() ->all(); } }