Outlook Email drafts collapse plain-text paragraphs while the connector accepts undocumented HTML
Codex App version
0.144.5 (from the affected Codex Desktop session metadata)
Subscription
Organization workspace; the exact subscription name is not exposed to the Codex runtime.
Platform
Darwin 25.5.0 arm64 arm
What issue are you seeing?
The standard Outlook Email connector exposes:
draft_email(text_content), wheretext_contentis described as plain textcreate_reply_draft(comment), wherecommenthas no content-type control
Following that contract and using LF or CRLF paragraph breaks produces Outlook drafts whose authored content is collapsed into one dense block without readable paragraph or list separation.
The connector nevertheless accepts semantic HTML fragments in those same fields. Passing <p>, <ul>/<ol>, and <li> produces correctly structured saved drafts. This behavior is reliable in practice but undocumented and contradicts the current Outlook plugin guidance that says writes are plain-text-only.
There is a second inconsistency:
draft_emailcan returnbody.contentType: "text"immediately after creation.- Fetching the exact same returned draft ID with
fetch_messagecan then return a saved HTML body with the submitted<p>/<ul>/<li>structure. - Reply drafts often report
contentType: "html"even when the newly authored plain-text prefix is collapsed, because the quoted thread itself is HTML. bodyPreviewcan contain apparent line breaks that do not prove the full saved body is formatted.
This causes agents to create malformed drafts, retry several times, create duplicates, or fall back to browser automation to repair formatting.
What steps can reproduce the bug?
Use the signed-in standard Outlook Email connector. Do not send any message.
New draft: documented/plain-text path
{
"to": [{"email": "recipient@example.com", "name": "Recipient"}],
"subject": "Formatting reproduction",
"text_content": "Hello,\n\nFirst paragraph.\n\n- Item one\n- Item two\n\nFinal sentence."
}
- Call
draft_email. - Capture the returned draft ID.
- Call
fetch_messagefor that exact ID. - Open the saved draft in Outlook.
- Observe that authored paragraphs/list items can be collapsed into a dense block.
CRLF (\r\n) instead of LF does not fix the issue.
New draft: currently undocumented working path
{
"to": [{"email": "recipient@example.com", "name": "Recipient"}],
"subject": "Formatting reproduction",
"text_content": "<p>Hello,</p><p>First paragraph.</p><ul><li>Item one</li><li>Item two</li></ul><p>Final sentence.</p>"
}
Repeat the same create-and-fetch sequence. The saved draft retains paragraph and list structure.
The same A/B result occurs for replies when the source is passed through comment.
We reviewed 23 unique standard-connector draft IDs: 14 new drafts and 9 reply drafts. LF/CRLF-only inputs repeatedly produced the collapse, including at least three explicit user-visible failures. Semantic paragraph/list fragments produced structured readbacks for the tested new draft and six reply drafts.
What is the expected behavior?
One stable, documented contract:
- Preferably expose a structured body with explicit
contentandcontentTypefields for new, reply, and forward drafts. - Alternatively, officially document that
text_contentandcommentaccept semantic HTML fragments and update the bundled Outlook skills accordingly. - Preserve plain-text paragraph/list boundaries if the API continues to call these fields plain text.
- Make the create response and same-ID
fetch_messagerepresentation consistent, or document that saved-body readback is mandatory. - Do not present
bodyPrevieworcontentTypealone as formatting verification.
Additional information
- Current Outlook skill: https://github.com/openai/plugins/blob/main/plugins/outlook-email/skills/outlook-email/SKILL.md
- Current Outlook reply-drafting skill: https://github.com/openai/plugins/blob/main/plugins/outlook-email/skills/outlook-email-reply-drafting/SKILL.md
- Microsoft documents that Outlook can remove plain-text line breaks: https://learn.microsoft.com/en-us/troubleshoot/outlook/message-body/line-breaks-are-removed-in-posts-made-in-plain-text
- Microsoft Graph supports text and HTML message bodies: https://learn.microsoft.com/en-us/graph/api/resources/itembody
openai/pluginshas GitHub Issues disabled, so this is reported inopenai/codexas the affected Codex App surface.
No emails were sent. Testing and verification used unsent drafts only.