Files
rspamd-mail-trainer-gitea/README.md
T

152 lines
3.3 KiB
Markdown

# rspamd-mail-trainer
Small defensive admin tool for Linux mail servers. It finds messages in Maildir
or mbox mailboxes by sender, recipient, subject, date or selected text and then
passes the matching messages to `rspamc learn_spam` or `rspamc learn_ham`.
Designed for setups such as Rocky Linux + Postfix/Dovecot + Rspamd.
## Features
- Searches Maildir and mbox mailboxes.
- Tries to discover common mailbox roots automatically, including `doveconf -n`.
- Filters by `From`, `To`, `Subject`, header/body text and date range.
- Trains spam and ham via `rspamc`.
- Asks for confirmation before training.
- Refuses broad runs without any filter.
- Deduplicates matches by SHA-256.
- Extracts single mbox messages to temporary `.eml` files before training.
- Provides `search`, `check`, `train spam` and `train ham` subcommands.
## Install
From the repository root:
```bash
sudo python3 -m pip install .
```
Then:
```bash
rspamd-mail-trainer --help
```
For a local editable install during development:
```bash
python3 -m pip install -e .
```
## Quick start
Discover mailbox roots for the Unix user `johannes`:
```bash
sudo rspamd-mail-trainer roots --user johannes
```
Search suspicious messages from a sender:
```bash
sudo rspamd-mail-trainer search --user johannes --from no-reply@example.test
```
Train matches as spam:
```bash
sudo rspamd-mail-trainer train spam --user johannes --from no-reply@example.test
```
Train matches as ham:
```bash
sudo rspamd-mail-trainer train ham --user johannes --subject "Invoice"
```
Run Rspamd analysis without training:
```bash
sudo rspamd-mail-trainer check --user johannes --from no-reply@example.test
```
## Useful options
Treat filter arguments as literal text instead of regex:
```bash
sudo rspamd-mail-trainer search --user johannes --from no-reply@example.test --literal
```
Search subject:
```bash
sudo rspamd-mail-trainer search --user johannes --subject "Monthly report"
```
Search selected headers and text body:
```bash
sudo rspamd-mail-trainer search --user johannes --any "unsubscribe"
```
Restrict by date:
```bash
sudo rspamd-mail-trainer search --user johannes --from no-reply@example.test --after 2026-06-01 --before 2026-06-13
```
Dry-run training:
```bash
sudo rspamd-mail-trainer train spam --user johannes --from no-reply@example.test --dry-run
```
Skip confirmation for a known-safe batch:
```bash
sudo rspamd-mail-trainer train spam --user johannes --from no-reply@example.test --yes
```
## Push to Gitea
Create a new empty repository in Gitea, then run from this directory:
```bash
git init
git add .
git commit -m "Initial import of rspamd mail trainer"
git branch -M main
git remote add origin ssh://git@gitea.example.local/johannes/rspamd-mail-trainer.git
git push -u origin main
```
Replace the remote URL with your Gitea repository URL.
A Gitea Actions workflow is included at `.gitea/workflows/ci.yml`.
## Development
Run tests without external dependencies:
```bash
python3 -m unittest discover -s tests
```
Build a Python package:
```bash
python3 -m pip install build
python3 -m build
```
## Safety notes
This tool reads local mailboxes and can train your Rspamd classifier. Start with
`search`, `check` or `--dry-run`. Avoid broad patterns unless you inspected the
matches. Train good messages as ham from time to time, not only spam.
## License
MIT