where('is_active', true); if ($email = $this->option('user')) { $query->where('email', $email); } $users = $query->get(); foreach ($users as $u) { $email = $u->email; $domain = explode('@', $email)[1]; $local = explode('@', $email)[0]; $path = "/var/mail/vhosts/{$domain}/{$local}"; $usedBytes = 0; $messageCount = 0; if (is_dir($path)) { $usedBytes = (int) trim(shell_exec('du -sb '.escapeshellarg($path).' 2>/dev/null | cut -f1')); } $out = trim(shell_exec('doveadm mailbox status -u '.escapeshellarg($email).' messages INBOX 2>/dev/null')); if (preg_match('/messages=(\d+)/', $out, $m)) { $messageCount = (int) $m[1]; } $u->update([ 'used_bytes' => $usedBytes, 'message_count' => $messageCount, 'stats_refreshed_at' => now(), ]); $this->info(sprintf("%-35s %6.1f MiB %4d Nachrichten", $email, $usedBytes / 1024 / 1024, $messageCount)); } return Command::SUCCESS; } }