mailwolt/app/Livewire/Ui/Mail/BounceCard.php

32 lines
1.0 KiB
PHP

<?php
namespace App\Livewire\Ui\Mail;
use Livewire\Component;
class BounceCard extends Component
{
public int $bounces24h = 0;
public array $topCodes = []; // [['code'=>'550', 'count'=>12], ...]
public function mount(): void { $this->load(); }
public function render() { return view('livewire.ui.mail.bounce-card'); }
public function refresh(): void { $this->load(true); }
protected function load(bool $force=false): void
{
// Parse last 2000 lines of mail log for status=bounced / defer / reject
$log = @shell_exec('tail -n 2000 /var/log/mail.log 2>/dev/null') ?? '';
$this->bounces24h = preg_match_all('/status=bounced/i', $log);
$counts = [];
if ($log) {
if (preg_match_all('/\s([45]\d\d)\s/m', $log, $m)) {
foreach ($m[1] as $c) $counts[$c] = ($counts[$c] ?? 0) + 1;
}
}
arsort($counts);
$this->topCodes = collect($counts)->take(5)->map(fn($v,$k)=>['code'=>$k,'count'=>$v])->values()->all();
}
}