Completed webhook management from Mailgunb

This commit is contained in:
David Bomba 2024-01-16 17:02:50 +11:00
parent 809dc58a87
commit a86df7b374

View File

@ -116,11 +116,11 @@ class ProcessMailgunWebhook implements ShouldQueue
switch ($this->request['event-data']['event']) { switch ($this->request['event-data']['event']) {
case 'delivered': case 'delivered':
return $this->processDelivery(); return $this->processDelivery();
case 'Bounce': case 'failed':
return $this->processBounce(); return $this->processBounce();
case 'complained': case 'complained':
return $this->processSpamComplaint(); return $this->processSpamComplaint();
case 'Open': case 'opened':
return $this->processOpen(); return $this->processOpen();
default: default:
# code... # code...
@ -177,14 +177,28 @@ class ProcessMailgunWebhook implements ShouldQueue
$this->invitation->opened_date = now(); $this->invitation->opened_date = now();
$this->invitation->save(); $this->invitation->save();
SystemLogger::dispatch( $sl = $this->getSystemLog($this->request['MessageID']);
$this->request,
SystemLog::CATEGORY_MAIL, /** Prevents Gmail tracking from firing inappropriately */
SystemLog::EVENT_MAIL_OPENED, if($this->request['signature']['timestamp'] < $sl->log['signature']['timestamp'] + 3)
SystemLog::TYPE_WEBHOOK_RESPONSE, return;
$this->invitation->contact->client,
$this->invitation->company $event = [
); 'bounce_id' => '',
'recipient' => $this->request['event-data']['recipient'] ?? '',
'status' => $this->request['event-data']['event'] ?? '',
'delivery_message' => collect($this->request['event-data']['client-info'])->implode(" ") ?? '',
'server' => collect($this->request['event-data']['geolocation'])->implode(" - ") ?? '',
'server_ip' => $this->request['event-data']['ip'] ?? '',
'date' => \Carbon\Carbon::parse($this->request['event-data']['timestamp'])->format('Y-m-d H:i:s') ?? '',
];
if($sl) {
$data = $sl->log;
$data['history']['events'][] = $event;
$this->updateSystemLog($sl, $data);
}
} }
/* /*
@ -344,13 +358,29 @@ class ProcessMailgunWebhook implements ShouldQueue
$bounce = new EmailBounce( $bounce = new EmailBounce(
$this->request['event-data']['tags'][0], $this->request['event-data']['tags'][0],
$this->request['From'], $this->request['event-data']['envelope']['sender'],
$this->request['MessageID'] $this->message_id
); );
LightLogs::create($bounce)->queue(); LightLogs::create($bounce)->queue();
SystemLogger::dispatch($this->request, SystemLog::CATEGORY_MAIL, SystemLog::EVENT_MAIL_BOUNCED, SystemLog::TYPE_WEBHOOK_RESPONSE, $this->invitation->contact->client, $this->invitation->company); $sl = $this->getSystemLog($this->message_id);
$event = [
'bounce_id' => $this->request['event-data']['id'],
'recipient' => $this->request['event-data']['recipient'] ?? '',
'status' => $this->request['event-data']['event'] ?? '',
'delivery_message' => $this->request['event-data']['delivery-status']['description'] ?? $this->request['event-data']['delivery-status']['message'] ?? '',
'server' => $this->request['event-data']['delivery-status']['mx-host'] ?? '',
'server_ip' => $this->request['event-data']['envelope']['sending-ip'] ?? '',
'date' => \Carbon\Carbon::parse($this->request['event-data']['timestamp'])->format('Y-m-d H:i:s') ?? '',
];
if($sl) {
$data = $sl->log;
$data['history']['events'][] = $event;
$this->updateSystemLog($sl, $data);
}
} }
@ -402,17 +432,30 @@ class ProcessMailgunWebhook implements ShouldQueue
$spam = new EmailSpam( $spam = new EmailSpam(
$this->request['event-data']['tags'][0], $this->request['event-data']['tags'][0],
$this->request['From'], $this->request['event-data']['message']['headers']['from'],
$this->request['MessageID'] $this->message_id
); );
LightLogs::create($spam)->queue(); LightLogs::create($spam)->queue();
SystemLogger::dispatch($this->request, SystemLog::CATEGORY_MAIL, SystemLog::EVENT_MAIL_SPAM_COMPLAINT, SystemLog::TYPE_WEBHOOK_RESPONSE, $this->invitation->contact->client, $this->invitation->company); $sl = $this->getSystemLog($this->message_id);
if (config('ninja.notification.slack')) { $event = [
$this->invitation->company->notification(new EmailSpamNotification($this->invitation->company->account))->ninja(); 'bounce_id' => '',
'recipient' => $this->request['event-data']['recipient'] ?? '',
'status' => $this->request['event-data']['event'] ?? '',
'delivery_message' => 'Spam Complaint',
'server' => '',
'server_ip' => $this->request['event-data']['envelope']['sending-ip'] ?? '',
'date' => \Carbon\Carbon::parse($this->request['event-data']['timestamp'])->format('Y-m-d H:i:s') ?? '',
];
if($sl) {
$data = $sl->log;
$data['history']['events'][] = $event;
$this->updateSystemLog($sl, $data);
} }
} }
private function discoverInvitation($message_id) private function discoverInvitation($message_id)
@ -470,7 +513,7 @@ class ProcessMailgunWebhook implements ShouldQueue
$recipients = $this->request['event-data']['recipient'] ?? ''; $recipients = $this->request['event-data']['recipient'] ?? '';
return [ return [
'bounce_id' => $this->request['event-data']['id'] ?? '', 'bounce_id' => '',
'recipient' => $recipients, 'recipient' => $recipients,
'status' => $this->request['event-data']['event'] ?? '', 'status' => $this->request['event-data']['event'] ?? '',
'delivery_message' => $this->request['event-details']['delivery-status']['description'] ?? $this->request['event-details']['delivery-status']['message'] ?? '', 'delivery_message' => $this->request['event-details']['delivery-status']['description'] ?? $this->request['event-details']['delivery-status']['message'] ?? '',