Skip to main content

A secure email MCP server built with FastMCP

Project description

sendmail-mcp

基于 FastMCP 3 的邮件 MCP 服务,支持将发件人固定绑定在环境变量(MAIL_FROM)并通过 SMTP 发送邮件。

功能特性

  • 支持 mail_preflightmail_sendmail_send_batch
  • 支持定时发送与取消任务
  • 支持失败重试(mail_retry_failed
  • 支持模板管理(template_upserttemplate_list
  • 支持审计日志查询(audit_query
  • 发件人邮箱固定来自环境变量,不接受工具入参覆盖
  • 内置白名单、限流、附件路径与大小限制
  • 使用 SQLite 持久化任务、收件人、事件与模板

运行要求

  • Python 3.11+

安装与配置

pip install -e .
copy .env.example .env

然后编辑 .env,填入真实 SMTP 凭据与白名单配置。

最小必填环境变量:

  • SMTP_HOST
  • SMTP_USERNAME
  • SMTP_PASSWORD
  • ALLOWED_RECIPIENT_DOMAINSALLOWED_RECIPIENTS(至少一个)

简化规则:

  • MAIL_FROM 可不填,默认使用 SMTP_USERNAME
  • SMTP_USE_SSL / SMTP_USE_STARTTLS 可不填,按端口自动推断

SMTP 连接模式说明:

  • SMTP_USE_SSL=true:使用隐式 SSL(常见端口 465
  • SMTP_USE_STARTTLS=true:使用 STARTTLS(常见端口 587
  • 两者不能同时为 true

发布到 PyPI(用于 uvx 直接运行)

1. 构建发布包

uv build

构建产物在 dist/ 目录下(*.whl*.tar.gz)。

2. 可选:先发布到 TestPyPI 验证

set UV_PUBLISH_TOKEN=pypi-xxxx
uv publish --publish-url https://test.pypi.org/legacy/ --check-url https://test.pypi.org/simple/

3. 发布到正式 PyPI

set UV_PUBLISH_TOKEN=pypi-xxxx
uv publish

说明:

  • 每次重新发布都需要先修改 pyproject.toml 里的 version
  • 建议先在 TestPyPI 做一次安装与启动验证,再发正式库

用 uvx 运行

方式一:从 PyPI 直接运行(推荐)

uvx --from sendmail-mcp sendmail-mcp stdio

或简写:

uvx sendmail-mcp stdio

方式二:本地源码目录运行(发布前联调)

uvx --from . sendmail-mcp stdio

HTTP 模式示例

uvx --from sendmail-mcp sendmail-mcp http --host 127.0.0.1 --port 8000 --path /mcp

在 MCP 客户端(如 Cherry Studio)中配置 stdio

  • 命令:uvx
  • 参数(每行一个):
    • --from
    • sendmail-mcp
    • sendmail-mcp
    • stdio
  • 环境变量:至少配置 SMTP_HOSTSMTP_USERNAMESMTP_PASSWORDALLOWED_RECIPIENT_DOMAINSALLOWED_RECIPIENTS

启动方式

stdio 传输(本地 MCP 客户端)

sendmail-mcp stdio

Streamable HTTP 传输

sendmail-mcp http --host 127.0.0.1 --port 8000 --path /mcp

工具协议说明

主要入参/出参模型见:src/sendmail_mcp/schemas.py

核心工具列表:

  • mail_preflight
  • mail_send
  • mail_send_batch
  • mail_cancel_scheduled
  • mail_get_job
  • mail_list_jobs
  • mail_retry_failed
  • template_upsert
  • template_list
  • audit_query

模板标识策略:

  • template_id:稳定主键,便于程序引用与版本演进
  • template_name:业务展示名,便于 AI 与人工理解
  • 发送类工具支持通过 template_idtemplate_name 引用模板(二选一)

安全默认策略

  • 发件人仅来自 MAIL_FROM
  • 必须配置收件人白名单(ALLOWED_RECIPIENT_DOMAINSALLOWED_RECIPIENTS
  • 全局发送限速(RATE_LIMIT_EMAILS_PER_MIN
  • 附件路径沙箱与大小限制(ATTACHMENT_BASE_DIRMAX_ATTACHMENT_MB

服务代码结构

  • src/sendmail_mcp/service.py:生命周期编排与方法路由
  • src/sendmail_mcp/services/submission.py:预检、单发、批量提交流程
  • src/sendmail_mcp/services/operations.py:查询、取消、重试、模板、审计操作
  • src/sendmail_mcp/services/worker.py:队列调度与 SMTP 投递工作线程
  • src/sendmail_mcp/services/common.py:共享辅助函数与错误分类

Project details


Download files

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

Source Distribution

sendmail_mcp-0.1.0.tar.gz (27.1 kB view details)

Uploaded Source

Built Distribution

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

sendmail_mcp-0.1.0-py3-none-any.whl (30.4 kB view details)

Uploaded Python 3

File details

Details for the file sendmail_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: sendmail_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 27.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for sendmail_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 54e3f6ce6efe5795c971e6bb668218f13a3f6b46bdba0b9141ae57f3794247fc
MD5 a296b73d98179ff1318ca72c73920254
BLAKE2b-256 ed454c5df52449ab34c559d80be8b7d4adb08f1223546f4216fe0962e9ef1e14

See more details on using hashes here.

File details

Details for the file sendmail_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: sendmail_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 30.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for sendmail_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 25bdb68130bf82206b99e35bcbd31737ee13f277ee120a2ee4c393c0c97478bf
MD5 8caf638649e7ec2f4e25af46c8d4b253
BLAKE2b-256 70d1e130ef4e8ad04965fa2c719af0fddab3db7f842d647b643600a21fc0a41c

See more details on using hashes here.

Supported by

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