You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python在Microsoft Graph API中添加投票选项

用Python发送带批准/拒绝投票选项的Outlook邮件

准备工作

  • 安装依赖包:
    pip install msgraph-core azure-identity
    
  • 在Azure AD注册应用,配置以下信息:
    • 获取租户ID、客户端ID、客户端密钥(应用权限场景)
    • 添加Mail.Send权限(应用权限需管理员同意,委派权限可由用户自行授权)

代码实现

场景1:后台服务(应用权限)

适合无需用户交互的自动化场景,需指定发送邮件的用户邮箱/ID:

from azure.identity import ClientSecretCredential
from msgraph.core import GraphClient

# 替换为你的Azure应用信息和发送方邮箱
TENANT_ID = "your-tenant-id"
CLIENT_ID = "your-client-id"
CLIENT_SECRET = "your-client-secret"
SENDER_EMAIL = "sender@contoso.com"

# 初始化认证与Graph客户端
credential = ClientSecretCredential(
    tenant_id=TENANT_ID,
    client_id=CLIENT_ID,
    client_secret=CLIENT_SECRET
)
client = GraphClient(credential=credential, scopes=["https://graph.microsoft.com/.default"])

# 构造带投票选项的邮件
email_content = {
    "subject": "审批申请:项目A上线",
    "body": {
        "contentType": "Text",
        "content": "请审批项目A上线申请,选择对应投票选项即可。"
    },
    "toRecipients": [
        {
            "emailAddress": {
                "address": "approver@contoso.com"
            }
        }
    ],
    # 设置投票选项
    "votingOptions": ["批准", "拒绝"],
    "isVoteRequested": True,
    # 可选:开启已读回执
    "isReadReceiptRequested": True
}

# 发送邮件
response = client.post(
    f"/users/{SENDER_EMAIL}/sendMail",
    json={"message": email_content, "saveToSentItems": True}
)

# 验证发送结果
if response.status_code == 202:
    print("带投票选项的邮件发送成功")
else:
    print(f"发送失败:状态码{response.status_code},详情{response.json()}")

场景2:用户交互模式(委派权限)

适合需要用户手动登录授权的场景:

from azure.identity import DeviceCodeCredential
from msgraph.core import GraphClient

# 替换为你的Azure应用信息
TENANT_ID = "your-tenant-id"
CLIENT_ID = "your-client-id"

# 初始化设备码认证(需用户在浏览器中输入验证码登录)
credential = DeviceCodeCredential(tenant_id=TENANT_ID, client_id=CLIENT_ID)
client = GraphClient(credential=credential, scopes=["Mail.Send"])

# 构造邮件(同场景1)
email_content = {
    "subject": "审批申请:项目A上线",
    "body": {
        "contentType": "Text",
        "content": "请审批项目A上线申请,选择对应投票选项即可。"
    },
    "toRecipients": [
        {
            "emailAddress": {
                "address": "approver@contoso.com"
            }
        }
    ],
    "votingOptions": ["批准", "拒绝"],
    "isVoteRequested": True
}

# 发送邮件(使用/me代表当前登录用户)
response = client.post(
    "/me/sendMail",
    json={"message": email_content, "saveToSentItems": True}
)

if response.status_code == 202:
    print("邮件发送成功")
else:
    print(f"发送失败:{response.json()}")

注意事项

  • 投票功能仅在Outlook客户端(网页版、桌面版)中可见,其他邮箱客户端可能不支持
  • votingOptions可自定义选项,比如扩展为["批准", "拒绝", "待定"]
  • 应用权限场景下,必须确保已获得管理员对Mail.Send权限的同意
  • saveToSentItems参数设为True会将邮件保存到发件箱,可根据需求调整为False

内容的提问来源于stack exchange,提问作者Sai Krishna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 12:18:55