Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用Microsoft.Graph发送电子邮件_C#_Azure Active Directory_Microsoft Graph Api_Microsoft Graph Mail - Fatal编程技术网

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

C# 无法使用Microsoft.Graph发送电子邮件,c#,azure-active-directory,microsoft-graph-api,microsoft-graph-mail,C#,Azure Active Directory,Microsoft Graph Api,Microsoft Graph Mail,我正在尝试使用Microsoft.Graph API发送电子邮件,但我收到一个错误,该错误表示“请求的用户无效”。我能够很好地获得访问令牌,但是我永远无法发送电子邮件 我尝试使用graphClient.Me.sendmail,但没有成功。我尝试在应用程序上创建另一个用户,但没有成功。我已经尝试了管理员电子邮件发送电子邮件,但没有运气 var ccaOptions = new ConfidentialClientApplicationOptions { ClientId = "m

我正在尝试使用Microsoft.Graph API发送电子邮件,但我收到一个错误,该错误表示“请求的用户无效”。我能够很好地获得访问令牌,但是我永远无法发送电子邮件

我尝试使用graphClient.Me.sendmail,但没有成功。我尝试在应用程序上创建另一个用户,但没有成功。我已经尝试了管理员电子邮件发送电子邮件,但没有运气

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();
以下是我作为管理员授予的权限


对于此问题,您需要知道两点:

1。您在代码中使用客户端凭据流,因此访问令牌不包含任何用户标识。因此,当您使用
graphClient.Me.sendmail
时,它不知道谁是
Me
。如果要使用
graphClient.Me.sendmail
,则需要使用flow


2.我在我的身边测试了它,并再现了错误
请求的用户无效
。当我们使用电子邮件地址(不在当前租户中)时,它将显示此错误消息。我们可以使用像
xxx@xxx.onmicrosoft.com
在您的代码中发送电子邮件。我们无法使用任何其他电子邮件地址发送电子邮件,即使此电子邮件已添加到具有全局管理员角色的Azure广告中。当您使用电子邮件
xxx@xxx.onmicrosoft.com
在发送电子邮件的代码中,您可能会遇到错误
MailboxNotEnabledForRESTAPI消息:此邮箱尚不支持REST API。
这意味着该电子邮件没有o365许可证。您需要向该用户提供o365许可证。

非常感谢您的回复。它很好地解释了一切。我相信我帐户上的电子邮件没有o365许可证。要分配我需要的许可证,我必须是全局、许可证或用户管理员,因为我不拥有域,所以我不是。我猜这是没有办法的?@DeVonte是的,恐怕这是没有办法的。