无法使用Microsoft.Graph发送电子邮件

时间:2020-10-19 19:41:11

标签: c# azure-active-directory microsoft-graph-api microsoft-graph-mail

我正在尝试使用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();

以下是我作为管理员授予的权限。

Permissions

1 个答案:

答案 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许可给该用户。