我已经使用微软图形.NET客户端库发送邮件消息很长一段时间,它一直工作很好,但今天我注意到一个非常奇怪的问题。
到今天为止,这里是附件的基本规则。
的URL。
https://learn.microsoft.com/en-us/graph/outlook-large-attachments?tabs=http
太简单了。如果附件小于3MB,我只需将其包含在消息中即可。如果是更多的话,我会创建一个上传会话。
现在是问题所在。如果有多个附件加到超过此限制的总大小,我将收到以下消息.
支持的最大请求长度为4MB。
为了解决这个问题,在达到累积限制之后,我开始为其余的文件上传会话。但是,我随后收到以下错误消息.
消息:附件大小必须大于最小大小。
这是因为上传会话有一个最小的大小。
快速重述:当总数超过最大限制时,我不能上传多个小附件。我不能上传他们与一个会话,因为这是少于最低限度。有人注意到这个问题了吗?
使用v3.6
发布于 2021-05-18 11:00:48
以下代码适用于总计>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();发布于 2020-10-09 11:05:40
不确定这能不能用。但是您可以尝试将电子邮件保存为模板,并使用API将附件添加到模板中。然后发送模板。
看起来这个限制是对电话大小的限制,而不是对邮件大小的限制。
https://stackoverflow.com/questions/64110229
复制相似问题