Microsoft Graph API无法发送电子邮件C#控制台 [英] Microsoft Graph API unable to Send Email C# Console

查看:59
本文介绍了Microsoft Graph API无法发送电子邮件C#控制台的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个小的 Console Ap p,以使用 Microsoft Graph API 发送电子邮件.

使用过的教程

所以,有人可以指导我哪里出问题了

解决方案

基于您的屏幕截图,您尚未授予管理员对 Mail.Send 应用程序权限的同意.

点击api权限下的授予管理员同意按钮.

更新:

交互式提供程序:

  string []范围= {"Mail.Send"};字符串clientId =";IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder.Create(客户编号).WithRedirectUri("https://localhost").建造();InteractiveAuthenticationProvider authProvider =新的InteractiveAuthenticationProvider(publicClientApplication,范围);GraphServiceClient graphClient = new GraphServiceClient(authProvider); 

I have created a small Console App to send email using Microsoft Graph API.

Tutorial Used

https://docs.microsoft.com/en-us/graph/api/user-sendmail?view=graph-rest-1.0&tabs=csharp

Error

ServiceException: Code: NoPermissionsInAccessToken Message: The token contains no permissions, or permissions can not be understood.

Code

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using Microsoft.Graph;
using Microsoft.Graph.Auth;
using Microsoft.Graph.Extensions;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Identity.Client;

namespace GraphAPI
 {
    class Program
    {

    static void Main(string[] args)
    {
        // Azure AD APP
        string clientId = "<client Key Here>";
        string tenantID = "<tenant key here>";
        string clientSecret = "<client secret here>";

        Task<GraphServiceClient> callTask = Task.Run(() => SendEmail(clientId, tenantID, clientSecret));
        // Wait for it to finish
        callTask.Wait();
        // Get the result
        var astr = callTask;
    }

    public static async Task<GraphServiceClient> SendEmail(string clientId, string tenantID, string clientSecret)
    {

        IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
            .Create(clientId)
            .WithTenantId(tenantID)
            .WithClientSecret(clientSecret)
            .Build();

        ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);       

        GraphServiceClient graphClient = new GraphServiceClient(authProvider);

        var message = new Message
        {
            Subject = "Meet for lunch?",
            Body = new ItemBody
            {
                ContentType = BodyType.Text,
                Content = "The new cafeteria is open."
            },
            ToRecipients = new List<Recipient>()
            {
                new Recipient
                {
                    EmailAddress = new EmailAddress
                    {
                        Address = "myToEmail@gmail.com"
                    }
                }
            },
            CcRecipients = new List<Recipient>()
            {
                new Recipient
                {
                    EmailAddress = new EmailAddress
                    {
                        Address = "myCCEmail@gmail.com"
                    }
                }
            }
        };

        var saveToSentItems = true;

          await graphClient.Me
            .SendMail(message, saveToSentItems)
            .Request()
            .PostAsync();

        return graphClient;

    }

}

}

Here is the Screenshot of permissions I gave to the AD APP

So, Can anybody guide me where I am going wrong

解决方案

Based on your screenshot, you haven't grant admin consent to Mail.Send application permission.

Click the grant admin consent button under api permissions.

Update:

Interactive provider:

            string[] scopes = { "Mail.Send" };
            string clientId = "";
            IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
            .Create(clientId)
            .WithRedirectUri("https://localhost")
            .Build();

            InteractiveAuthenticationProvider authProvider = new InteractiveAuthenticationProvider(publicClientApplication, scopes);

            GraphServiceClient graphClient = new GraphServiceClient(authProvider);

这篇关于Microsoft Graph API无法发送电子邮件C#控制台的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