| name | yahoomail-export |
| description | Export large Yahoo Mail archives with the folder-rotation IMAP workflow, resumable downloads, and safe delete-after-verify handling. |
| metadata | {"short-description":"Export large Yahoo Mail archives safely"} |
Yahoo Mail Export
Use this skill when working on large Yahoo Mail IMAP exports, especially when the mailbox is bigger than Yahoo's practical folder limits or the connection keeps dropping mid-run.
Use This Skill For
- Draining Yahoo
INBOX in bounded batches
- Downloading export folders to local
.eml files
- Deleting only messages that have been verified locally
- Resuming after Yahoo IMAP disconnects,
SERVERBUGs, or broken pipes
- Turning an existing export workflow into a repeatable, documented process
Workflow
- Check whether
INBOX is already empty.
- Pick the first export folder with room.
- Move a bounded batch out of
INBOX.
- Download that export folder locally.
- Delete only messages that were successfully written to disk.
- Save state so the next run can resume cleanly.
Practical Yahoo Limits Observed
These are operational observations from the completed migration, not official Yahoo documentation:
10,000 messages is the practical folder ceiling for normal IMAP selection.
8,999 messages is a safe move batch for the rotation step.
1,000-message delete chunks worked reliably.
0.1s between fetches was enough to keep the connection usable.
- Periodic reconnects were necessary during long fetch runs.
- Yahoo would sometimes drop the socket with:
IMAP4rev1 Server logging out
Broken pipe
SERVERBUG
Preferred Implementation Pattern
Use a script that:
- writes
.eml before metadata
- keeps per-folder progress
- reconnects after a fixed number of fetches
- deletes by UID, not by unstable sequence assumptions
- writes a state file and a lock file
- treats
INBOX empty as a terminal success condition
Core Files
export-scripts/purge_cycle.py - main safe rotation cycle
export-scripts/move_to_exports.py - move-only helper for testing
export-scripts/download_sent.py - read-only/resumable Sent-folder downloader
triage-pipeline/email_indexer.py - canonical SQLite + FTS5 indexer for local .eml archives
triage-pipeline/triage_viewer.py - local-only browser viewer and FTS search API
triage-pipeline/build_embeddings.py - embedding generation
triage-pipeline/pre_filter.py - rule-based filtering
triage-pipeline/triage_emails.py - LLM triage
triage-pipeline/summary_report.py - summary generation
Important Guardrails
- Do not delete from Yahoo until the local
.eml is written.
- Do not assume a stalled log means failure once
INBOX is empty.
- Do not keep the watchdog running forever after completion; it will happily rediscover โstallsโ in a finished job.
- Keep export folders under the practical limit so Yahoo does not become philosophical about your session.
If You Need to Reuse This Skill
For a new mailbox migration, adapt the constants in the scripts first:
- account credentials
- base directory
- move batch size
- delete chunk size
- reconnect delay
- cooldown intervals
Then test on a tiny folder before touching the real inbox.