Status: RESOLVED 2026-10-05. Found during the first post-deployment check and fixed in both the standalone client and the misc MCP server. Component: misc-server/outlook-mail (outlook_read and MIME-part tools).
outlook_read returns correct decoded headers (from, to, subject, date, message_id) but body is an empty string and attachments is an empty list. No error is raised, so a caller cannot distinguish "no content" from "content not extracted".
outlook_read(folder="INBOX", uid="195211")
# David Lloyd class booking confirmation, 2026-10-04
# from: noreply@mybookings.davidlloyd.co.uk
→ body: "", attachments: []
• Inbox UID 186002 — plain-text Gmail reply: full body decoded.• INBOX UID 195243 — Premier Inn marketing mail (multipart with a text/plain alternative): full text body decoded.
INBOX UID 195211 is multipart: part 1 is text/plain, UTF-8, 4 bytes, containing only whitespace; part 2 is text/html, UTF-8, 17,876 bytes. The old extractor treated the presence of any text/plain part as sufficient and therefore never fell back to the usable HTML alternative. The failure was consequently broader than strictly HTML-only messages: an empty nominal plain part also caused an empty body.
outlook_read ignores empty plain content, falls back to HTML, reports body_source/body_status, and includes rich part metadata. The hardening pass prevents bodies nested beneath attached message/rfc822 containers from being selected, preserves link targets during HTML-to-text conversion, tolerates unknown charsets, and exposes attachment part IDs. outlook_read_part fetches only the selected MIME section with a bounded partial IMAP read; format=html preserves real HTML and returns other text/* unchanged with a structured warning. Regression tests include the exact four-byte whitespace plain alternative plus HTML, attached-message isolation, nested IDs, explicit HTML/text behavior, binary base64, malformed charset, container rejection, and size limits. Live UID 195211 checks passed and misc-mcp-server.service is active. Commits: popit3 7918768; gdata-server ebaef67.
Implementation: /home/john/py/gdata-server/outlook_imap.py and outlook_mail_tools.py. Tool documentation: misc-server/outlook-mail. Previous misc-server defect history: misc-server/email-tools-defects.