如何在Windows服务器用PowerShell读取Exchange Online共享邮箱邮件提取正文?
解决方案:使用Microsoft Graph读取Exchange Online共享邮箱邮件
一、前置准备
- 安装Microsoft Graph PowerShell模块:
Install-Module -Name Microsoft.Graph -Force -AllowClobber -Scope CurrentUser - 在Azure AD中注册应用并配置权限:
- 新建应用注册,记录客户端ID、租户ID,生成客户端密码(证书认证也可,密码更适合脚本场景)。
- 添加Microsoft Graph的应用权限:
Mail.Read,并完成管理员同意。 - 给应用分配共享邮箱的访问权限(可选,若全局权限已覆盖则跳过):
# 需先连接Exchange Online PowerShell Add-MailboxPermission -Identity "sharedmailbox@yourdomain.com" -User "应用对象ID" -AccessRights FullAccess
二、无交互读取共享邮箱邮件脚本
以下脚本通过应用权限认证,直接读取共享邮箱收件箱邮件并提取正文:
# 配置参数 $clientId = "你的应用客户端ID" $clientSecret = "你的应用客户端密码" $tenantId = "你的Azure租户ID" $sharedMailbox = "sharedmailbox@yourdomain.com" # 获取Graph访问令牌 $tokenParams = @{ Uri = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" Method = "POST" Body = @{ grant_type = "client_credentials" scope = "https://graph.microsoft.com/.default" client_id = $clientId client_secret = $clientSecret } } $token = (Invoke-RestMethod @tokenParams).access_token $authHeader = @{ Authorization = "Bearer $token" } # 读取收件箱邮件(示例取前10封,可调整$top参数) $mailApiUrl = "https://graph.microsoft.com/v1.0/users/$sharedMailbox/mailFolders/Inbox/messages?`$top=10&`$select=subject,body" $messages = Invoke-RestMethod -Uri $mailApiUrl -Headers $authHeader -Method GET # 遍历提取正文数据 foreach ($msg in $messages.value) { Write-Host "邮件主题: $($msg.subject)" Write-Host "邮件正文内容:" Write-Host $msg.body.content Write-Host "----------------------------------------" # 此处可添加正文解析逻辑,比如正则提取特定字段 }
三、补充说明
- 若需要筛选特定邮件,可在API URL中添加
$filter参数,例如按收件日期筛选:$mailApiUrl = "https://graph.microsoft.com/v1.0/users/$sharedMailbox/mailFolders/Inbox/messages?`$top=10&`$select=subject,body&`$filter=receivedDateTime ge 2024-01-01T00:00:00Z" - 若允许交互登录,可简化为使用 delegated 权限:
Connect-MgGraph -Scopes "Mail.Read" $messages = Get-MgUserMailFolderMessage -UserId $sharedMailbox -MailFolderId "Inbox" -Top 10 -Property "subject,body"
内容的提问来源于stack exchange,提问作者HansBauer
相关产品推荐
相关产品推荐

