gpt4 book ai didi

microsoft-graph-api - Microsoft Graph API 邮件消息中附件的 3 MB 限制是累积的吗?

转载 作者:行者123 更新时间:2023-12-05 03:49:07 26 4
gpt4 key购买 nike

我使用 Microsoft Graph .NET Client Library 发送邮件已经有一段时间了,它运行良好,但今天我注意到一个非常奇怪的问题。

截至今天,这里是附件的基本规则...

  • 如果文件大小小于 3 MB,对附件执行单个 POSTOutlook 项目的导航属性;看看如何做到这一点消息或事件。成功的 POST 响应包括 ID文件附件。
  • 如果文件大小在 3MB 到 150MB 之间,创建上传 session ,并迭代使用 PUT 上传范围文件的字节数,直到您上传了整个文件。标题在最终成功的 PUT 响应中包含一个带有附件 ID。

https://learn.microsoft.com/en-us/graph/outlook-large-attachments?tabs=http

非常简单。如果附件小于 3 MB,我只是将其包含在邮件中。如果超过,我会创建一个上传 session 。

现在是问题。如果有多个附件总大小超过该限制,我会收到以下消息...

支持的最大请求长度为 4MB。

为了尝试解决这个问题,我在达到累积限制后开始为其余文件上传 session 。但是,我随后收到以下错误消息...

消息:附件大小必须大于最小大小。

这是因为上传 session 有最小大小限制。

快速回顾:当总数超过最大限制时,我无法上传多个小附件。我无法通过 session 上传它们,因为它低于最低限制。有没有人注意到这个问题?

使用 Microsoft Graph 客户端库 v3.6

最佳答案

下面的代码适用于总数 > 4 Mb:

Message draft = await _GraphClient
.Users[UserPrincipalNameOrId]
.MailFolders
.Drafts
.Messages
.Request()
//.WithMaxRetry(5)
.AddAsync(emailToSend);

foreach (var attachment in Attachments)
{
if (attachment.FullPath != null)
{
FileInfo f = new FileInfo(attachment.FullPath);
if (f.Length < MINIMUM_SIZE_FOR_UPLOAD_SESSION) // 3 Mo
{
string mimeType = MimeTypes.MimeTypeMap.GetMimeType(f.Extension);
FileAttachment fileAttachment = new FileAttachment
{
ODataType = "#microsoft.graph.fileAttachment",
ContentBytes = System.IO.File.ReadAllBytes(attachment.FullPath),
ContentType = mimeType,
ContentId = f.Name,
Name = f.Name
};
await _GraphClient
.Users[UserPrincipalNameOrId]
.Messages[draft.Id]
.Attachments
.Request()
.AddAsync(fileAttachment);
}
else
{
// Attachments >= 3 Mb
using (var filestream = System.IO.File.Open(attachment.FullPath, System.IO.FileMode.Open, FileAccess.Read, FileShare.None))
{
var attachmentItem = new AttachmentItem
{
AttachmentType = AttachmentType.File,
Name = Path.GetFileName(filestream.Name),
Size = filestream.Length
};

var uploadSession = await _GraphClient
.Users[UserPrincipalNameOrId]
.Messages[draft.Id]
.Attachments
.CreateUploadSession(attachmentItem)
.Request()
.PostAsync();

var maxSliceSize = 320 * 1024; // 320 KB - Change this to your slice size. 5MB is the default.
var largeFileUploadTask = new LargeFileUploadTask<FileAttachment>(uploadSession, filestream, maxSliceSize);

// upload away with relevant callback
IProgress<long> progressCallback = new Progress<long>(prog => { });
try
{
var uploadResult = await largeFileUploadTask.UploadAsync(progressCallback);
if (!uploadResult.UploadSucceeded)
{
// error
}
}
catch (ServiceException e)
{
// exception
}
} // using()
}
}
}

await _GraphClient
.Users[UserPrincipalNameOrId]
.Messages[draft.Id]
.Send()
.Request()
.WithMaxRetry(5)
.PostAsync();

关于microsoft-graph-api - Microsoft Graph API 邮件消息中附件的 3 MB 限制是累积的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64110229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com