关于 MsgLens
MsgLens 是本地邮件解析器和命令行工具,可处理 `.msg`、`.eml` 和 `winmail.dat` 文件,适用于命令行用户和 AI 助手。它无需上传文件即可提取邮件内容和附件;其 MCP 服务让助手在本机读取和转换文件。
主要功能
- 01解析 `.msg`、`.eml` 和 `winmail.dat`
- 02提取邮件头、正文和附件
- 03解码压缩 RTF 和 TNEF
- 04将邮件转换为 `.eml` 或 `.txt`
- 05通过 MCP 读取邮件文件
适用场景
- 01在命令行查看 Outlook 邮件
- 02保存邮件文件中的附件
- 03批量转换 `.msg` 文件
- 04让 AI 助手读取本地邮件
MCP 相关
通过标准输入输出运行 MCP 服务,提供读取邮件、保存附件以及转换 `.msg` 或 `winmail.dat` 文件的工具。文件保留在本机,服务不会发起网络请求。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | string | 是 | .msg、.eml 或 winmail.dat 文件的绝对路径。 |
| include_headers | boolean | 否 | 同时返回原始 Internet 标头。 |
详细介绍
msglens-cli
从命令行、Node 或通过 MCP 使用的 AI 助手中读取 Outlook .msg、.eml 和 winmail.dat 文件。包含邮件头、邮件正文和附件,无需 Outlook,也不会上传任何内容。
这些解析器与 msglens.app 浏览器版使用的是同一套。
npx msglens-cli read message.msg
为什么还要开发另一个 .msg 解析器
大多数真实的 Outlook 邮件不会将正文存储为 HTML 或纯文本。在抽取的 20 个商务 .msg 文件中,有 17 个只在 PidTagRtfCompressed 中保存了正文:压缩 RTF,原始 HTML 包含在其中(MS-OXRTFCP 和 MS-OXRTFEX)。只读取 PidTagHtml 和 PidTagBody 就停止的解析器,会将这些邮件的正文解析为空。此工具会解压 RTF 并提取其中的 HTML,按以下顺序依次回退:PidTagHtml、PidTagBodyHtml、压缩 RTF 和 PidTagBody。
它还可以:
- 根据字节内容检测文件格式,因此重命名后的文件也能打开
- 解包
winmail.dat(TNEF),包括其中包含的附件 - 根据邮件声明的代码页解码非拉丁语正文
- 读取已保存的约会和联系人,不仅限于邮件
CLI
使用 npm install -g msglens-cli 安装,命令为 msglens;也可以不安装,直接运行 npx msglens-cli。
msglens read <file...> [--json] print headers and the plain-text body
msglens attachments <file...> [-o <dir>] save every attachment
msglens convert <file...> --to eml|txt [-o <dir>]
msglens mcp MCP server on stdio (see below)
read --json会打印完整的解析结果(单个文件返回一个对象,多个文件返回数组)。不包含附件字节;会保留名称、类型和大小。attachments和convert不会覆盖文件:第二个invoice.pdf会保存为invoice (1).pdf。附件名称会被转换为普通文件名,因此邮件无法在输出文件夹之外写入文件。- 可以一次处理多个文件;某个文件处理失败时会报告错误,但不会停止处理其余文件。只要有任何文件处理失败,退出代码就是 1。
将文件夹中的 .msg 文件转换为 .eml:
npx msglens-cli convert ./mail/*.msg --to eml -o ./eml
面向 AI 助手的 MCP 服务
msglens mcp 会通过 stdio 运行 Model Context Protocol 服务,让 Claude、Codex、Cursor 和其他助手自行打开你计算机上的邮件文件。它提供三个工具:
read_email:主题、发件人、收件人、日期、纯文本正文和附件列表(可选包含原始邮件头)save_attachments:将所有附件保存到文件夹中convert_email:将 .msg 或 winmail.dat 转换为 .eml 或 .txt
文件会保留在你的计算机上;该服务不会发起网络请求。
Claude Code
claude mcp add msglens -- npx -y msglens-cli mcp
Codex(~/.codex/config.toml)
[mcp_servers.msglens]
command = "npx"
args = ["-y", "msglens-cli", "mcp"]
Claude Desktop、Cursor 和其他使用 JSON 配置的客户端
{
"mcpServers": {
"msglens": { "command": "npx", "args": ["-y", "msglens-cli", "mcp"] }
}
}
然后可以这样提问:“总结 ~/Downloads/invoice-query.msg,并将其附件保存到 ~/Desktop/invoice。”
邮件正文由发件人撰写,因此这些工具会告知助手将正文视为数据,不要遵循其中的指令。
库
import { parseFile, parse, toEml, toText } from "msglens-cli";
const email = await parseFile("message.msg");
email.subject; // string
email.from; // { name, address } | null
email.date; // Date | null
email.bodyText; // plain text, always filled
email.body; // HTML when email.bodyKind === "html"
email.attachments; // [{ fileName, mimeType, size, content: Uint8Array, isEmbeddedMessage, ... }]
const again = await parse(bytes, "message.msg"); // from a Uint8Array or ArrayBuffer
const eml = await toEml(email); // RFC 822 text
email.body 是邮件正文的 HTML,内容与发件人撰写时完全一致。它不可信:在任何地方渲染之前,都应对其进行净化处理(例如使用 DOMPurify)。
isEmbeddedMessage: true 表示附件是另一封邮件;将其 content 传给 parse() 即可读取。
需要 Node 20 或更高版本。
只想查看文件?
msglens.app 可在浏览器中打开 .msg、.eml 和 winmail.dat,并在你的设备上完成解析;支持附件和导出 PDF。
许可证
MIT。Microsoft 和 Outlook 是 Microsoft Corporation 的商标;本项目与 Microsoft 无关。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。