Я пытаюсь отправлять электронные письма с большим количеством вложений с помощью 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"
// }
// }
//}
}
}