Отправляйте электронные письма с большими вложениями, используя Micrososft Graph - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь отправлять электронные письма с большим количеством вложений с помощью Microsoft.Graph версии 3.0.1. Проблема в том, что я не могу создать сеанс загрузки. Я приложил ниже код C#, используемый для этого. «Электронная почта» - это моя модель, используемая в приложении. Я поместил все в метод sigle для лучшего обзора. Как видно, сначала я пытаюсь создать черновик и загрузить вложения кусками. После этого я хочу отправить письмо. В тот момент, когда сеанс должен быть создан, я получил ошибку: «Запрос OData не поддерживается». Полный ответ можно увидеть в разделе catch.

В качестве областей, которые я использую: User.Read Mail.ReadWrite Mail.Send Files.ReadWrite Files.ReadWrite.All Sites.ReadWrite.All

Что я здесь не так делаю? Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

    private async Task SendEmailWithLargeAttaachment(Email email)
    {
        //The large attachment
        AttachmentItem attachmentItem = new AttachmentItem
        {
            Name = email.Attachments[0].FileName,
            AttachmentType = AttachmentType.File,
            Size = email.Attachments[0].Stream.Length
        };

        var message = new Message
        {
            Subject = "Test",
            Importance = Importance.Low,
            Body = new ItemBody
            {
                ContentType = BodyType.Html,
                Content = "This is a test message for large files."
            },
            IsRead = false,
            From = new Recipient
            {
                EmailAddress = new EmailAddress
                {
                    Address = "emailAddressThatSendTheEmail@outlook.com"
                }
            },
            ToRecipients = new List<Recipient>()
            {
                new Recipient
                {
                    EmailAddress = new EmailAddress
                    {
                        Address =  "emailAddressThatReceiveTheEmail@outlook.com"
                    }
                }
            }
        };

        //Create the draft where I want to Upload the large file as attachment
        Message draft = await _graphServiceClient
             .Users["emailAddressThatSendTheEmail@outlook.com"]
             .Messages
             .Request()
             .AddAsync(message);

        try
        {
            var stream = new MemoryStream(email.Attachments[0].Stream);

            var uploadSession = await _graphServiceClient.Me.Messages[draft.Id].Attachments.CreateUploadSession(attachmentItem).Request().PostAsync();
            var maxChunkSize = 320 * 1024; 
            var provider = new ChunkedUploadProvider(uploadSession, _graphServiceClient, stream, maxChunkSize);

            var chunkRequests = provider.GetUploadChunkRequests();
            var trackedExceptions = new List<Exception>();
            DriveItem itemResult = null;

            //upload the chunks
            foreach (var request in chunkRequests)
            {                   
                var result = await provider.GetChunkRequestResponseAsync(request, trackedExceptions);

                if (result.UploadSucceeded)
                {
                    itemResult = result.ItemResponse;
                }
            }
        }
        catch (Exception ex)
        {
            //Error 
            //{
            //    "error": {
            //        "code": "ErrorInvalidRequest",
            //        "message": "The OData request is not supported.",
            //        "innerError": {
            //                                "request-id": "7822047f-b5ca-4e93-b7ab-63715af04c71",
            //          "date": "2020-03-25T19:47:13"
            //        }
            //    }
            //}
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...