> ## Documentation Index
> Fetch the complete documentation index at: https://agents.nanonets.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# File Utils

> Unlocks password-protected files, extracts ZIP archives, and unpacks email messages.

Unlocks password-protected files, extracts ZIP archives, and unpacks raw email messages. Display name **"File Utils"**. On by default for new agents.

## Authentication and enablement

No integration. Default-on.

## Inputs

* `file_url` (required): `${VAR_N}` of the file.
* `operation` (required): `unlock`, `unzip`, or `unpack_email`.

**`unlock`** — `parameters.password` is **required**. After unlock, the original file is updated in place; keep using the same `${VAR_N}`.

**`unzip`** — extracts supported files (PDF, images, Excel, CSV, PowerPoint, Word, Markdown) from every directory in the archive. Each extracted file gets a new variable. Do **not** unzip `.xlsx` / `.xls` / `.docx` / `.pptx` — those are Office formats that happen to be ZIP internally; send them to `structured_data_extraction` instead.

**`unpack_email`** — splits a `.eml` message into task files. A `.eml` is a MIME envelope, so `structured_data_extraction` rejects it; this is what makes an uploaded email usable. Produces `email-message.md` (subject, From/To/Cc, Date, then the text body, falling back to the raw HTML part) plus one file per attachment, each with its own variable. Inline (CID-referenced) parts are included, since senders such as Apple Mail attach real scans inline, and are flagged `inline: true` so signature logos can be deprioritised. Read `email-message.md` when the sender's instructions matter ("book this against PO 8891").

Forwarded messages are already flattened by the parser: a `message/rfc822` part is descended into (5 deep, 16 messages per mail) and its attachments are hoisted up, so a forwarded PO PDF arrives as a normal attachment. Only a nested message past those bounds, or one that fails to parse, survives as an opaque `.eml` attachment — and that is reported in `skipped_files`, since `.eml` is not itself an extractable member type.

## Output

Unlocked file (same variable), or `extracted_files` with a `filename`, `file_id`, `variable` and `mime_type` per member. `unpack_email` also returns `subject`, `from`, `body_file` and `attachment_count`. `skipped_files` / `skipped_count` appear only when something was skipped.

## Limits and side effects

* Unlock mutates the stored file in place.
* Unzip and unpack\_email create new task files.
* Both extraction operations cap at 200 files, 50 MB per file, 500 MB per call. Anything over a cap, or outside the extractable member types, is reported in `skipped_files` with a reason rather than dropped silently.
* An extracted PDF that is itself password-protected is flagged `password_protected`, so it can be passed straight to `unlock`.

## Expected errors

* Missing password on `unlock`.
* Wrong password / unsupported lock.
* Unzip of an Office document (use extraction instead).
* Bytes that are not a ZIP archive, or not a readable MIME message — the error names the detected type.
* Unsupported `operation`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.