{
  "slug": "mbox-splitter",
  "name": "gizza-ai/mbox-splitter",
  "version": "0.1.0",
  "title": "MBOX Splitter — split an mbox into individual EML messages — gizza.ai",
  "description": "Paste an mbox archive and split it into individual .eml messages with suggested filenames. List what is inside, pull out one message, or export JSON — all local.",
  "tags": [
    "mbox splitter",
    "mbox to eml",
    "split mbox file",
    "extract emails from mbox",
    "mbox converter",
    "eml export",
    "thunderbird mbox",
    "gmail takeout mbox"
  ],
  "category": "network",
  "urls": {
    "page": "https://gizza.ai/tools/mbox-splitter/",
    "markdown": "https://gizza.ai/tools/mbox-splitter/index.md",
    "descriptor": "https://gizza.ai/tools/mbox-splitter/tool.json",
    "deep_link_example": "https://gizza.ai/tools/mbox-splitter/?mbox=From%20alice%40example.com%20Mon%20Sep%2003%2010%3A00%3A00%202018%0AFrom%3A%20Alice%20%3Calice%40example.com%3E%0ASubject%3A%20Quarterly%20report%0AMessage-ID%3A%20%3Ca1%40example.com%3E%0ADate%3A%20Mon%2C%203%20Sep%202018%2010%3A00%3A00%20%2B0000%0A%0Afirst%20body%0A%0AFrom%20bob%40example.com%20Mon%20Sep%2003%2011%3A00%3A00%202018%0AFrom%3A%20Bob%20%3Cbob%40example.com%3E%0ASubject%3A%20Lunch%3F%0AMessage-ID%3A%20%3Cb2%40example.com%3E%0ADate%3A%20Mon%2C%203%20Sep%202018%2011%3A30%3A00%20%2B0000%0A%0Asecond%20body&output=files&naming=index&message=0&unescape_from=true&keep_postmark=true"
  },
  "cli": "gizza tool mbox-splitter \"From alice@example.com Mon Sep 03 10:00:00 2018\nFrom: Alice <alice@example.com>\nSubject: Quarterly report\nMessage-ID: <a1@example.com>\nDate: Mon, 3 Sep 2018 10:00:00 +0000\n\nfirst body\n\nFrom bob@example.com Mon Sep 03 11:00:00 2018\nFrom: Bob <bob@example.com>\nSubject: Lunch?\nMessage-ID: <b2@example.com>\nDate: Mon, 3 Sep 2018 11:30:00 +0000\n\nsecond body\"",
  "tool": {
    "description": "Split a multi-message mbox archive (Thunderbird, Apple Mail, Gmail Takeout) into the individual RFC 5322 messages it contains, each a ready-to-save .eml with a suggested filename. Messages are split on the classic `From ` postmark lines and sliced out verbatim, so headers, MIME parts and base64 attachments are preserved exactly; the postmark itself is dropped unless keep_postmark=true. Choose output=\"files\" for every message under a labelled header, \"list\" for a numbered index of filename/date/sender/subject/size, \"json\" for structured per-message records, or \"eml\" plus message=N to pull one raw message out. Filenames follow naming=index|subject|date|message-id, always index-prefixed so order and uniqueness survive, with RFC 2047 encoded-word subjects decoded. mboxo/mboxrd `>From ` body quoting is undone by default. A message with no postmark is treated as a single message; archives over 2000 messages are rejected. Runs locally.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "keep_postmark": {
          "default": false,
          "description": "Keep the `From sender date` postmark separator line at the top of each split-out message. Off by default because a `.eml` file is a bare RFC 5322 message; turn it on to round-trip pieces back into an mbox.",
          "type": "boolean"
        },
        "mbox": {
          "description": "The mbox archive text to split. Messages are delimited by the classic `From ` postmark lines at the start of a line (the space after `From` is what distinguishes a postmark from a `From:` header); a single pasted RFC 5322 message with no postmark is treated as one message. Each message is sliced out verbatim, so headers, MIME structure and base64 attachments are never re-serialized.",
          "type": "string"
        },
        "message": {
          "default": 0,
          "description": "Which single message to return, 1-based in archive order. The default 0 returns every message; set it with output=\"eml\" to pull one clean `.eml` out of the archive. A number past the end of the archive is an error that reports how many messages there are.",
          "maximum": 2000,
          "minimum": 0,
          "type": "integer"
        },
        "naming": {
          "default": "index",
          "description": "How each suggested filename is built: \"index\" (default) gives `001.eml`, \"subject\" gives `001-quarterly-report.eml`, \"date\" gives `001-2018-09-03-1000.eml` from the Date header, and \"message-id\" gives `001-a1-example-com.eml`. Every scheme keeps the 1-based index prefix so archive order and uniqueness survive; subjects are RFC 2047-decoded and slugged to portable ASCII.",
          "enum": [
            "index",
            "subject",
            "date",
            "message-id"
          ],
          "type": "string"
        },
        "output": {
          "default": "files",
          "description": "What to return: \"files\" (default) prints every message under a `===== NNN-name.eml (N bytes) =====` header, \"list\" prints a numbered index of filename, date, sender, subject and size without the message bodies, \"json\" returns an array of {index, filename, subject, from, date, bytes, eml}, and \"eml\" returns one raw message on its own (pair it with `message` to pick which).",
          "enum": [
            "files",
            "list",
            "json",
            "eml"
          ],
          "type": "string"
        },
        "unescape_from": {
          "default": true,
          "description": "Undo the mboxo/mboxrd `>From ` body quoting that exporters add to body lines starting with `From `, restoring the original message text. On by default; turn it off to keep the archive bytes exactly as written.",
          "type": "boolean"
        }
      },
      "required": [
        "mbox"
      ],
      "type": "object"
    }
  }
}