Skip to main content

CUHKSZ MCP Email Server

一个基于模型上下文协议 (MCP) 的电子邮件收发服务,能够让语言模型安全、可靠地发送邮件及处理附件,用于CUHKSZ的Manus项目。

📋 目录

✨ 项目描述

本项目实现了一个基于模型上下文协议 (MCP) 的电子邮件服务。它为语言模型提供了一套标准化的工具,使其能够代表用户执行邮件相关的任务,如撰写和发送邮件、添加附件,以及在指定的目录中搜索文件作为附件。通过将邮件功能封装为安全的 MCP 工具,可以有效避免直接在语言模型中暴露用户的敏感凭证(如邮箱密码或授权码)。

🛠️ 可用工具

本服务提供了两个核心工具,用于处理邮件的发送和附件的搜索。


1. send_email

发送一封电子邮件。您可以指定单个或多个收件人、主题、正文,并附上一个或多个附件。

  • 参数说明:

    • receiver (list[str]): 必须。收件人的电子邮件地址列表。
    • subject (string): 必须。邮件的主题。
    • body (string): 必须。邮件的正文内容。
    • attachments (list[str]): 可选。要附加的文件名列表。
      • 注意: 文件必须存在于服务启动时通过 --dir 参数指定的附件目录中。
  • 返回示例:

    Email to recipient@example.com sent successfully from your-email@example.com
    

2. search_attachments

在服务配置的附件目录中,根据提供的关键词搜索匹配的文件。

  • 参数说明:

    • pattern (string): 必须。用于在文件名中搜索的文本关键词,搜索不区分大小写。
  • 返回示例:

    Search results for 'test_attachment':
    /app/attachments/test_attachment.txt
    

🚀 安装与部署

本服务支持 Docker 部署和本地运行两种方式。

1. 使用 Docker (推荐)

此方法最简单、最可靠,推荐用于生产和日常使用。

a. 环境准备

b. 配置凭证

在项目根目录创建一个 .env 文件,并填入您的邮箱凭证。

# .env 文件内容
# 发件人的完整邮箱地址
EMAIL_USERNAME=your-email@example.com
# 邮箱的密码或授权码 (强烈推荐使用授权码)
EMAIL_PASSWORD=your_password_or_app_password 

⚠️ 安全提醒:

  • 请勿.env 文件提交到任何版本控制系统(如 Git)。
  • 对于 QQ 邮箱、Gmail 等服务,您必须使用生成的授权码 (App Password),而不是您的账户登录密码。

c. 构建和启动服务

在项目根目录下运行以下命令:

# 构建并以守护进程模式启动容器
docker-compose up --build -d

# 查看实时日志
docker-compose logs -f mcp-email-server

# 停止服务
docker-compose down

服务启动后,将在 http://localhost:3002 上提供 MCP 接口。

2. 本地运行 (用于开发)

a. 环境准备

克隆项目后,创建并激活 Python 虚拟环境,然后安装依赖:

# 创建虚拟环境
python3 -m venv .venv
# 激活虚拟环境 (macOS/Linux)
source .venv/bin/activate
# 激活虚拟环境 (Windows)
# .venv\Scripts\activate

# 安装依赖
pip install -r src/mcp_server_email_cuhksz/requirements.txt

b. 配置凭证

您可以选择创建 .env 文件(推荐)或在启动时使用命令行参数来提供凭证。

c. 启动服务

  • 使用 .env 文件 (推荐):

    # 使用 stdio 传输 (用于直接的进程间通信)
    python -m mcp_server_email_cuhksz --dir /path/to/your/attachments
    
    # 使用 sse 传输 (用于网络访问和测试脚本)
    python -m mcp_server_email_cuhksz --transport sse --dir /path/to/your/attachments
    
  • 使用命令行参数:

    python -m mcp_server_email_cuhksz --transport sse --username your-email@example.com --password your_password --dir /path/to/your/attachments
    

当使用 sse 模式启动后,服务将在 http://localhost:3002 上提供 MCP 接口。

🧪 测试说明

项目提供了一个测试脚本,用于验证服务是否正常运行。

  1. 启动服务: 请确保已通过 docker-compose up --build 成功启动了服务。

  2. 安装测试依赖:

    pip install -r test/requirements.txt
    
  3. 运行测试脚本:

    python -m test.test
    

    该脚本会连接到在 Docker 中运行的服务,并尝试发送一封带有附件的测试邮件。

