perch mail fetch writes raw RFC 5322 messages to stdout, files, an mbox stream, or a Maildir.

# One raw message on stdout.
perch mail fetch --server imaps://mail.example.com --username you@example.com \
  --uids 42 > message.eml

# An mbox stream for formail, procmail, or archival.
perch mail fetch --server imaps://mail.example.com --username you@example.com \
  --query 'from:alice' --format mbox > alice.mbox

# One .eml file per message.
perch mail fetch --server imaps://mail.example.com --username you@example.com \
  --query 'unseen' --dest ./messages

# Maildir, preserving flags.
perch mail fetch --server imaps://mail.example.com --username you@example.com \
  --query 'from:alice' --format maildir --dest ~/Mail

Formats

FormatDestinationNotes
eml (default)stdout for one message, or a directoryWrites <uid>.eml per message
mboxstdout or a fileEscapes From lines and separates messages
maildira Maildir rootCreates tmp/, new/, cur/; preserves flags

--dest is a directory for eml and maildir, and a file for mbox. Existing files are not overwritten unless --overwrite is passed.

Selecting messages

Use --uids, a search expression, or --all:

perch mail fetch --uids 42
perch mail fetch --query 'unseen'
perch mail fetch --all --limit 100

--limit caps the number of messages. Fetch order is oldest first by default; --reverse fetches newest first.

Listing metadata

perch mail search prints a table by default and NDJSON with --json:

perch mail search --query 'from:alice' --json

Use perch mail list for mailboxes.