From 8594dbe3e903a0091309519529da23a700f4ec0c Mon Sep 17 00:00:00 2001 From: Manoj Hortulanus Date: Thu, 23 Jan 2025 13:30:45 +0100 Subject: [PATCH] wip --- ...dd_unsuppressed_at_to_mail_events.php.stub | 14 ++---- src/Actions/LogMail.php | 46 ++++++------------- src/Listeners/LogSendingMail.php | 10 +--- src/Listeners/LogSentMail.php | 10 +--- src/Models/Mail.php | 2 +- 5 files changed, 22 insertions(+), 60 deletions(-) diff --git a/database/migrations/3_add_unsuppressed_at_to_mail_events.php.stub b/database/migrations/3_add_unsuppressed_at_to_mail_events.php.stub index 80659a7..f15fcb3 100644 --- a/database/migrations/3_add_unsuppressed_at_to_mail_events.php.stub +++ b/database/migrations/3_add_unsuppressed_at_to_mail_events.php.stub @@ -20,16 +20,12 @@ return new class extends Migration }); Schema::table('mails', function (Blueprint $table): void { - if (!Schema::hasColumn('mails', 'driver')) { - $table->string('driver') - ->after('uuid'); - } + $table->string('provider') + ->after('uuid'); - if (!Schema::hasColumn('mails', 'stream_id')) { - $table->string('stream_id') - ->nullable() - ->after('driver'); - } + $table->string('stream_id') + ->nullable() + ->after('provider'); }); } }; diff --git a/src/Actions/LogMail.php b/src/Actions/LogMail.php index 1ecff65..7c4d4be 100644 --- a/src/Actions/LogMail.php +++ b/src/Actions/LogMail.php @@ -2,7 +2,6 @@ namespace Vormkracht10\Mails\Actions; -use Illuminate\Contracts\Mail\Mailer; use Illuminate\Mail\Events\MessageSending; use Illuminate\Mail\Events\MessageSent; use Illuminate\Support\Collection; @@ -14,7 +13,7 @@ class LogMail { use AsAction; - public function handle(MessageSending|MessageSent $event, $mailer): mixed + public function handle(MessageSending|MessageSent $event): mixed { if (! config('mails.logging.enabled')) { return null; @@ -23,7 +22,7 @@ public function handle(MessageSending|MessageSent $event, $mailer): mixed $mail = $this->newMailModelInstance(); if ($event instanceof MessageSending) { - $mail->fill($this->getOnlyConfiguredAttributes($event, $mailer)); + $mail->fill($this->getOnlyConfiguredAttributes($event)); $mail->save(); $this->collectAttachments($mail, $event->message->getAttachments()); @@ -32,7 +31,7 @@ public function handle(MessageSending|MessageSent $event, $mailer): mixed if ($event instanceof MessageSent) { $mail = $mail->firstWhere('uuid', $this->getCustomUuid($event)); - $mail->update($this->getOnlyConfiguredAttributes($event, $mailer)); + $mail->update($this->getOnlyConfiguredAttributes($event)); } return null; @@ -48,11 +47,11 @@ public function newMailModelInstance() return new $model; } - public function getOnlyConfiguredAttributes(MessageSending|MessageSent $event, Mailer $mailer): array + public function getOnlyConfiguredAttributes(MessageSending|MessageSent $event): array { return collect($this->getDefaultLogAttributes($event)) ->only($this->getConfiguredAttributes()) - ->merge($this->getMandatoryAttributes($event, $mailer)) + ->merge($this->getMandatoryAttributes($event)) ->toArray(); } @@ -75,44 +74,27 @@ public function getDefaultLogAttributes(MessageSending|MessageSent $event): arra ]; } - protected function getMailerName(Mailer $mailer) + protected function getStreamId(MessageSending|MessageSent $event) { - $class = $mailer; - - $reflection = new \ReflectionClass($class); - $property = $reflection->getProperty('name'); - $property->setAccessible(true); - - $name = $property->getValue($class); - - return $name; - } - - protected function getStreamId(MessageSending|MessageSent $event, string $driver) - { - if ($driver !== 'postmark') { - return null; + if ($event->data['mailer'] === 'postmark') { + return config('mail.mailers.postmark.message_stream_id'); } - if (! $event->message->getHeaders()->has('x-pm-metadata-x-mails-uuid')) { - return null; + if (null !== $messageStream = $event->message->getHeaders()->get('x-pm-message-stream')) { + return $messageStream; } - $headerValue = $event->message->getHeaders()->get('x-pm-metadata-x-mails-uuid'); - - return $headerValue->getValue(); + return null; } - public function getMandatoryAttributes(MessageSending|MessageSent $event, Mailer $mailer): array + public function getMandatoryAttributes(MessageSending|MessageSent $event): array { - $driver = $this->getMailerName($mailer); - return [ 'uuid' => $this->getCustomUuid($event), // 'mail_class' => $this->getMailClassHeaderValue($event), 'sent_at' => $event instanceof MessageSent ? now() : null, - 'driver' => $driver, - 'stream_id' => $this->getStreamId($event, $this->getMailerName($mailer)), + 'mailer' => $event->data['mailer'], + 'stream_id' => $this->getStreamId($event), ]; } diff --git a/src/Listeners/LogSendingMail.php b/src/Listeners/LogSendingMail.php index 6101044..fe5f4e5 100644 --- a/src/Listeners/LogSendingMail.php +++ b/src/Listeners/LogSendingMail.php @@ -2,21 +2,13 @@ namespace Vormkracht10\Mails\Listeners; -use Illuminate\Contracts\Mail\Mailer; use Illuminate\Mail\Events\MessageSending; use Vormkracht10\Mails\Actions\LogMail; class LogSendingMail { - protected Mailer $mailer; - - public function __construct(Mailer $mailer) - { - $this->mailer = $mailer; - } - public function handle(MessageSending $event): void { - (new LogMail)($event, $this->mailer); + (new LogMail)($event); } } diff --git a/src/Listeners/LogSentMail.php b/src/Listeners/LogSentMail.php index 2feb747..21747f6 100644 --- a/src/Listeners/LogSentMail.php +++ b/src/Listeners/LogSentMail.php @@ -2,21 +2,13 @@ namespace Vormkracht10\Mails\Listeners; -use Illuminate\Contracts\Mail\Mailer; use Illuminate\Mail\Events\MessageSent; use Vormkracht10\Mails\Actions\LogMail; class LogSentMail { - protected Mailer $mailer; - - public function __construct(Mailer $mailer) - { - $this->mailer = $mailer; - } - public function handle(MessageSent $event): void { - (new LogMail)($event, $this->mailer); + (new LogMail)($event); } } diff --git a/src/Models/Mail.php b/src/Models/Mail.php index cad38af..342c839 100644 --- a/src/Models/Mail.php +++ b/src/Models/Mail.php @@ -51,7 +51,7 @@ class Mail extends Model protected $fillable = [ 'uuid', - 'driver', + 'provider', 'stream_id', 'mail_class', 'subject',