🏗️ 项目架构

  • src/mcp_server_email_cuhksz/: 包含所有核心应用代码。
    • __main__.py: 程序的入口点,负责解析命令行参数、加载环境变量和启动服务。
    • mcp_email.py: 定义了 send_emailsearch_attachments 两个 MCP 工具,并包含了实现其功能的后端逻辑。
    • email.json: 一个关键的配置文件,包含了不同邮件服务提供商 (如 QQ, Gmail, Office 365) 的 SMTP 服务器地址和端口信息。
  • test/:
    • test.py: 一个客户端测试脚本,用于验证邮件服务的核心功能。
    • requirements.txt: 运行测试脚本所需的依赖。
  • attachments/: 一个示例目录,用于存放邮件附件。
  • Dockerfile: 用于构建服务 Docker 镜像的配置文件。
  • docker-compose.yml: 用于编排和管理 Docker 容器的配置文件。
  • .env: 用于存放敏感信息(如邮箱用户名和密码/授权码)的环境变量文件。

🧠 实现方式与核心逻辑

  • 动态 SMTP 配置: 服务通过 get_smtp_info 函数,根据发件人邮箱的域名 (@qq.com, @link.cuhk.edu.cn 等) 在 email.json 中查找对应的 SMTP 服务器和端口。这种设计使其易于扩展,以支持新的邮件服务提供商。
  • 异步中的同步处理: 邮件的发送是使用 Python 内置的、同步的 smtplib 库完成的。为了避免这个阻塞操作卡住 FastMCP 的异步事件循环,send_email_logic 函数被包裹在 asyncio.to_thread 中运行,使其在一个独立的线程中执行。
  • 优雅的连接关闭: 考虑到一些邮件服务器(如 QQ 邮箱)在邮件发送成功后可能会立即关闭连接,导致客户端在尝试发送 QUIT 命令时出错,程序在 finally 块中对 server.quit() 进行了特殊的异常处理,主动忽略此处的连接错误,从而确保即使服务器“提前挂断”,程序也不会崩溃。

🔧 故障排除

  • ConnectionError: Server disconnected unexpectedlyTimeoutError:

    • 这通常是邮件服务商的安全策略导致的。
    • 检查授权码: 确认您在 .env 中使用的是授权码 (App Password) 而不是登录密码。
    • 检查MFA: 如果您的账户(尤其是 Office 365)开启了多因素认证 (MFA),您很可能需要生成并使用“应用密码”。
    • 网络问题: 确认您的服务器或本地机器可以访问外部邮件服务器。
  • SMTPAuthenticationError:

    • 凭证错误。请仔细检查 .env 文件中的 EMAIL_USERNAMEEMAIL_PASSWORD 是否完全正确。
  • ValueError: ... is not a supported email service:

    • 您使用的邮箱域名在 email.json 中没有对应的配置。请参照该文件中的格式,添加一个新的配置项。

📄 许可证与致谢

本项目采用 MIT 许可证

本项目的实现方式,极大地参考了 mcp-email-client 项目。在此向原作者 Shy2593666979 表示衷心的感谢,其优秀的设计为本项目提供了宝贵的灵感和参考。

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_server_email_cuhksz-0.1.4.tar.gz (16.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_server_email_cuhksz-0.1.4-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file mcp_server_email_cuhksz-0.1.4.tar.gz.

File metadata

  • Download URL: mcp_server_email_cuhksz-0.1.4.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mcp_server_email_cuhksz-0.1.4.tar.gz
Algorithm Hash digest
SHA256 99f84fef30ee7c9b7881910b1d48b25b7b90012b3cf6d0da6b92047ec3c67618
MD5 74f755127ef8db22051b5b09f08d5c27
BLAKE2b-256 f53576b20c2131abb8aa7fd80625baf41e65e89b94fbfbdb9ee23aa1bc6be06b

See more details on using hashes here.

File details

Details for the file mcp_server_email_cuhksz-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_server_email_cuhksz-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 f49a484d93be7d1fd55830d4341696c5e76feff42af1019d6a96d0e5ca223832
MD5 50956a833ca1a63e137109a4ee9e1fe4
BLAKE2b-256 e040990f05cefe86437306d5ef38086ff80573c9a5f24cdd96af35156c0ec598

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page