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

Graph API获取邮件收件人地址:PowerShell脚本问题排查

解决PowerShell提取Graph API邮件toRecipients字段的问题

问题根源

你脚本里的$EmailResponse = $EmailResponseFirst.value | Out-String是核心错误——Invoke-RestMethod返回的$EmailResponseFirst.value是邮件对象数组,用Out-String会把它转成纯文本字符串,后续foreach ($Email in $EmailResponse)遍历的是字符串的每个字符,根本不是邮件对象,自然取不到toRecipients属性,也就没输出。

修正后的代码

直接保留对象数组,不要转成字符串,然后正确遍历收件人:

$EmailQuery = "$GraphURI/users/myemail@example.com/mailboxFolders/MyFolder/messages"
$EmailResponseFirst = Invoke-RestMethod -Method Get -Uri $EmailQuery -Headers @{Authorization = "Bearer $AccessToken"} -ContentType "application/json"
# 直接保留对象数组,去掉Out-String
$EmailResponse = $EmailResponseFirst.value

foreach ($Email in $EmailResponse) {
    # toRecipients是数组,遍历每个收件人
    foreach ($recipient in $Email.toRecipients) {
        if ($recipient.emailAddress -and $recipient.emailAddress.emailAddress) {
            Write-Host "收件人邮箱:" $recipient.emailAddress.emailAddress
        }
    }
}

额外说明

  • 之前输出的toRecipients显示@{emailAddress=}是PowerShell对空对象的默认格式,实际有收件人的邮件中,emailAddress会包含具体邮箱地址。
  • 加空值判断是为了避免无收件人的邮件导致脚本报错。
  • 你之前写的Write-Host "($Email.from | ConvertFrom-Json).odata.etag"完全多余——$Email已经是Invoke-RestMethod自动解析好的对象,不需要再ConvertFrom-Json,直接写Write-Host $Email.odata.etag就能正确输出ETag。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:35:04