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