Task `outlook_download_message_eml` v1

Read-only download of one OWA inbox row as .eml to a consumer-supplied path. Rejects .msg.

Updated

Task outlook_download_message_eml v1

Summary

Read-only download of one OWA inbox row as .eml to a consumer-supplied path. Rejects .msg.

Read-only policy

Allowlisted navigation: list_row right-click (context menu export, preferred), optional list_row left-click + reading-pane Download (fallback), overflow menu (export only).

Inputs

Field Required Notes
session_ref yes Attached session
row_index yes* Inbox list index (*optional when exchange_item_id set and token cached)
dest_path yes Absolute path ending in .eml
ui_hash no Deprecated — legacy cache key only; use exchange_item_id
exchange_item_id no OWA immutable item id (AAkALg…) for direct DownloadMessagepreferred
list_row_id no Conversation id for row resolve / conv→item cache

Output

Wire JSON: ok, dest_path, byte_length, content_type, warnings.

Failure modes

Kind When
download_error No file, or .msg
navigation_error Row/menu failed
owa_svc_token_missing Direct download mode but x-token bootstrap failed
owa_svc_unauthorized DownloadMessage rejected token (401/403)
(warning) owa_svc_token_refreshed Direct download failed; new x-token minted via menu and retried

Verification

  • tests/playwright/test_outlook_download_eml_validate.py
  • Offline fake session when available

Examples

{"session_ref": "fake-outlook", "row_index": 0, "dest_path": "/tmp/source.eml"}

Changelog

  • v1 — Initial EML-only download task.