如何使用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
相关产品推荐
相关产品推荐

