[玩转系统] 使用 Graph API 通过电子邮件发送报告以实现安全报告交付
作者:精品下载站 日期:2024-12-14 08:37:33 浏览:14 分类:玩电脑
使用 Graph API 通过电子邮件发送报告以实现安全报告交付
Microsoft 365 报告是一个秘密武器,可让您有效监控 Office 365 环境。为了与同事和用户共享此类报告,Outlook 是一种有用的协作媒介。通过这种方式,为了减少手动工作,您可以使用 cmdlet“Send-MailMessage”,它是通过 PowerShell 发送报告的流行选择。然而,检查站来了!
“Send-MailMessage cmdlet 已过时。此 cmdlet 不保证与 SMTP 服务器的安全连接。虽然 PowerShell 中没有立即可用的替代方案,但我们建议您不要使用 Send-MailMessage。有关更多信息,请参阅平台兼容性说明 DE0005。”
您看到过上面的消息吗?这是微软在其官方文档中给出的警告说明,表明“Send-MailMessage”不太安全?!不用担心!您可以开始使用 Microsoft Graph API 通过电子邮件发送报告,这是使用 OAuth 令牌的最安全方法,使 O365 环境远离安全威胁
因此,请查看此博客,了解如何使用 Graph API 通过电子邮件发送报告。
选择 Microsoft Graph API 通过电子邮件发送报告
Microsoft Graph API 充当单个端点,允许您访问 Microsoft 365 云服务并与之交互。
首选使用 Graph API 进行报告分发的主要原因是它的“安全”?。通过 Graph API 发送报告时,您可以降低报告被盗和其他安全相关事件的风险。
然后是“效率”。 Graph API 有效管理电子邮件发送流程,确保报告在正确的时间交付给正确的人。
使用 Graph API 通过电子邮件发送报告的步骤
首先,您需要配置以下步骤以通过图表发送报告。
1.登录 Microsoft Graph Explorer: 首先,使用 Microsoft 365 帐户登录 Microsoft Graph Explorer。
2.配置HTTP 方法:在HTTP 请求栏中,将HTTP 方法设置为“POST”。
3.设置端点:接下来将 HTTP 请求设置为下面给出的两个 Outlook API 调用中的任意一个。
- https://graph.microsoft.com/v1.0/me/sendMail - 从登录用户发送报告。
- https://graph.microsoft.com/v1.0/users/{UserPrincipalName}/sendMail - 要从指定用户邮箱发送报告,您需要将“UserPrincipalName”替换为相应用户的电子邮件地址。
4.授予权限:在“修改权限”选项卡中,您可以看到“邮件.发送”权限。然后,单击“同意”按钮,向 Graph Explorer 授予“Mail.Send”权限。
5.配置content-type:可以设置JSON/MIME格式的请求体。因此,您可以根据您的要求对 JSON/MIME 对象使用 application/json 或 text/plain。顺便说一下,最好使用 JSON 格式,这样可以省力地发送报告。
配置上述步骤后,您可以运行给定的 JSON 格式:
- 使用 Outlook Mail API 发送电子邮件。
- 通过 REST API 调用将报告通过电子邮件发送给收件人。
使用 Outlook Mail API 发送电子邮件
您可以通过替换收件人的电子邮件地址,使用下面的 JSON 格式向收件人发送电子邮件。配置相应的收件人后,单击“运行查询”以传送消息。
JSON 格式:
{
"message": {
"subject": "<SubjectOfTheMail>",
"body": {
"contentType": "Text",
"content": "<ContentForYourMail>"
},
"toRecipients": [
{
"emailAddress": {
"address": "<RecipientemailId>"
}
}
],
"ccRecipients": [
{
"emailAddress": {
"address": "<emailId>"
}
}
]
},
"saveToSentItems": "false"
}
注意: 当您设置“POST /users/{id | ”时,响应正文中将默认给出上述格式。 userPrincipalName}/sendMail ”或“POST /me/sendMail ”调用。您只需按照给定的格式替换收件人地址即可。
此外,如果您需要将消息保存在“已发送邮件”中,请按照给定格式在 JSON 对象中添加“saveToSentItems”:“false”。
通过 REST API 调用通过电子邮件将报告发送给收件人
使用 Microsoft Graph API,可以更轻松且无错误地向 Outlook 中的其他管理员发送报告,从而无需手动操作。使用 Graph API,您可以通过直接以 JSON 格式指定报告名称来包含报告。
要通过电子邮件发送 Microsoft 365 报告,请在图表中使用 JSON 格式。
JSON 格式:
{
"message": {
"subject": "<SubjectOfTheMail>",
"body": {
"contentType": "Text",
"content": "<ContentForYourMail>"
},
"toRecipients": [
{
"emailAddress": {
"address": "<RecipientEmailId>"
}
}
],
"attachments": [
{
"@odata.type": "#microsoft.graph.fileAttachment",
"name": "<ReportName>",
"contentType": "text/plain",
"contentBytes": "SGVsbG8gV29ybGQh"
}
]
}
}
注意:您的请求被接受后,您将收到状态为“HTTP/1.1 202 已接受,”表示电子邮件发送过程已启动。
如果您在收件箱中找不到该电子邮件,请在垃圾邮件文件夹中检查它。
上述 JSON 格式有助于将报告发送给少量收件人。但是,当涉及到批量收件人时,您需要在“toRecipients”字段中一一指定所有收件人的电子邮件地址,这是一项繁琐的任务。
不过,有一种方法可以在不登录 Graph Explorer 的情况下执行批量操作。通过将 Outlook API 调用集成到 PowerShell 中,您可以高效地执行批量报告发送操作。
使用 Microsoft Graph API 从 PowerShell 发送报告
Graph Explorer 在处理批量操作(例如发送批量报告或通过电子邮件向大量人员发送报告)时可能会带来挑战。但是,通过 PowerShell,您可以调用 Outlook 邮件 API 以使用注册的应用程序执行批量操作。
为此,您必须首先在 Azure AD 中注册应用程序并生成客户端机密以进行安全访问。另外,请务必记下客户的秘密,因为以后看不到它。
权限:在 Azure Active Directory 中注册您的应用程序后,请确保授予“Mail.向您的应用程序发送“委托 API 权限”。为此,请按照下面的导航操作。
Microsoft Entra 管理中心> 应用程序> 应用程序注册> 相应应用程序> Api 权限> 添加权限> Microsoft Graph > 委派权限> 邮件>“Mail.Send”> 添加权限.
完成先决条件后,让我们开始了解以下使用 PowerShell 和 Graph API 邮寄报告的重要方法。
- 通过 REST API 通过电子邮件将报告发送给多个收件人
- 通过 Graph API 调用向收件人发送多个报告
- 通过 Graph 将批量报告通过电子邮件发送给批量收件人的 PowerShell 脚本
通过 Microsoft Graph API 通过电子邮件将报告发送给批量收件人
考虑一个场景,如果您想与共同管理员共享用户活动报告,您必须单独通过电子邮件将报告发送给他们。等等,您可以使用带有 Graph API 调用的 PowerShell 脚本,而不是手动向不同的团队成员发送单独的报告,该脚本读取包含管理员电子邮件地址的 CSV 文件,并自动向每个收件人发送用户活动报告。
示例 CSV 文件:
# Authenticate and get an access token
$tokenEndpoint = "https://login.microsoftonline.com/<tenantId>/oauth2/token"
$Body = @{
Grant_Type = "client_credentials"
Client_Id = "<clientId>"
Client_Secret = "<clientSecret>"
Resource = "https://graph.microsoft.com"
}
$accessToken = (Invoke-RestMethod -Method POST -Uri $tokenEndpoint -ContentType "application/x-www-form-urlencoded" -Body $Body).access_token
# Read the CSV file to get the email details
$csvPath = "<recipientCSVFile>"
$csvData = Import-Csv -Path $csvPath
# Attachment details
$attachmentPath = "<ReportPath>" # Replace this with the actual path to the attachment
$attachmentBytes = [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($attachmentPath))
# Send emails with the same report to multiple recipients
$URI = "https://graph.microsoft.com/v1.0/users/<UserId>/sendMail"
foreach ($row in $csvData) {
$recipientEmail = $row.Email
$params = @{
message = @{
subject = "<SubjectOfTheMail>"
toRecipients = @(@{emailAddress = @{address = $recipientEmail}})
attachments = @(@{ "@odata.type" = "#microsoft.graph.fileAttachment"; name = (Get-Item $attachmentPath).Name; contentBytes = $attachmentBytes })
}
} | ConvertTo-Json -Depth 4
try {
$GraphData = Invoke-RestMethod -Method POST -Uri $URI -Headers @{
"Authorization" = "Bearer $accessToken"
"Content-type" = "application/json"
} -Body $params
$GraphData = $GraphData.value
} catch {
$errorMessage = $_.Exception.Response.GetResponseStream()
$reader = New-Object System.IO.StreamReader($errorMessage)
$responseBody = $reader.ReadToEnd()
Write-Host "Error response body: $responseBody
Write-Host "Email not sent to $recipientEmail."
}
}
上述脚本中的 try 和 catch 块将帮助您处理由于网络问题、无效输入或服务器问题而发生的错误。
通过 Rest API 和 PowerShell 通过电子邮件将多个报告发送给收件人
现在,考虑一个反之亦然的场景,要通过调用 Outlook 邮件 API 向收件人发送多个报告,您可以使用下面提到的 PowerShell 脚本。
为此,请创建一个 CSV 文件,其中包含需要发送的报告的位置。
示例 CSV 文件:
$ErrorActionPreference = "Stop"
$tokenEndpoint = "https://login.microsoftonline.com/<TenantId>/oauth2/token"
$Body = @{
Grant_Type = "client_credentials"
Client_Id = "<ClientId>"
Client_Secret = "<ClientSecret>"
Resource = "https://graph.microsoft.com"
}
$accessToken = $null
try {
$accessToken = ((Invoke-RestMethod -Method POST -Uri $tokenEndpoint -ContentType "application/x-www-form-urlencoded" -Body $Body).access_token)
} catch {
Write-Host "Error obtaining access token. Please check your client ID, client secret, and tenant ID."
}
if ($accessToken) {
$recipientEmail = "<RecipientEmailid>"
$csvPath = "<PathOfTheCSVFile>"
try {
$attachments = Import-Csv $csvPath | ForEach-Object {
$reportPath = $_.ReportsPath.Trim()
if (-Not (Test-Path $reportPath)) {
Write-Host "Error: Report file not found at path $reportPath."
return
}
@{
"@odata.type" = "#microsoft.graph.fileAttachment"
"name" = (Get-Item $reportPath).Name
"contentBytes" = [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($reportPath))
}
}
$URI = "https://graph.microsoft.com/v1.0/users/<UserPrincipalName>/sendMail"
$params = @{
message = @{
subject = "<SubjectOfTheMail>"
toRecipients = @(@{emailAddress = @{address = $recipientEmail}})
attachments = $attachments
}
} | ConvertTo-Json -Depth 4
$response = Invoke-RestMethod -Method POST -Uri $URI -Headers @{
"Authorization" = "Bearer $accessToken"
"Content-type" = "application/json"
} -Body $params
if ($response -ne $null) {
Write-Host "Email sent with multiple attachments."
}
} catch {
Write-Host $_.Exception.Message
Write-Host "Email not sent to $recipientEmail."
}
} else {
Write-Host "Access token not obtained. Email not sent to $recipientEmail."
}
收件人将收到一封包含多个报告的电子邮件,如下面的屏幕截图所示。
通过 Graph 将批量报告通过电子邮件发送给多个收件人的 PowerShell 脚本
通过 Outlook 同时向特定用户发送自定义报告可能具有挑战性。但是,带有 API 调用的 PowerShell 脚本可以通过一次向批量收件人发送多个报告来轻松实现这一点。
因此,创建一个 CSV 文件,显示收件人地址和相应附件的路径。
示例 CSV 文件:
然后,您可以使用下面给出的 PowerShell 脚本将多个报告通过电子邮件发送给批量收件人。
$ErrorActionPreference = "Stop"
$tokenEndpoint = "https://login.microsoftonline.com/<TenantId>/oauth2/token"
$Body = @{
Grant_Type = "client_credentials"
Client_Id = "<ClientId>"
Client_Secret = "<ClientSecret>"
Resource = "https://graph.microsoft.com"
}
$accessToken = $null
try {
$accessToken = (Invoke-RestMethod -Method POST -Uri $tokenEndpoint -ContentType "application/x-www-form-urlencoded" -Body $Body).access_token
} catch {
Write-Host "Error obtaining access token. Please check your client ID, client secret, and tenant ID."
$accessToken = $null
}
if ($accessToken) {
$csvPath = "<PathOfTheCSVFile>"
if (-Not (Test-Path $csvPath)) {
Write-Host "Error: CSV file not found at path $csvPath."
$csvData = $null
} else {
$csvData = Import-Csv -Path $csvPath -ErrorAction SilentlyContinue
}
if ($csvData -eq $null) {
Write-Host "Error reading CSV file. Please check the recipient reports CSV file path."
} else {
$URI = "https://graph.microsoft.com/v1.0/users/<UserPrincipalName>/sendMail"
foreach ($row in $csvData) {
$recipientEmail = $row.Email
$attachments = $row.ReportsPath -split ',' | ForEach-Object {
if (-Not (Test-Path $_.Trim())) {
Write-Host "Error: Report file not found at path $_."
continue
}
$reportBytes = [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($_.Trim()))
@{
"@odata.type" = "#microsoft.graph.fileAttachment"
"name" = (Get-Item $_.Trim()).Name
"contentBytes" = $reportBytes
}
}
$params = @{
message = @{
subject = "<SubjectOfTheMail>"
toRecipients = @(@{emailAddress = @{address = $recipientEmail}})
attachments = $attachments
}
} | ConvertTo-Json -Depth 4
try {
Invoke-RestMethod -Method POST -Uri $URI -Headers @{
"Authorization" = "Bearer $accessToken"
"Content-type" = "application/json"
} -Body $params | Out-Null
Write-Host "Email sent to $recipientEmail with attachments: $($row.ReportsPath -join ', ')"
} catch {
$errorMessage = $_.Exception.Response.GetResponseStream()
$reader = New-Object System.IO.StreamReader($errorMessage)
$responseBody = $reader.ReadToEnd()
Write-Host "Error sending email to $recipientEmail. Error response body: $responseBody"
Write-Host "Email not sent to $recipientEmail."
}
}
}
} else {
Write-Host "Access token not obtained. Email not sent to any recipients."
}
此外,您还可以使用任务计划程序来计划 PowerShell 脚本,从而以特定的时间间隔向目标收件人发送报告。
使用 AdminDroid 轻松快速地交付报告
如果您是 PowerShell、Graph Explorer 或 Task Scheduler 的新手,那么执行上述脚本和查询可能会带来挑战。把这些方法抛在脑后吧!因为 AdminDroid 可以轻松管理所有报告发送任务,为您的需求提供统一的解决方案。
借助 AdminDroid,您可以体验实时报告电子邮件发送的优势,确保立即交付给用户,不会出现任何延迟。
顺便说一句,本机工具缺乏以所需格式保存报告、报告安排等功能。然而,AdminDroid 通过其高级调度功能弥补了这一差距。其强大的计划功能使您可以轻松地按特定时间间隔向收件人发送报告,从而无需在每个时间间隔手动执行脚本和查询。
使用 AdminDroid 安排报告的一些主要优点:
- 尽管管理多个租户,AdminDroid 仍提供了一种便捷的方法来选择所需的租户来安排报告。
- 您可以自定义电子邮件的正文、附件类型和主题。
- 计划报告可以保存为 PDF、HTML、CSV、XLS、XLSX 和 RAW 格式。
- 您可以设置每天、每周或每月的计划,如果需要,您还可以利用最近的计划时间来发送报告。
- 您可以允许其他管理员订阅您的时间表,这样除了指定的收件人之外,他们还可以接收预定的报告。
- 您可以灵活地将计划的报告存储在本地磁盘或远程共享上。
此外,持续监控电子邮件流可以保护您免受安全风险。因此,您可以安排 Exchange Online 邮件保护报告,以持续监控垃圾邮件和恶意软件邮件,从而确保 Exchange Online 环境受到保护。
除此之外,您还可以使用 AdminDroid 安排电子邮件流量报告,并通过定期检查 Office 365 中的入站和出站电子邮件流量来保持合规性。
此外,为了一目了然地掌握电子邮件活动,AdminDroid 提供了一个电子邮件分析仪表板,用于跟踪 Exchange Online 中的顶级恶意软件和网络钓鱼电子邮件。
使用 AdminDroid 监控 Microsoft 365 电子邮件活动并缓解威胁!
不要等待电子邮件攻击意外发生!立即行动并下载 AdminDroid 以保护您的 Exchange Online 环境。
作为总结,请考虑使用 Microsoft Graph API 调用作为通过电子邮件发送 M365 报告的安全且轻松的方式。希望您获得有关使用 Graph API 通过电子邮件发送报告的方法的足够信息。请随时在评论部分提出您的疑问。我们随时准备解决它!
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag