使用 MgGraph 将带有 OAuth 身份验证的电子邮件发送到 Office 365

问题描述 投票:0回答:0

我正在尝试使用 MgGraph 和现代身份验证发送电子邮件,但不知何故失败了。

发件人收到 Exchange 的自动回复说;

管理员诊断信息: 生成服务器:AS8PR08MB9314.eurprd08.prod.outlook.com 远程服务器返回 '550 5.7.708 服务不可用。拒绝访问,不接受来自该 IP 的流量。

让我解释一下我在做什么;

我有一个使用图形 API 发送电子邮件的脚本。该脚本在具有 Graph API Mail.Send 权限的 AD 应用程序上使用证书(在我的笔记本电脑上自签名并之前添加到应用程序注册中)进行身份验证。

Graph POST成功,但Exchange立即发回上述NDR

Install-Module MSAL.PS
Import-Module MSAL.PS

$appName = "MailSendingTestApp"
$appRegistration = @{
    TenantId          = "xxx.onmicrosoft.com"
    ClientId          = "\<app-id\>"
    ClientCertificate = (Get-ChildItem Cert:\\CurrentUser\\My | Where-Object {$\_.Subject -eq ('CN={0}' -f $appName)})
}

$msalToken = Get-MsalToken @appRegistration -ForceRefresh -AzureCloudInstance 1

$fromEmailAddress = "email address removed for privacy reasons"
$requestBody = @{
    "message"         = \[PSCustomObject\]@{
        "subject"      = "OAuth Mail Test"
        "body"         = \[PSCustomObject\]@{
            "contentType" = "Text"
            "content"     = "Hello this is a test"
        }
        "toRecipients" = @(
            \[PSCustomObject\]@{
                "emailAddress" = \[PSCustomObject\]@{
                    "address" = "email address removed for privacy reasons"
                }
            }
        )
    }
"saveToSentItems" = "true"
}

$request = @{
    "Headers"     = @{Authorization = $msalToken.CreateAuthorizationHeader() }
    "Method"      = "Post"
    "Uri"         = "https://graph.microsoft.com/v1.0/users/$fromEmailAddress/sendMail"
    "Body"        = $requestBody | ConvertTo-Json -Depth 5
    "ContentType" = "application/json"
}

Invoke-RestMethod @request

谷歌搜索让我找到了一篇链接到 MS 文章的帖子,上面写着; “当您试用 Microsoft 365 试用租户时,可能会发生此错误。如果您在购买许可证之前收到此错误,请联系支持人员请求低信誉 IP 地址的例外,直到您能够购买许可证。”

我的租户获得了 Microsoft 365 E5 Developer 许可(我们的合作伙伴帐户附带的 Visual Studio 权益的一部分)。

这里可能出了什么问题?我需要在这里联系 Microsoft 还是开始拉我的钱包?

希望有人能帮忙

2023 年 5 月 19 日更新

感谢大家的帮助,但我刚刚确认这是与拥有开发者许可证相关的问题。 一旦我在具有许可证的生产租户上尝试此操作,它就会立即运行并且目标收件人会收到邮件。 微软似乎有某种保护措施来防止滥用试用和开发者帐户。 一件好事,但如果你想在投入生产之前从概念上测试一些东西,那就没用了。

powershell oauth azure-active-directory office365 exchange-server
© www.soinside.com 2019 - 2024. All rights reserved.