我正在尝试使用Microsoft.Graph API发送电子邮件,但是收到一条错误消息,指出“请求的用户无效”。我可以很好地获取访问令牌,但是我永远无法发送电子邮件。
我尝试使用graphClient.Me.SendEmail不走运。我试图在应用程序上创建另一个用户,但没有运气。我已经尝试过使用管理员电子邮件发送电子邮件,但是没有运气。
var ccaOptions = new ConfidentialClientApplicationOptions
{
ClientId = "my client id",
TenantId = "my tenant id",
ClientSecret = "my client secret",
RedirectUri = "temp",
};
var cca = ConfidentialClientApplicationBuilder.CreateWithApplicationOptions(ccaOptions).Build();
var scopes = new string[]
{
"https://graph.microsoft.com/.default"
};
var authResult = cca.AcquireTokenForClient(scopes).ExecuteAsync().Result;
string accessToken = authResult.AccessToken;
ClientCredentialProvider authProvider = new ClientCredentialProvider(cca);
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
await graphClient.Users["my admin email"]
.SendMail(message, null)
.Request()
.PostAsync();
以下是我作为管理员授予的权限。
答案 0 :(得分:1)
对于此问题,您需要了解两点:
1。。您在代码中使用了客户端凭据流,因此访问令牌不包含任何用户身份。因此,当您使用graphClient.Me.SendEmail
时,它不知道谁是Me
。如果要使用graphClient.Me.SendEmail
,则需要使用username/password流。
2。。我在一边进行了测试,并重现了错误The requested user is invalid
。当我们使用电子邮件地址(不在当前租户中的)时,它将显示此错误消息。我们只能在您的代码中使用xxx@xxx.onmicrosoft.com
之类的电子邮件地址来发送电子邮件。即使此电子邮件已使用全局管理员角色添加到您的Azure AD中,我们也不能使用任何其他电子邮件地址发送电子邮件。当您在代码中使用电子邮件xxx@xxx.onmicrosoft.com
发送电子邮件时,可能会遇到错误MailboxNotEnabledForRESTAPI Message: REST API is not yet supported for this mailbox.
,这意味着该电子邮件没有o365许可证。您需要assign o365许可给该用户。