[玩转系统] 使用 Microsoft Graph API 和 PowerShell 发送电子邮件
作者:精品下载站 日期:2024-12-14 06:35:43 浏览:17 分类:玩电脑
使用 Microsoft Graph API 和 PowerShell 发送电子邮件
要从 PowerShell 脚本通过 SMTP 服务器发送电子邮件,您可以使用内置的 Send-MailMessage cmdlet。它的主要缺点是它只能使用基本 SMTP 身份验证,不支持现代身份验证方法,包括 OAuth 和 Microsoft 现代身份验证。当你运行
Send-MailMessage
在新版本的 PowerShell Core 7.x 中运行命令时,您会收到以下警告:
WARNING: The command 'Send-MailMessage' is obsolete. This cmdlet does not guarantee secure connections to SMTP servers. While there is no immediate replacement available in PowerShell, we recommend you do not use Send-MailMessage at this time. See https://aka.ms/SendMailMessage for more information.
默认情况下,Microsoft 为所有新的 Azure 租户禁用基本身份验证。在本文中,我们将了解如何使用 Microsoft Graph API 和 PowerShell 从 Exchange Online/Microsoft 365 租户发送电子邮件。
配置使用 Microsoft Graph API 发送电子邮件的权限
在获取 Azure 令牌并通过 PowerShell 脚本进行身份验证之前,您需要在 Entra ID 租户中创建一个新应用程序 (Azure Active Directory -> 应用程序注册 -> 新注册)。然后授予
Mail.Send
应用程序的权限(API 权限 -> 添加权限 -> Microsoft Graph -> 应用程序权限 -> Mail.Send)。
在“使用 PowerShell 连接到 Microsoft Graph API”一文中了解如何为 Microsoft Graph 注册 Azure 应用程序。
默认情况下,您的应用程序可以代表 Exchange Online 租户中的任何邮箱发送电子邮件。您可以使用应用程序访问策略来限制您的应用程序可以代表其发送电子邮件的电子邮件地址列表。
使用 PowerShell 连接到 Exchange Online (
Connect-ExchangeOnline
),创建一个 Exchange 通讯组,并添加您希望能够从中发送电子邮件的帐户:
New-DistributionGroup -Name "azappSendasAllowed" -Type "Security" -Members @("[email ")
如果您愿意,还可以从 Exchange 全局地址列表 (GAL) 中隐藏该组:
Set-DistributionGroup -Identity azappSendasAllowed -HiddenFromAddressListsEnabled $true
现在创建一个策略并将其绑定到您的 Azure AppID:
New-ApplicationAccessPolicy -AppId "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -PolicyScopeGroupId azappSendasAllowed -AccessRight RestrictAccess -Description "Resrtict SendAs Policy"
您现在可以检查您的应用程序可以代表哪些地址发送电子邮件:
Test-ApplicationAccessPolicy -Identity [email -AppId "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Test-ApplicationAccessPolicy -Identity [email -AppId "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
根据访问状态,上述命令将返回拒绝或授予。
使用 Invoke-RestMethod 通过 Exchange Online 发送电子邮件
您可以使用 sendMail REST API 方法通过 Exchange Online/Microsoft 365 发送电子邮件。要调用该方法,请使用内置的 Invoke-RestMethod PowerShell cmdlet。
要使用 Microsoft Graph API 发送电子邮件,您必须使用 Entra ID (Azure) 进行身份验证并获取令牌。
$AccessSecret= "3333333333333333333333333333333333333333333"
$AzureAppID = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$tenantID="1234567-1234-1234-1234-123456789012"
现在连接到 Graph API 并执行身份验证:
$tokenBody = @{
Grant_Type = "client_credentials"
Scope = "https://graph.microsoft.com/.default"
Client_Id = $AzureAppID
Client_Secret = $AccessSecret
}
$tokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantID/oauth2/v2.0/token" -Method POST -Body $tokenBody
$headers = @{
"Authorization" = "Bearer $($tokenResponse.access_token)"
"Content-type" = "application/json"
}
您现在可以发送电子邮件了:
$MailFrom = "[email "
$MailTo = "[email "
$URLsend = "https://graph.microsoft.com/v1.0/users/$MailFrom/sendMail"
$BodyJsonsend = @"
{
"message": {
"subject": "Test email from Microsoft Graph API",
"body": {
"contentType": "HTML",
"content": "This email is sent via <br>
Microsoft GRAPH API<br>"
},
"toRecipients": [
{
"emailAddress": {
"address": "$mailto"
}
}
]
},
"saveToSentItems": "true"
}
"@
Invoke-RestMethod -Method POST -Uri $URLsend -Headers $headers -Body $BodyJsonsend
检查电子邮件是否已成功发送到用户的 Exchange 邮箱。
使用 Microsoft.Graph 模块中的 Send-MgUserMail Cmdlet
使用 Invoke-RestMethod cmdlet 发送电子邮件意味着您必须生成 JSON 格式的整个电子邮件对象。为了使该过程更容易,您可以尝试使用 Microsoft.Graph 模块中的 Send-MgUserMail cmdlet。
安装 Microsoft.Graph 模块并将其导入到您的 PowerShell 会话中:
Install-Module Microsoft.Graph
Import-Module Microsoft.Graph
我们将使用证书在 Microsoft 365 (Exchange Online) 租户中进行身份验证:
$certThumbprint = "9CF05589A4B29BECEE6456F08A76EBC3DC2BC581"
$AzureAppID = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$tenant="a-d.onmicrosoft.com"
Connect-MgGraph -TenantId $Tenant -ClientId $AzureAppID -CertificateThumbprint $certThumbprint
接下来,我们创建一封带有 HTML 正文和附件的简单电子邮件:
$MailFrom = "[email "
$MailTo = "[email "
$msgBody = “This is <br> test <br> Graph API mailer <br>”
$Attachment = "C:\logs\mytestapp.log"
$AttachmentContentBytes = [System.IO.File]::ReadAllBytes($Attachment)
$AttachmentBase64 = [System.Convert]::ToBase64String($AttachmentContentBytes)
$Message = @{
Subject = "Hello World from GraphAPI"
Body = @{
ContentType = "HTML"
Content = $msgBody
}
ToRecipients = @(
@{
EmailAddress = @{
Address = $MailTo
}
}
)
Attachments = @(
@{
"@odata.type" = "#microsoft.graph.fileAttachment"
Name = (Split-Path $Attachment -Leaf)
ContentType = "application/octet-stream"
ContentBytes = $AttachmentBase64
}
)
}
您可以使用此命令发送电子邮件:
Send-MgUserMail -UserId $MailFrom -Message $Message
Send-MgUserMail cmdlet 只能用于通过 Exchange Online 发送电子邮件。这意味着它无法与本地 Exchange Server 或其他电子邮件/SMTP 提供商一起使用。
猜你还喜欢
- 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