Files
hermes-skills/email/email-automation/references/himalaya/message-read-behavior.md
T

3.2 KiB

message read Behavior Notes

TUI vs Subprocess — Context-Dependent

Skill states that message read hangs because it uses an interactive TUI. However, in practice (June 2026, cron job context):

# This DID work and returned body content:
himalaya message read 49830 --folder INBOX
# Output: ~3000 chars of decoded email body

# This also worked:
himalaya message read 49826 --folder INBOX
# Output: ~1100 chars

When message read works from subprocess:

  • Terminal-like environment (not truly headless — TERM/STY/TMUX may be set)
  • Email bodies are small-to-medium (< 10KB)
  • No special characters that trigger interactive prompts

When message read will likely fail:

  • True headless environment with no TTY allocation
  • Large emails (> 20KB) that trigger pagination
  • Emails with HTML attachments that trigger rendering prompts

Safe default: If message read works, use it. If it returns nothing or hangs, fall back to message export --full (see himalaya skill).

message export --full as Fallback

When message read fails:

result = subprocess.run(
    ["himalaya", "message", "export", msg_id, "--full"],
    capture_output=True, text=True,
    encoding="latin-1", timeout=30
)

Output is raw MIME — parse headers by splitting on \n\n, then decode MIME-encoded headers with email.header.decode_header().

Email Classification Patterns (Order vs Invoice)

Signal Likely Type
Subject: "Bestellung erfolgreich", "Bestellung wurde bestätigt", "Your order is being processed" Bestellbestätigung
Subject: "Deine Bestellung wird bald eintreffen", "Order coming soon", "Wir packen Deine Bestellung" Bestellbenachrichtigung (delivery, not invoice)
Contains Bestellnummer/Order number + Artikel/Items + Preis but NO Rechnungsnummer/Gesamtbetrag/Steuern Bestellbestätigung → Bestellungen_jjjj_mm
Contains Rechnungsnummer, Gesamtbetrag, Steuern, Fälligkeitsdatum Rechnung → Rechnungen_jjjj_mm
Subject: "20 % Rabatt", "Sonderangebot", "Aktion" with discount code in body Marketing/Newsletter → ignore
Subject: "Sendung kommt heute", "Live verfolgen" with DHL/Paketdienst Versandtracking → ignore
Subject: "Bestellung hat einen lokalen Boost erhalten" with product recommendations Marketing → ignore
Subject: "Ihre Sendung kommt heute" with DHL/Paketdienst Versandtracking → ignore

folder create vs message move for Nested Folders

In practice (June 2026 cron session):

  • himalaya folder create "Rechnungen_2026_06" returned exit code 1 with empty stderr — appeared to silently fail or succeed
  • himalaya folder create "Rechnungen_2026_06/Bestellungen_2026_06" same behavior
  • himalaya folder list showed the folders existed after message move — suggesting message move auto-created them
  • Safe pattern: always use message move "Parent/Child" <ID> for nested paths, and check folder list to confirm

imap_codec Warnings

During message move, WARN imap_codec::response: Rectified missing text to "..." may appear between the command and the success message. These are harmless IMAP protocol quirks. The actual output ends with Message(s) successfully moved from INBOX to FolderName!.