Outlook邮件发送服务

通过Microsoft Graph API发送Outlook邮件的MCP服务器,支持多租户配置和个人/组织账户两种认证方式。

  • by jayozer
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 jayozer/agentbuilder-outlook-mcp

使用说明

Agentbuilder Outlook MCP 服务器

通过Microsoft Graph发送Outlook邮件的FastMCP服务器。此项目之所以存在,是因为Agent Builder的Outlook连接器不提供发送电子邮件的功能;MCP服务器通过提供一个单一的接口来填补这一缺失工具 send_outlook_mail 入口点,用于验证有效载荷、获取访问令牌并调用Graph(图API) sendMail 终端节点。

先决条件

  • Python 3.10及以上版本
  • 带有Microsoft Outlook/Graph账户的 Mail.Send 权限(委托令牌或应用程序注册)
  • uv (推荐)或 pip

安装

uv pip install .

环境变量

设置以下内容为 .env (从...创建 .env.example):

  • GRAPH_USER_ACCESS_TOKEN – 可选的委托承载令牌(例如,来自 Graph Explorer),用于快速测试。
  • GRAPH_DEFAULT_SENDER – 发件邮箱,例如。, user@outlook.com。
  • GRAPH_TENANT_ID, GRAPH_CLIENT_ID, GRAPH_CLIENT_SECRET – 仅在应用仅凭客户端凭据授权流程中需要。

在运行之前加载它们:

set -a; source .env; set +a

本地使用

模拟运行(未发送邮件):

python3 - <<'PY'
from server import send_outlook_mail_impl

result = send_outlook_mail_impl(
    subject="Dry Run",
    body="Payload preview only.",
    to=["recipient@example.com"],
    dry_run=True,
)
print(result)
PY

发送实时消息(dry_run=False) 一旦配置确认无误。为了让客户端访问MCP工具:

fastmcp run server.py

远程部署

该服务器已部署在FastMCP上 https://agentbuilder-outlook-mcp.fastmcp.app/mcp使用此URL连接您的MCP兼容客户端(如Claude Desktop、Cursor等)。

在连接到远程服务器之前进行本地验证:

fastmcp run server.py

多租户配置

这台服务器支持 多租户使用 当调用时,每个用户需提供自己的Microsoft凭据 send_outlook_mail 工具。服务器本身不存储任何凭据——所有身份验证都是在每次请求时进行的。

两种认证方法

MCP服务器通过两种不同的身份验证流程,支持个人微软账户和组织账户:

方法1:个人Microsoft账户(@outlook.com、@hotmail.com、@live.com)

最适合用于: 个人用户、测试、个人电子邮件自动化

认证: 带有用户登录的委托权限

设置步骤:

  1. 首选 Microsoft Graph 探索器
  2. 使用您的个人微软帐户登录
  3. 运行任何查询(例如,GET /me)
  4. 格兰特 Mail.Send 当被提示时给予许可
  5. 点击 “访问令牌” 按制表键并复制令牌
  6. 在您的MCP客户端中使用该令牌:
send_outlook_mail(
    subject="Test Email",
    body="Hello from my personal account!",
    to=["recipient@example.com"],
    access_token="EwBIBMl6BAAU...",  # Your Graph Explorer token
    sender="your.personal@outlook.com"
)

令牌格式: 非JWT专有格式(以...开头 EwB...,没有点) 到期日: 约1小时(需手动刷新) 权限: 委托(以已登录用户的身份操作)

注: 个人帐户令牌使用微软专有的加密格式。这是正常的,并且与Graph API正常工作,尽管它们不是标准的JWT。


方法2:组织帐户(Microsoft 365 / Azure AD)

最适合用于: 生产应用、服务账户、自动化工作流

认证: 客户端凭据(仅限应用,无需用户登录)

先决条件:

  • 带有 Microsoft 365 的 Azure AD 租户
  • Exchange Online邮箱已配置
  • Azure AD 应用注册

设置步骤: 看 AZURE_SETUP.md 翻译为中文是:“AZURE 设置指南.md” 或 “AZURE 配置说明.md”(具体翻译可能根据上下文有所调整,但基本意思是指向一个关于 Azure 设置或配置的 Markdown 文件) 以获取详细说明

快速概要:

  1. 创建Azure AD应用程序注册
  2. 添加 Mail.Send 应用程序权限
  3. 授予管理员同意
  4. 创建客户端密钥
  5. 在您的MCP客户端中使用凭据:
send_outlook_mail(
    subject="Automated Email",
    body="Sent via client credentials",
    to=["recipient@example.com"],
    tenant_id="your-tenant-id",
    client_id="your-client-id",
    client_secret="your-client-secret",
    sender="user@company.com"  # Must be valid organizational mailbox
)

令牌格式: 标准JWT(以...开头 eyJ...(由点分隔的)有3个部分 过期日期: 由服务器自动刷新 权限: 应用程序(应用独立运行,不作为用户)


对比表

功能 个人账户 组织账户
账户类型 @outlook.com, @hotmail.com, @live.com @company.com(Microsoft 365)
认证 授权(用户登录) 应用程序(客户端凭据)
代币来源 图形资源管理器 Azure AD 应用注册
令牌格式 专有(EwB...) JWT ( 翻译为中文是:)
代币有效期 1小时 自动续期
最适合/最适用于 测试,个人使用 生产,自动化
成本 免费 需要M365许可证(约6美元/月)
设置复杂性 简单(2分钟) 中等(15分钟)

单租户回退(可选)

为了向后兼容,如果未提供任何凭据参数,服务器将回退到使用环境变量:

  • GRAPH_TENANT_ID
  • GRAPH_CLIENT_ID
  • GRAPH_CLIENT_SECRET
  • GRAPH_DEFAULT_SENDER
  • GRAPH_USER_ACCESS_TOKEN

这允许运行一个单租户服务器,其中所有用户共享同一个Outlook账户。 不建议用于多租户部署。

测试

uv pip install .[dev]
pytest

单元测试涵盖了令牌获取和有效载荷构建。

部署说明

  • fastmcp.json 被配置为 fastmcp run 以及FastMCP云。
  • 目标平台上的机密信息应通过环境变量提供。
  • 看 todo.md 对于剩余任务和部署检查清单。