Scan your mailbox, find every service that knows you, and decimate your digital footprint with GDPR Art. 17 erasure requests.
Project description
██╗ ███████╗ ████████╗ ██╗ ██╗ ███████╗
██║ ██╔════╝ ╚══██╔══╝ ██║ ██║ ██╔════╝
██║ █████╗ ██║ ███████║ █████╗
██║ ██╔══╝ ██║ ██╔══██║ ██╔══╝
███████╗ ███████╗ ██║ ██║ ██║ ███████╗
╚══════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝
[ mailbox recon // GDPR art. 17 strike kit // response tracking ]
Every service that ever mailed you knows who you are. LETHE finds them all — and makes them forget.
What it does
Your mailbox is a map of your digital footprint: every "Welcome!", every "Confirm your account", every newsletter is a company holding your data. LETHE reads that map and burns it, in five moves:
| phase | command | what happens |
|---|---|---|
| 🔍 recon | fpd scan |
reads every mailbox in your Betterbird / Thunderbird profile, catalogs every sender domain + address, detects registration signals, cross-references JustDeleteMe |
| ⚖️ triage | fpd review |
interactive: per domain you decide — DELETE (send erasure request), KEEP, or MANUAL. Excel round-trip available (--csv-export / --csv) |
| 📝 arm | fpd generate |
writes a GDPR Art. 17 erasure request (.eml, German or English, auto-detected) for every DELETE domain — and if no contact address is known, the built-in mail sniffer crawls the service's website for privacy@ / support@ / Impressum addresses |
| 🚀 strike | fpd send |
sends everything via your SMTP account(s). One confirmation per mail — or --yes for full autosend. Every mail gets a tracked Message-ID, and Art. 12(3) starts the one-month clock |
| 📡 track | fpd check |
re-scans your mailbox: bounces mark a contact address dead (and the domain gets re-drafted with the next-best address), replies mark it alive and the request responded. Overdue deadlines surface in fpd status with an escalation hint |
Everything lands in a local SQLite database — your decisions, every sent request, every bounce, every reply. Nothing ever leaves your machine except the erasure mails you decide to send.
The contact knowledge base
Bounce tracking has a nice side effect: over time you build a database of
verified-working (and verified-dead) privacy contact addresses per
service. fpd export-contacts dumps it as CSV/JSON — with zero personal
data — so you can share it, e.g. with the JustDeleteMe project.
Install
git clone https://github.com/Himerys/LETHE
cd LETHE
python -m venv .venv
. .venv/bin/activate # Windows: .venv\Scripts\activate
pip install .
Then:
fpd # first run: setup wizard + dashboard, tells you the next step
fpd scan # inventory your mailbox
fpd review # d / k / m — decide
fpd generate # drafts + auto-sniff missing contacts
fpd send # or: fpd send --yes
fpd check # days later: bounces & replies
fpd status # progress, deadlines, escalations
fpd with no arguments always tells you what to do next.
Windows .exe
No Python needed — grab fpd.exe from the releases page, or build it yourself:
pip install . pyinstaller
pyinstaller fpd.spec # -> dist/fpd.exe
(The GitHub Action in .github/workflows/build-exe.yml builds it on every
tagged release.)
Configuration
fpd configure walks you through everything and writes config.json into
your working directory. config.json is gitignored — your name,
addresses and SMTP credentials stay local, always. config.example.json
documents every field.
| field | meaning |
|---|---|
sender_name, aliases |
how you sign the letters / other names your accounts use |
language |
auto (per-service German/English detection), de, en |
supervisory_authority |
optional: your DPA, named in the escalation paragraph |
accounts[] |
one SMTP account per mail identity you send from |
send_delay_seconds, send_daily_limit |
be nice to your mail provider (Gmail caps at ~500/day) |
sniffer.* |
crawler knobs: workers, max pages, locales, robots.txt |
Passwords can stay out of the file entirely: leave password empty and
you'll be prompted at send time (or set FPD_SMTP_PASSWORD).
Commands
fpd dashboard + next step
fpd configure setup wizard
fpd scan inventory mailboxes [--profile PATH] [-v]
fpd review interactive triage [--all] [--csv-export F] [--csv F]
fpd generate write .eml drafts [--no-sniff] [--prefer-self-service]
fpd sniff hunt contact addresses [targets...] [-i FILE] [-o CSV]
fpd send SMTP send [--yes] [--limit N] [--dry-run]
fpd check detect bounces & replies [--profile PATH]
fpd status progress, deadlines, overdue escalations
fpd sent DOMAIN... mark as manually sent (starts the deadline)
fpd mark DOMAIN ST deleted|responded|refused|escalated|noaccount
fpd contact D EMAIL manually set a contact address
fpd export-contacts shareable contact knowledge base (no personal data)
Notes
- Legal basis: the letters invoke Art. 17 (erasure), Art. 7(3) (consent withdrawal), Art. 21 (objection), Art. 12(3) (one-month deadline) and Art. 19 (recipients) GDPR. This tool is not legal advice.
- Sniffer etiquette: the crawler respects
robots.txt, uses a polite per-host delay and identifies itself honestly. You're looking up contact addresses to exercise your legal rights — behave accordingly. - Betterbird & Thunderbird share the same profile format; both are auto-discovered (Windows/Linux/macOS/flatpak/snap). POP and IMAP folders are read directly from the local mbox files.
fpd checkreads your local mail — let Betterbird fetch new mail before running it.- JustDeleteMe data (
LETHE/data/sites.json) courtesy of the JustDeleteMe project (MIT).
decimate responsibly.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lethe_fpd-0.4.3.tar.gz.
File metadata
- Download URL: lethe_fpd-0.4.3.tar.gz
- Upload date:
- Size: 341.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
787bb0bdf4fda56411a90dddfb53dd4546f4721d1b6653d7384e7d80c31df565
|
|
| MD5 |
92a694332a2c93869292ef42f2cb9b5f
|
|
| BLAKE2b-256 |
567cfcd6749bf7bdce24b6c99ec60e06638be20adb10e3075a7d3a52718af806
|
File details
Details for the file lethe_fpd-0.4.3-py3-none-any.whl.
File metadata
- Download URL: lethe_fpd-0.4.3-py3-none-any.whl
- Upload date:
- Size: 345.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b04e33b9a8bca6fed5c2e1a6f86f28f0692eabea4467db217e28895209b50d0f
|
|
| MD5 |
bdfe7ced07b48232b0f003e9432ccf15
|
|
| BLAKE2b-256 |
8ccf53e98988313f42a886241ba4040ac3ade19c086e35e2f16107225a40b11e
|