Handbook
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 DownloadMessage — preferred |
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.