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

如何通过Azure Function向Azure Service Principal发送电子邮件?

针对Graph API操作Azure服务主体邮件需求的实现方案

核心前提:Azure Service Principal(服务主体)是Azure AD中的身份授权实体,本身未绑定Exchange Online邮箱资源,不存在直接向服务主体自身发送邮件的能力。以下是两种常见对应需求的实现方案:

场景1:使用服务主体身份调用Graph API发送邮件

  • 前置配置:为服务主体授予Graph API的应用权限Mail.Send,并完成管理员同意

Python 实现示例代码:

from azure.identity import DefaultAzureCredential
import requests

# 基础参数配置
TENANT_ID = "你的Azure AD租户ID"
CLIENT_ID = "服务主体的客户端ID"
CLIENT_SECRET = "服务主体的客户端密钥"
# 发件人需替换为租户内已激活Exchange服务的有效邮箱地址/ID
SEND_ENDPOINT = "https://graph.microsoft.com/v1.0/users/{发件人邮箱地址}/sendMail"

# 获取Graph API访问令牌
credential = DefaultAzureCredential(
    tenant_id=TENANT_ID,
    client_id=CLIENT_ID,
    client_secret=CLIENT_SECRET
)
access_token = credential.get_token("https://graph.microsoft.com/.default").token

# 构造邮件内容
mail_params = {
    "message": {
        "subject": "服务主体调用Graph API发送的测试邮件",
        "body": {
            "contentType": "Text",
            "content": "测试邮件内容"
        },
        "toRecipients": [
            {
                "emailAddress": {
                    "address": "收件人邮箱地址"
                }
            }
        ]
    },
    "saveToSentItems": "false"
}

# 发起发信请求
headers = {
    "Authorization": f"Bearer {access_token}",
    "Content-Type": "application/json"
}
resp = requests.post(SEND_ENDPOINT, headers=headers, json=mail_params)
if resp.status_code == 202:
    print("邮件发送成功")
else:
    print(f"发送失败,错误码:{resp.status_code},错误信息:{resp.text}")

场景2:给服务主体关联的通知联系人发邮件

如果你的需求是向服务主体的所有者、绑定的通知联系人推送邮件,可以先调用Graph API查询服务主体的关联通知邮箱,再复用场景1的发信逻辑发送。
查询服务主体通知邮箱的请求示例:

GET https://graph.microsoft.com/v1.0/servicePrincipals/{服务主体Object ID}?$select=notificationEmailAddresses,owners

返回结果中notificationEmailAddresses字段即为该服务主体预先配置的通知邮箱列表。

注意事项

  • 所有应用级Graph权限必须由租户管理员完成权限同意后才可生效
  • 若需要将发送的邮件保存到发件箱的已发送项目中,可将发信请求参数的saveToSentItems字段设置为true
  • 服务主体的客户端密钥、租户ID等敏感信息禁止硬编码在业务代码中,建议通过Azure Key Vault等加密托管服务读取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:15:03