邮件smtp-mcp-rs
mail-smtp-mcp-rs 是一个在stdio上运行的安全SMTP模型上下文协议(MCP)服务器。 它提供了一个专注的工具界面,用于列出配置的SMTP帐户和发送受策略限制的电子邮件。
特性
- SMTP聚焦MCP表面:两个工具,
smtp_list_accounts和smtp_send_message - 默认情况下,发送门是安全的:实时发送被阻止,除非
MAIL_SMTP_SEND_ENABLED=true - 政策执行:收件人分配列表和可配置的收件人、邮件大小、正文大小和附件限制
- 输入硬化:严格的电子邮件验证、CR/LF头注入检查、严格的base64解码和安全附件文件名检查
- 结构化响应:信封与
summary,data,和执行meta - 多账户支持:发现和路由
MAIL_SMTP__*环境部分 - Rust+tokio运行时:异步MCP服务器实现
rmcp
安装
选择一种受支持的安装方法。
支持的发布工件:
- macOS:
aarch64-apple-darwin,x86_64-apple-darwin - Linux:
x86_64-unknown-linux-gnu,x86_64-unknown-linux-musl - 窗户:
x86_64-pc-windows-msvc
Linux musl支持包括 x86_64 Alpine等系统。不支持Linux ARM64 npm安装。
NPX(推荐)
npx -y @bradsjm/mail-smtp-mcp-rs@latest或全局安装:
npm install -g @bradsjm/mail-smtp-mcp-rs
mail-smtp-mcp-rsCurl安装程序(Linux/macOS)
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/bradsjm/mail-smtp-mcp-rs/releases/download/v0.1.0/mail-smtp-mcp-rs-installer.sh | sh更安全的替代方案(下载、检查,然后运行):
curl --proto '=https' --tlsv1.2 -LsSf -o mail-smtp-mcp-rs-installer.sh https://github.com/bradsjm/mail-smtp-mcp-rs/releases/download/v0.1.0/mail-smtp-mcp-rs-installer.sh
sh mail-smtp-mcp-rs-installer.sh码头工人
从GHCR中拉出并运行:
docker pull ghcr.io/bradsjm/mail-smtp-mcp-rs:latest
docker run --rm -i --env-file .env ghcr.io/bradsjm/mail-smtp-mcp-rs:latest本地构建:
docker build -t mail-smtp-mcp-rs .
docker run --rm -i --env-file .env mail-smtp-mcp-rs来源
cargo install --path .二进制路径: ~/.cargo/bin/mail-smtp-mcp-rs.
快速开始
1) 配置帐户和策略环境变量
启动时至少需要一个SMTP帐户部分。
# Required account section
MAIL_SMTP_DEFAULT_HOST=smtp.example.com
MAIL_SMTP_DEFAULT_USER=your-user
MAIL_SMTP_DEFAULT_PASS=your-app-password
# Optional account fields
MAIL_SMTP_DEFAULT_PORT=587
MAIL_SMTP_DEFAULT_SECURE=false
MAIL_SMTP_DEFAULT_FROM=noreply@example.com
# Global policy
MAIL_SMTP_SEND_ENABLED=false
MAIL_SMTP_ALLOWLIST_DOMAINS=
MAIL_SMTP_ALLOWLIST_ADDRESSES=
MAIL_SMTP_MAX_RECIPIENTS=10
MAIL_SMTP_MAX_MESSAGE_BYTES=2500000
MAIL_SMTP_MAX_ATTACHMENTS=5
MAIL_SMTP_MAX_ATTACHMENT_BYTES=2000000
MAIL_SMTP_MAX_TEXT_CHARS=20000
MAIL_SMTP_MAX_HTML_CHARS=50000
MAIL_SMTP_CONNECT_TIMEOUT_MS=10000
MAIL_SMTP_SOCKET_TIMEOUT_MS=20000在您的提供商要求的地方使用应用程序密码或服务凭据。
2) 将服务器连接到MCP客户端
MCP配置示例:
{
"mcpServers": {
"mail-smtp": {
"command": "npx",
"args": ["-y", "@bradsjm/mail-smtp-mcp-rs@latest"],
"env": {
"MAIL_SMTP_DEFAULT_HOST": "smtp.example.com",
"MAIL_SMTP_DEFAULT_USER": "your-user",
"MAIL_SMTP_DEFAULT_PASS": "your-app-password",
"MAIL_SMTP_DEFAULT_FROM": "noreply@example.com",
"MAIL_SMTP_SEND_ENABLED": "false"
}
}
}
}3) 仅在准备就绪时启用发送
默认情况下,实时交付被故意禁用:
MAIL_SMTP_SEND_ENABLED=true多个帐户
从以下位置发现帐户ID MAIL_SMTP__... 按键并标准化为小写。
# Default account
MAIL_SMTP_DEFAULT_HOST=smtp.gmail.com
MAIL_SMTP_DEFAULT_USER=user@gmail.com
MAIL_SMTP_DEFAULT_PASS=app-password
# Work account
MAIL_SMTP_WORK_HOST=smtp.office365.com
MAIL_SMTP_WORK_USER=user@company.com
MAIL_SMTP_WORK_PASS=work-password
MAIL_SMTP_WORK_SECURE=true
MAIL_SMTP_WORK_PORT=465工具参考
所有工具都返回一个共同的信封:
{
"summary": "Human-readable outcome",
"data": {},
"meta": {
"now_utc": "2026-03-01T12:34:56Z",
"duration_ms": 42
}
}| 工具 | 目的 |
|---|---|
smtp_list_accounts | 列出已配置的帐户元数据(account_id、主机、端口、安全、可选默认发件人) |
smtp_send_message | 验证并发送一条消息,可选 cc, bcc, reply_to, html_body,以及附件 |
有关完整的架构级别详细信息和验证规则,请参阅 docs/tool-controll.md.
消息和策略限制
硬安全帽在规范中强制执行:
- 最多收件人数:50
- 最大附件数:10
- 每个附件的最大字节数:5000000
- 最大文本字符数:100000
- 最大HTML字符数:200000
- 主题长度:1..=256个字符
策略上限可由env配置,并且可能比硬上限更严格。
故障排除
启动失败,缺少配置
服务器需要至少一个完整的帐户(HOST, USER, PASS).
发送已禁用
如果 smtp_send_message 返回一个发送禁用错误,set:
MAIL_SMTP_SEND_ENABLED=true帐户查找失败
account_id 匹配不区分大小写,并标准化为小写。验证帐户部分是否存在并包含所需的密钥。
SMTP连接或发送失败
检查主机/端口/安全设置、凭据和网络可达性。调音:
MAIL_SMTP_CONNECT_TIMEOUT_MSMAIL_SMTP_SOCKET_TIMEOUT_MS
npm安装或npx在不受支持的平台上失败
已发布的npm包仅支持上面列出的发布工件。常见的不受支持的情况包括Linux ARM64和Windows ARM64。
在Linux上 x86_64,支持glibc和musl环境。对于其他平台,如果需要在已发布的npm矩阵之外运行服务器,请使用Docker或从源代码安装。
安全说明
- 工具响应中不会返回机密。
- 密码值在帮助诊断中被编辑。
- 收件人策略执行支持域和精确地址分配列表。
- 附件处理验证文件名安全性、内容类型解析和严格的base64输入。
发展
贡献者指导和验证流程记录在 AGENTS.md.
cargo fmt -- --check
cargo clippy --all-targets -- -D warnings
cargo test可选SMTP集成冒烟测试:
scripts/test-greenmail.sh直接运行GreenMail集成测试(需要运行GreenMail端点):
cargo test --test smtp_greenmail -- --ignored --nocapture许可证
MIT许可证。看 许可证.
