Graph API 集成问题 outlook 邮件在 dotnet 中的权限不足。任何支持将不胜感激

问题描述 投票:0回答:0

我已经提供了邮件的所有范围,并试图从 graph explorer 中获得同意。

但是我无法找到我在 azure active directory 上提供的范围。

ExternalItem.Read.All 应用 阅读所有外部项目 是的 授予默认目录

邮件.阅读 委派 阅读用户邮件 不 授予默认目录

邮件.阅读 应用 读取所有邮箱中的邮件 是的 授予默认目录

邮件.阅读.共享 委派 读取用户和共享邮件 不 授予默认目录

Mail.ReadBasic 委派 读取用户基本邮件 不 授予默认目录

Mail.ReadBasic 应用 读取所有邮箱中的基本邮件 是的 授予默认目录

Mail.ReadBasic.All 应用 读取所有邮箱中的基本邮件 是的 授予默认目录

Mail.ReadBasic.Shared 委派 读取用户和共享的基本邮件 不 授予默认目录

邮件.读写 委派 对用户邮件的读写权限 不 授予默认目录

邮件.读写.共享 委派 读写用户和共享邮件 不 授予默认目录

邮件.发送 委派 以用户身份发送邮件 不 授予默认目录

邮件.发送.共享 委派 代发邮件 不 授予默认目录

User.Read 委派 登录并阅读用户资料 不 授予默认目录

enter image description here enter image description here

我期待从 graph api sdk 获得令牌,它可以读取邮件并保存附件 在我的本地文件夹中并将邮件消息移动到备份文件夹。

这是我的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Graph;
using Microsoft.Identity.Client;

namespace FeeServices.BatchEmailProcessor
{
    public class GraphAPIMailReaderLL
    {

        private string outlookMail = null;
        private string processedFolder = null;
        private string clientId = null;
        private string clientSecret = null;
        private string tenantId = null;
        
        public GraphAPIMailReaderLL(string clientId, string clientSecret, string tenantId, string mail) {
            InitializeGraphClient(clientId, clientSecret, tenantId, mail);            
        }

    public  void InitializeGraphClient(string _clientId,string _clientSecret,string _tenantId,string mail)
    {            
        outlookMail = mail;
        clientId = _clientId;
        clientSecret = _clientSecret;
        tenantId = _tenantId;
    }

    private async Task CreateOrCheckBackUpMailFolder(string mail, Microsoft.Graph.GraphServiceClient graphClient)
    {
            IUserMailFoldersCollectionPage allMailFolders = await graphClient.Users[mail].MailFolders.Request().GetAsync();
            //processedFolder = allMailFolders.Where(x => x.DisplayName == "ProcessedFolder").Select(x => x.Id).FirstOrDefault();
            //if (processedFolder == null)
            //{
            //    var requestBody = new MailFolder
            //    {
            //        DisplayName = "ProcessedFolder",
            //        IsHidden = false,
            //    };
            //    var result = await graphClient.Me.MailFolders.Request().AddResponseAsync(requestBody);
            //    allMailFolders = await graphClient.Users[mail].MailFolders.Request().GetAsync();
            //    processedFolder = allMailFolders.Where(x => x.DisplayName == "ProcessedFolder").Select(x => x.Id).FirstOrDefault();
            //}            
    }

    private async Task<IUserMessagesCollectionPage> GetMessages(string subject, Microsoft.Graph.GraphServiceClient graphClient)
    {
        return await graphClient.Users[outlookMail].Messages
        .Request().Filter($"Subject eq '{subject}'").Expand("attachments").GetAsync();
    }

    public async Task<List<string>> SaveAttachmentToFile(string subject, string fileExtension, string filepath)
    {
        List<string> filenames = new List<string>();


        var app = ConfidentialClientApplicationBuilder.Create(clientId)
            .WithTenantId(tenantId)
            .WithClientSecret(clientSecret)
            .Build();
        var scopes = new string[] { "https://graph.microsoft.com/.default"};
        var authResult = await app.AcquireTokenForClient(scopes).ExecuteAsync();
        var graphClient = new GraphServiceClient(new TokenCredentialAuthProvider(authResult.AccessToken));

        //var user = await graphClient.Users[outlookMail].Request().GetAsync();
        //IGraphServiceUsersCollectionPage users = await graphClient.Users[outlookMail].Request().GetAsync();
        //Console.WriteLine($"Found {user} users in the tenant");
        await CreateOrCheckBackUpMailFolder(outlookMail, graphClient);
        //IUserMessagesCollectionPage messages =await GetMessages(subject, graphClient);
        //dynamic request= null;
        //string filename = null;

        //foreach (Message message in messages)
        //{

        //    foreach (Attachment attachment in message.Attachments)
        //    {
        //        if (attachment.Name.ToLower().EndsWith(fileExtension.ToLower()) || attachment.Name.ToLower().EndsWith(".xlsx"))
        //        {
        //            filename = string.Format(filepath, DateTime.Now.ToString("yyMMdd-hhmmss"));
        //            request = graphClient.Me.Messages[message.Id].Attachments[attachment.Id].Request()
        //            .GetHttpRequestMessage();

        //            request.RequestUri = new Uri(request.RequestUri.OriginalString + "/$value");
        //            var response = await graphClient.HttpProvider.SendAsync(request);

        //            var body = await response.Content.ReadAsByteArrayAsync();
        //            System.IO.File.WriteAllBytes(filename, body);
        //            filenames.Add(filename);
        //        }
        //    }

        //    await Delete(message.Id, graphClient);
        //}
        return filenames;
    }

    private async Task Delete(string messageId, Microsoft.Graph.GraphServiceClient graphClient)
    {
        Message movedMsg = await graphClient.Users[outlookMail].Messages[messageId].Move(processedFolder).Request().PostAsync();
    }      

}
class TokenCredentialAuthProvider : IAuthenticationProvider
{
    private readonly string _accessToken;

    public TokenCredentialAuthProvider(string accessToken)
    {
        _accessToken = accessToken;
    }



public Task AuthenticateRequestAsync(HttpRequestMessage request)
{
  request.Headers.Authorization = new 
  System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", 
  _accessToken);
  return Task.FromResult(0);
}

} }

.net microsoft-graph-api office365 outlook-restapi microsoft-graph-mail
© www.soinside.com 2019 - 2024. All rights reserved.