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

如何通过PowerShell调用O365 API读取邮件并筛选指定主题?

解析Graph API邮件响应并筛选指定邮件的方法

首先先修正你现有代码里的拼写/语法错误,这些错误会导致脚本运行失败:

  • cliendid → ClientId(MSAL参数名区分大小写)
  • tenantid → TenantId
  • clientsecret 行语法错误,正确写法是用ConvertTo-SecureString将明文密钥转为安全字符串
  • accestoken → AccessToken(属性名拼写错误)
  • responce → response(变量名拼写)
  • ConectType → ContentType
  • Autorization → Authorization(请求头拼写错误)

修正后的基础代码:

$connectionString = @{
    ClientId     = "你的客户端ID"
    TenantId     = "你的租户ID"
    ClientSecret = "你的客户端密钥" | ConvertTo-SecureString -AsPlainText -Force
}

$token = Get-MsalToken @connectionString
$accessToken = $token.AccessToken

$mailUser = "目标邮箱地址"
$graphApiUri = "https://graph.microsoft.com/v1.0/users/$mailUser/mailfolders/Inbox/messages"

# 请求邮件数据,指定获取主题、正文、发件人等必要字段(减少返回数据量)
$response = Invoke-RestMethod -Method Get -Uri $graphApiUri -ContentType "application/json" -Headers @{Authorization=("Bearer {0}" -f $accessToken)}

筛选指定主题和内容的邮件

Invoke-RestMethod会自动将JSON响应转为PowerShell对象,你可以直接通过属性访问邮件数据,用Where-Object进行筛选:

示例:筛选主题包含「审批通知」且正文包含「报销申请」的邮件

# 定义筛选条件
$targetSubjectKeyword = "审批通知"
$targetContentKeyword = "报销申请"

# 从响应的value数组中筛选符合条件的邮件
$filteredMails = $response.value | Where-Object {
    $_.subject -match $targetSubjectKeyword -and $_.body.content -match $targetContentKeyword
}

说明:

  • $response.value是Graph API返回的邮件列表数组
  • -match是模糊匹配(支持正则),如果需要精确匹配,用-eq
  • $_.subject是邮件主题属性,$_.body.content是邮件正文内容(注意正文可能是HTML格式,若要筛选纯文本,可先判断$_.body.contentType后再处理)

打印筛选结果日志

直接遍历筛选后的邮件,输出关键信息即可:

# 打印日志
if ($filteredMails.Count -gt 0) {
    Write-Host "找到符合条件的邮件 $($filteredMails.Count) 封:" -ForegroundColor Green
    foreach ($mail in $filteredMails) {
        Write-Host "================================"
        Write-Host "主题:$($mail.subject)"
        Write-Host "发件人:$($mail.sender.emailAddress.name) <$($mail.sender.emailAddress.address)>"
        Write-Host "接收时间:$($mail.receivedDateTime)"
        Write-Host "正文摘要:$($mail.body.content | Select-String -Pattern '[\w\s]{1,100}' -AllMatches | Select-Object -First 1 -ExpandProperty Matches | Select-Object -ExpandProperty Value)..."
    }
} else {
    Write-Host "未找到符合条件的邮件" -ForegroundColor Yellow
}

说明:

  • 正文摘要用正则截取前100字符,避免输出过长的HTML内容
  • 用Write-Host配合颜色区分日志级别,方便查看

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:45:32