# AI MemMail：让 Dense-Mem 帮你分拣和回复商务邮箱

**Summary:** 一篇实用部署教程：用开源 Rust 邮件智能体 ai-memmail 监听 IMAP 邮箱，从 Dense-Mem 取回业务上下文，并通过 SMTP 安全地回复、转发或不处理邮件。

- Canonical: https://markhuang.ai/zh/blog/ai-memmail-dense-mem-email-agent
- Language: zh-CN
- Author: [Mark Huang](https://markhuang.ai/about)
- Published: 2026-07-05
- Section: 教程
- Tags: ai-memmail, Dense-Mem, 邮件自动化, AI 智能体, IMAP, SMTP, 教程
- License: https://creativecommons.org/licenses/by-nc/4.0/

---

![一位业务经营者正在使用连接到记忆图谱的 AI 邮件仪表盘](https://cdn.markhuang.ai/blog/ai-memmail-dense-mem-email-agent/hero.webp)

*AI MemMail 把繁忙的收件箱变成由 Dense-Mem 上下文支撑的 AI 辅助工作流。*

## 快速答案

[ai-memmail](https://github.com/markhuangai/ai-memmail) 是一个开源 Rust 邮件智能体，适合那些每天收到太多邮件、无法全部手动处理的个人经营者。

它会监听 IMAP 邮箱，先检查每封新邮件是否安全，再判断邮件类型，从 Dense-Mem 通过 MCP 取回相关业务上下文，然后选择三种结果之一：

- 当答案被允许且有上下文支撑时，通过 SMTP 自动回复
- 当请求需要人工判断时，转发给人工审核地址
- 当没有安全或有用的动作时，不处理

实际使用场景很简单：独立业务经营者可以把服务介绍、政策、定价、项目历史、产品事实和路由偏好放进 Dense-Mem，然后让 ai-memmail 利用这层知识来处理常规来信，而不是把每一封邮件都当成需要亲自处理的任务。

## 试用在线演示

<contact@markhuang.ai> 已接入一个在线 ai-memmail 演示。你可以先给这个地址发一封邮件，体验完整流程，再决定是否自己部署。

最适合测试的是正常的产品或支持类问题，主题围绕 Dense-Mem 或 ai-memmail，例如：

```text
Subject: Dense-Mem and ai-memmail question
​
Hi, can Dense-Mem help ai-memmail answer questions about an open-source project, and when should the email agent forward to a human instead?
```

不要在测试邮件里放密码、API 密钥、私人账号信息、付款信息，或者任何机密内容。请把这个邮箱当作公开的自动化演示，而不是私人通道。

## 你要搭起来的东西

![入站邮件依次经过安全扫描、分类、记忆召回、回复和人工审核结果](https://cdn.markhuang.ai/blog/ai-memmail-dense-mem-email-agent/workflow.webp)

*这条流水线的顺序是先安全、再记忆、最后发送。*

v1 应用在一个从 `ghcr.io/markhuangai/ai-memmail:latest` 拉取的 Docker app 进程里运行两条路径：

- Rust Axum Web API，用来提供 React 控制面板
- worker，用来轮询 IMAP、执行 AI 决策、调用配置好的 Dense-Mem MCP 服务，并通过 SMTP 发送

PostgreSQL 会保存处理状态、邮件历史元数据、分类、规则匹配、出站动作和操作日志。邮件成功处理后，源邮件会被标记为 `Seen`。去重使用邮箱 ID 加 IMAP `UIDVALIDITY` 和 UID，避免重复轮询时发出重复回复。

## 为什么 Dense-Mem 是关键

大多数邮件自动化会掉进两个坑。

纯规则系统很可控，但太浅。它可以匹配标题，却不知道你的服务、历史决策、项目术语，也分不清真正的合作机会和模板化销售邮件。

普通 AI 邮件智能体更灵活，但上下文不足。如果模型没有你的业务知识，它就会猜、问太多追问，或者写出看起来很自信但其实不可靠的回复。

ai-memmail 用的是更合理的分层：

| 层          | 职责                                |
| ---------- | --------------------------------- |
| ai-memmail | 拉取邮件、执行安全检查、应用规则、校验结构化动作、发送回复或转发。 |
| Dense-Mem  | 保存持久知识：政策、偏好、项目事实、历史决策和业务上下文。     |
| AI 模型      | 读取当前邮件和召回的上下文，然后生成结构化决策。          |

这正是它对单人业务有用的地方。邮件智能体不需要把所有事实都硬编码进 prompt。它可以根据当前邮件的发件人、标题和正文，去记忆层里取回相关上下文。

## 开始之前

不要一上来就用你的主私人邮箱测试。先用一个次要邮箱，或者专门的地址，例如 `support@example.com`、`hello@example.com`、`inbound@example.com`。

你需要这些东西：

- Docker 和 Docker Compose
- `curl`
- 兼容 OpenAI 的聊天 API 端点和 API 密钥
- 一个 Dense-Mem 服务器和 API 密钥
- 一个启用了密码认证的 IMAP 和 SMTP 的邮箱账号
- 一个可以接收可疑邮件转发的人工审核地址

如果你使用 Gmail、Outlook、Fastmail、Zoho 或其他托管邮箱，尽量使用应用专用密码或邮箱专用凭证。OAuth2 不在 ai-memmail v1 范围内。

## 步骤 1：准备 Dense-Mem

ai-memmail 的效果取决于它能召回什么知识。接入邮箱之前，先把真实业务上下文写进 Dense-Mem。

适合一开始保存的记忆可以这样写：

```text
Remember for my business inbox: I do not want paid SEO, lead-generation, PR, backlink, or generic marketing vendor pitches. Politely decline when safe.
```

```text
Remember for my business inbox: credible open-source contributors, concrete technical integration questions, and serious project opportunities should be forwarded to me for review.
```

```text
Remember for my business inbox: support questions about Dense-Mem should use the public docs and project facts in memory. If the answer needs private account access, forward to a human.
```

补充未来邮件智能体会用到的事实：

| 记忆类型 | 示例                            |
| ---- | ----------------------------- |
| 服务内容 | 你卖什么、不卖什么、支持哪些服务、公开项目链接。      |
| 政策   | 退款政策、预约规则、回复语气、升级给人工的条件。      |
| 路由   | 哪些主题可以回答，哪些必须转发，哪些发件人不值得继续沟通。 |
| 上下文  | 项目名称、可公开给客户看的事实、产品差异、常见回答。    |

不要保存密码、付款信息、私钥，或者任何你不希望配置的 AI 服务商处理的内容。Dense-Mem 是上下文层，不是密码管理器。

如果你还没有运行 Dense-Mem，可以先看 [Dense-Mem 快速开始](/blog/dense-mem-personal-server-claude-code-codex)，或者用 [Dense-Mem 托管演示](/blog/dense-mem-hosted-demo-test-instance)理解流程。真正接业务邮箱时，请使用你自己控制的 Dense-Mem server。

## 步骤 2：创建运行目录

运行 ai-memmail 不需要克隆完整源码仓库。创建一个小的运行目录，放入 Compose 文件、配置文件和发布镜像会用到的 prompt 文件即可。

```bash
mkdir ai-memmail
cd ai-memmail
curl -fsSLO https://raw.githubusercontent.com/markhuangai/ai-memmail/main/docker-compose.yml
mkdir -p config prompts
curl -fsSL https://raw.githubusercontent.com/markhuangai/ai-memmail/main/config/config.example.yaml -o config/config.yaml
for file in safety-scan.md email-classifier.md rule-action.md outbound-review.md support-agent.md; do
  curl -fsSL "https://raw.githubusercontent.com/markhuangai/ai-memmail/main/prompts/$file" -o "prompts/$file"
done
```

`config/config.yaml` 是本地运行配置。它会包含邮箱、AI 服务商和 Dense-Mem 密钥，所以不要提交到 Git，不要截进图里，也不要放进共享目录。

## 步骤 3：设置控制面板密钥

控制面板使用 `CONTROL_PANEL_KEY` 作为登录密钥。

```bash
export CONTROL_PANEL_KEY="replace-with-a-long-local-panel-key"
```

这个密钥用来保护本地控制面板。它不是邮箱密码，不是 AI 服务商密钥，也不是 Dense-Mem 密钥。

## 步骤 4：配置 AI 服务商

打开 `config/config.yaml`，更新 `ai` 配置块：

```yaml
ai:
  protocol: openai
  AI_API_URL: "https://api.openai.com/v1"
  AI_API_SECRET: "replace-with-your-ai-api-key"
  AI_MODEL: "gpt-4.1-mini"
  review:
    enabled: false
    prompt_path: "outbound-review.md"
```

代码会调用兼容 OpenAI 的 `/chat/completions` 端点，并把温度参数设为 `0`。如果你的服务商已经给出了完整的 `/chat/completions` URL，ai-memmail 也能处理。

第一次测试时先保持出站审核关闭。基础流程跑通后，再给风险更高的邮箱打开第二轮审核。

## 步骤 5：接入 Dense-Mem

在同一个配置文件里，配置 Dense-Mem MCP 服务器。

```yaml
mcp_servers:
  dense_mem_primary:
    transport: streamable_http
    command:
    args: []
    env:
      DENSE_MEM_API_KEY: "dm_replace_with_your_dense_mem_key"
    url: "https://your-dense-mem.example.com/mcp"
```

当前 worker 会从 `url` 或 `DENSE_MEM_MCP_URL` 读取 MCP URL，并从 `DENSE_MEM_API_KEY` 读取 API 密钥。关键点是：这个 URL 必须能从 ai-memmail 应用容器内访问。

如果 Dense-Mem 运行在公开 HTTPS 主机上，就使用那个 URL。如果 Dense-Mem 和 ai-memmail 在同一个 Docker 网络里，类似 `http://dense-mem:8080/mcp` 的服务 URL 可以工作。如果 Dense-Mem 只跑在宿主机上，请先确认容器能解析并访问宿主机地址，再把它用于真实邮件。

## 步骤 6：配置一个邮箱

先从一个专用邮箱开始。运行之前替换所有示例值。

```yaml
mailboxes:
  - id: support
    address: support@example.com
    enabled: true
    poll_interval_seconds: 60
    safety_forward_to: ["human@example.com"]
    accepted_conditions:
      - recipients: ["support@example.com"]
        subject_regex: []
    mcp_servers: ["dense_mem_primary"]
    agent:
      system_prompt_path: "support-agent.md"
      default_forward_to: ["human@example.com"]
    imap:
      host: imap.example.com
      port: 993
      tls: true
      username: support@example.com
      password: "replace-with-imap-password"
      folder: INBOX
    smtp:
      host: smtp.example.com
      port: 587
      starttls: true
      username: support@example.com
      password: "replace-with-smtp-password"
      from: support@example.com
```

`accepted_conditions` 会让 worker 聚焦在发给这个邮箱地址的邮件上。`safety_forward_to` 和 `default_forward_to` 应该指向真实人工审核地址。

## 步骤 7：启动服务栈

用发布到 GHCR 的镜像运行本地服务栈：

```bash
docker compose up
```

默认控制面板地址是：

```text
http://127.0.0.1:18080
```

如果 `18080` 已经被占用，可以换一个宿主机端口：

```bash
AI_MEMMAIL_HTTP_PORT=18081 docker compose up
```

PostgreSQL 默认暴露在 `127.0.0.1:15432`。应用容器会通过内部 Postgres 服务的 `5432` 端口连接数据库。

## 步骤 8：打开控制面板

打开本地面板，用刚才导出的 `CONTROL_PANEL_KEY` 登录。

控制面板提供这些运维视图：

- 概览指标
- 邮件历史
- 分类规则
- 邮箱设置
- MCP 服务器设置
- 安全名单
- 提示词和日志设置

ai-memmail 会初始化一些默认标签，例如 `marketing_vendor`、`greeting`、`question`、`project_opportunity` 和 `other`。它还会给每个邮箱初始化一条启用中的规则，用来自动婉拒营销供应商推销。你可以在规则视图里调整哪些邮件应该回答、转发或忽略。

## 步骤 9：发送一封安全测试邮件

从另一个账号给配置好的邮箱发送测试邮件：

```text
Subject: Question about your AI memory project
​
Hi, I found your Dense-Mem project. Can you point me to the best quick-start guide and explain whether it can be used by more than one AI client?
```

然后观察 app logs：

```bash
docker compose logs -f app
```

再去控制面板的 History 视图检查结果。一个好的首次结果应该能看到 processing run、classification、memory recall、chosen action 和 outbound decision。如果邮件被回复了，检查接收账号，确认回复准确，而且邮件线程正确。

只有安全测试通过后，才应该发送更真实的邮件。

## 安全流程如何工作

![一封可疑邮件被隔离等待人工审核，安全邮件继续进入回复流程](https://cdn.markhuang.ai/blog/ai-memmail-dense-mem-email-agent/safety-review.webp)

*不可信邮件必须先通过扫描，之后才可能接触记忆工具或发送动作。*

每封邮件都被当成不可信数据处理。邮件正文永远不能变成 system instruction。

处理顺序是：

1. 从 IMAP 获取未读邮件。
2. 保存元数据并创建 processing run。
3. 检查 banned senders 和 sender-review state。
4. 运行 safety scan，此阶段没有 MCP tools，也没有发送能力。
5. 隔离 prompt injection、jailbreak、恶意 hacking 或敏感信息外泄尝试。
6. 对安全邮件做 category 和 topic 分类。
7. 应用匹配的 mailbox rules。
8. 如果没有规则处理，就运行 mailbox agent，而且只允许使用该邮箱配置过的 MCP servers。
9. 可选地运行 outbound review。
10. 只有结构化 action 通过确定性校验后才发送。

这很重要，因为邮件本身就是对抗性输入面。邮件可以写“ignore previous instructions”，也可以要求泄露 secrets。ai-memmail 会先检查这些内容，再允许 mailbox agent 召回记忆或起草回复。

## 规则和 Dense-Mem 各放什么

每次都必须执行的政策放进 rules。AI 理解邮件时需要的背景知识放进 Dense-Mem。

| 放进 rules                      | 放进 Dense-Mem                  |
| ----------------------------- | ----------------------------- |
| 婉拒 marketing vendor outreach。 | 你的业务做什么、哪些服务可以公开说明。           |
| 法律、财务、账号或凭证请求必须转发。            | 常用解释和产品事实。                    |
| 明显低价值类别直接 no-op。              | 已知项目、集成、公开 roadmap 说明和常见支持回答。 |
| 安全敏感请求升级给人工。                  | 你偏好的语气，以及什么算认真机会。             |

这样系统会更容易维护。Rules 负责划边界。Dense-Mem 让边界内的回答有足够知识。

## 生产使用注意事项

在重要邮箱上使用 ai-memmail 之前，先收紧设置。

- 使用专用邮箱，不要使用私人主邮箱或大杂烩 catch-all。
- 使用 app password 或邮箱专用凭证。
- 不要把 `config/config.yaml` 提交到 Git，也不要把它截进图里。
- 把人工审核转发地址指向有人看的邮箱。
- 任何可能讨论金钱、合同、客户私密数据或账号操作的邮箱，都应先打开 outbound review。
- Dense-Mem 里的记忆应该是事实型、可公开安全使用、并且经过你审核的。
- 如果 history 和 audit trail 重要，请备份 PostgreSQL。

最大的运维错误，是把 AI 邮件自动化当成一个开关。先从窄邮箱、窄 accepted conditions 和保守规则开始。审过真实历史后，再逐步扩大范围。

## 当前 v1 限制

这个项目很实用，但不是魔法。

- v1 使用 password-authenticated IMAP/IMAPS 和 SMTP/SMTPS。
- OAuth2 不在 v1 范围内。
- Secrets 存在本地 YAML config 里，所以本地文件管理很重要。
- worker 依赖 IMAP `UNSEEN` 和把已处理邮件标记为 `Seen`。
- AI 负责起草决策，但应用负责校验、收件人、线程、转发和发送。

最后一点最重要。你希望模型理解语言和上下文，但不应该让它无限制地控制你的邮箱。

## 下一步

阅读并收藏项目：[github.com/markhuangai/ai-memmail](https://github.com/markhuangai/ai-memmail)。

如果你想直接体验在线演示，可以给 <contact@markhuang.ai> 发送一封关于 Dense-Mem 或 ai-memmail 的问题邮件。

如果你还不熟悉 Dense-Mem，先把 Dense-Mem 跑起来：

- [Dense-Mem 快速开始：让 Claude Code 和 Codex 使用同一份记忆](/blog/dense-mem-personal-server-claude-code-codex)
- [用 Traefik 在 Vultr 上安全部署 Dense-Mem](/blog/secure-dense-mem-vultr-traefik)

长期来看，这个模式不只适用于邮件。Dense-Mem 是业务知识层，ai-memmail 是它上面的一种智能体接口。你不需要从零训练每一个自动化流程，而是维护同一层记忆，再让边界清晰的智能体安全使用它。
