From e1e99cbd9e18591b1c566d2a9f74ec1c8d7d3a3c Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 23 Aug 2023 14:36:55 +1000 Subject: [PATCH] Working on email history for PostMark --- app/Jobs/PostMark/ProcessPostmarkWebhook.php | 57 +++++++++++++------- app/Services/Client/EmailHistory.php | 3 +- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/app/Jobs/PostMark/ProcessPostmarkWebhook.php b/app/Jobs/PostMark/ProcessPostmarkWebhook.php index 1a04673afc40..18dde45e430c 100644 --- a/app/Jobs/PostMark/ProcessPostmarkWebhook.php +++ b/app/Jobs/PostMark/ProcessPostmarkWebhook.php @@ -38,15 +38,15 @@ class ProcessPostmarkWebhook implements ShouldQueue public $invitation; - private array $default_response = [ - 'subject' => 'Message not found.', - 'status' => '', - 'recipient' => '', - 'type' => '', - 'delivery_message' => '', - 'server' => '', - 'server_ip' => '', - ]; + private $entity; + + private array $default_response = [ + 'recipients' => '', + 'subject' => 'Message not found.', + 'entity' => '', + 'entity_id' => '', + 'events' => [], + ]; /** * Create a new job instance. @@ -275,14 +275,19 @@ class ProcessPostmarkWebhook implements ShouldQueue $invitation = false; if ($invitation = InvoiceInvitation::where('message_id', $message_id)->first()) { + $this->entity = 'invoice'; return $invitation; } elseif ($invitation = QuoteInvitation::where('message_id', $message_id)->first()) { + $this->entity = 'quote'; return $invitation; } elseif ($invitation = RecurringInvoiceInvitation::where('message_id', $message_id)->first()) { + $this->entity = 'recurring_invoice'; return $invitation; } elseif ($invitation = CreditInvitation::where('message_id', $message_id)->first()) { + $this->entity = 'credit'; return $invitation; } elseif ($invitation = PurchaseOrderInvitation::where('message_id', $message_id)->first()) { + $this->entity = 'purchase_order'; return $invitation; } else { return $invitation; @@ -297,19 +302,33 @@ class ProcessPostmarkWebhook implements ShouldQueue try { - $postmark = new PostmarkClient(config('services.postmark.secret')); + $postmark = new PostmarkClient(config('services.postmark.token')); $messageDetail = $postmark->getOutboundMessageDetails($this->request['MessageID']); - + + $recipients = collect($messageDetail['recipients'])->flatten()->implode(','); + $subject = $messageDetail->subject ?? ''; + + $events = collect($messageDetail->messageevents)->map(function ($event) { + + return [ + 'recipient' => $event->Recipient ?? '', + 'status' => $event->Type ?? '', + 'delivery_message' => $event->Details->DeliveryMessage ?? $event->Details->Summary ?? '', + 'server' => $event->Details->DestinationServer ?? '', + 'server_ip' => $event->Details->DestinationIP ?? '', + 'date' => \Carbon\Carbon::parse($event->ReceivedAt)->format('Y-m-d H:m:s') ?? '', + ]; + + })->toArray(); + return [ - 'subject' => $messageDetail->subject ?? '', - 'status' => $messageDetail->status ?? '', - 'recipient' => $messageDetail->messageevents[0]['Recipient'] ?? '', - 'type' => $messageDetail->messageevents[0]->Type ?? '', - 'subject' => $messageDetail->messageevents[0]->Details->DeliveryMessage ?? '', - 'server' => $messageDetail->messageevents[0]->Details->DestinationServer ?? '', - 'server_ip' => $messageDetail->messageevents[0]->Details->DestinationIP ?? '', + 'recipients' => $recipients, + 'subject' => $subject, + 'entity' => $this->entity ?? '', + 'entity_id' => $this->invitation->{$this->entity}->hashed_id ?? '', + 'events' => $events, ]; - + } catch (\Exception $e) { diff --git a/app/Services/Client/EmailHistory.php b/app/Services/Client/EmailHistory.php index b279c6c5f2c6..f0715c49b3e3 100644 --- a/app/Services/Client/EmailHistory.php +++ b/app/Services/Client/EmailHistory.php @@ -16,6 +16,7 @@ use App\Models\SystemLog; use Postmark\PostmarkClient; use App\Services\AbstractService; +/** @deprecated */ class EmailHistory extends AbstractService { private string $postmark_token; @@ -27,7 +28,7 @@ class EmailHistory extends AbstractService 'status' => '', 'recipient' => '', 'type' => '', - 'subject' => '', + 'delivery_message' => '', 'server' => '', 'server_ip' => '', ];