Files
mail-status/README.md
2026-03-27 22:10:29 +01:00

201 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Mail Stats - Postfix Summary Tool (v2026.1.1)
![License](https://img.shields.io/badge/license-MIT-green)
![Bash](https://img.shields.io/badge/Bash-4.x+-blue)
![Postfix](https://img.shields.io/badge/Postfix-Logs-lightgrey)
---
## 📋 Table of Contents
1. [Overview](#overview)
2. [Features](#features)
3. [Requirements](#requirements)
4. [Installation](#installation)
5. [Usage](#usage)
6. [Options](#options)
7. [Examples](#examples)
8. [Security & Hardening](#security--hardening)
9. [Notes](#notes)
10. [License](#license)
11. [Author](#author)
---
## 🌟 Overview
**Mail Stats** is a secure, hardened, memory-safe Bash tool for summarizing **Postfix** mail logs. It provides:
* Filtering by sender, recipient, queue ID, and date
* Concise summary tables or detailed per-message views
* Automatic processing of compressed logs (`.gz`)
* Color-coded terminal output for easier readability
This tool is ideal for server administrators who need fast insights into sent, rejected, or deferred emails.
![Postfix Mail Summary](https://via.placeholder.com/900x200.png?text=Mail+Stats+Overview)
---
## ✨ Features
* **Color-coded output** for quick status recognition
* Filter by:
* Sender (`from`)
* Recipient (`to`)
* Queue ID (`id`)
* Date (`date`)
* Use `-d ""` to search across all logs
* Summary or detailed per-message view
* Handles `.gz` compressed logs automatically
* Excludes local deliveries (`127.0.0.1`) unless filtered
* Limits CPU, memory, and file usage for safety
---
## 🖥 Requirements
* Linux/Unix system
* Bash 4.x+
* Postfix logs in `/var/log/` (e.g., `maillog*`, `mail.log*`)
* `awk`, `zcat`, `grep`, `find`, `sed` installed
---
## ⚡ Installation
Copy or clone the script:
```bash
sudo cp mail-stats /usr/local/bin/mail-stats
sudo chmod +x /usr/local/bin/mail-stats
```
No additional dependencies required.
---
## 🛠 Usage
```bash
mail-stats [OPTIONS]
```
By default, it displays the **last 10 mail log entries** for today.
---
## 🔧 Options
| Option | Description |
| ------------------------- | ---------------------------------------- |
| `-h, --help` | Show help message |
| `-l, --list NUMBER` | Number of records (default 10, max 1000) |
| `-f, --from EMAIL/DOMAIN` | Filter by sender |
| `-t, --to EMAIL/DOMAIN` | Filter by recipient |
| `-i, --id QUEUE_ID` | Show detailed view of specific queue ID |
| `-d, --date "MMM DD"` | Filter by date (e.g., `"Mar 27"`) |
---
## 📝 Examples
Show last 20 emails:
```bash
mail-stats -l 20
```
Filter by sender:
```bash
mail-stats -f "example@domain.com"
```
Filter by recipient:
```bash
mail-stats -t "recipient@domain.com"
```
Detailed view for Queue ID:
```bash
mail-stats -i 3F2A4B1C0
```
Filter by date:
```bash
mail-stats -d "Mar 27"
```
Search all logs:
```bash
mail-stats -d ""
```
---
## 🛡 Security & Hardening
1. **Resource Limits**
```bash
ulimit -t 15 # CPU time
ulimit -v 500000 # Virtual memory (kB)
ulimit -f 102400 # Max file size
```
2. **Single Instance Locking**
* Prevents simultaneous executions via `/tmp/mail-stats.lock`
3. **Temporary File Safety**
* Uses `mktemp` and cleans files on exit
4. **Safe Argument Handling**
* Limits input length and validates required arguments
5. **Memory-Safe Log Parsing**
* Skips overly long/short lines
6. **Old Temp File Cleanup**
* Deletes stale files older than 10 minutes
---
## ⚠ Notes
* Ignores local Postfix deliveries (`127.0.0.1`) by default
* Supports `.gz` compressed logs
* Detailed view (`--id`) shows:
* Date/Time
* Client IP
* Sender
* Recipient
* Status
* Reason
![Detail View](https://via.placeholder.com/900x200.png?text=Detailed+Mail+View)
---
## 📜 License
MIT License free to use, modify, and distribute
---
## 👤 Author
**robott** [GitHub](https://git.robott.sk/robott)