Skip to main content

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 check reads 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lethe_fpd-0.4.3.tar.gz (341.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lethe_fpd-0.4.3-py3-none-any.whl (345.1 kB view details)

Uploaded Python 3

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

Hashes for lethe_fpd-0.4.3.tar.gz
Algorithm Hash digest
SHA256 787bb0bdf4fda56411a90dddfb53dd4546f4721d1b6653d7384e7d80c31df565
MD5 92a694332a2c93869292ef42f2cb9b5f
BLAKE2b-256 567cfcd6749bf7bdce24b6c99ec60e06638be20adb10e3075a7d3a52718af806

See more details on using hashes here.

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

Hashes for lethe_fpd-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b04e33b9a8bca6fed5c2e1a6f86f28f0692eabea4467db217e28895209b50d0f
MD5 bdfe7ced07b48232b0f003e9432ccf15
BLAKE2b-256 8ccf53e98988313f42a886241ba4040ac3ade19c086e35e2f16107225a40b11e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page