Get one mail message
mail_get_messageFetch a single email by ID from Microsoft Graph, including sender, recipients, timestamps, and body text or preview; attachments need a separate call and reading does not mark it read.
Instructions
Returns one message with its body plus sender, recipients, timestamps, importance, conversationId and webLink. The body defaults to plain text and is capped at 8000 characters; raise maxBodyChars for a long thread, or pass format:"preview" to skip the body when you only need to identify the message. Attachment contents are never included — use mail_list_attachments. Reading a message here does not mark it read; use mail_mark_read for that. DO NOT loop this over a reply chain: each message quotes the ones before it, so reading a thread one call at a time returns the same text again and again — on a measured 24-message thread that was 381,000 characters, four times what the same content costs through mail_fetch_thread, which folds the repeats. Use this tool for a single message, and mail_fetch_thread for two or more of one conversation. bodyRendering says where the text came from: "exchange-text" is Exchange's own conversion, "stripped-html" means the tags were removed locally and every link went with them (linksLost counts how many), "html" is raw markup.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The message id, as returned by mail_list_messages. | |
| format | No | How to return the body. "text" (default) asks Graph for plain text and strips any HTML that comes back anyway. "html" returns the raw markup, which costs several times more tokens. "preview" skips the body entirely and returns only the 255-character bodyPreview — use it when you just need to confirm you have the right message. | text |
| foldLinks | No | Replace click-tracking URLs — those over 200 characters — with a marker naming the host and the original length. On a notification mail those redirectors are most of the body and none of the meaning; ordinary links of any normal length are returned untouched. Set false only if you need a tracking URL verbatim. | |
| maxBodyChars | No | Character budget for the body. Defaults to 8000, which covers most messages. The server's own output cap still applies on top of this. |