【问题标题】:Microsoft Graph API using uploadsession not able to recieve email with attachments使用上传会话的 Microsoft Graph API 无法接收带附件的电子邮件
【发布时间】:2021-03-04 02:05:43
【问题描述】:

当我尝试使用 Graph API 使用 Uploadsession 时,未收到带有附件的电子邮件。有人可以帮我理解为什么会这样。我没有收到任何错误。

      Message draft = await graphServiceClient.Users["UserID"].Messages.Request().AddAsync(email);
        //Message draft = graphServiceClient.Users["UserID"].Mailfolders.Drafts.Messages.Request().AddAsync(email);

        var stream = System.IO.File.Open(@"C:\attach\DYN28_6579332_33242556.csv", System.IO.FileMode.Open, FileAccess.Read, FileShare.None);
        var attachmentItem = new AttachmentItem
        {
            AttachmentType = AttachmentType.File,
            Name = "DYN28_6579332_33242556.csv",
            Size = stream.Length
        };
        var uploadSession = await graphServiceClient.Users["Userid"].Messages[draft.Id]
                                .Attachments
                                .CreateUploadSession(attachmentItem)
                                .Request()
                                .PostAsync();
        var maxSlicesize = 320 * 1024;
        var largeFileUploadTask = new LargeFileUploadTask<FileAttachment>(uploadSession, stream, maxSlicesize);
        IProgress<long> progress = new Progress<long>(prog => {
            Console.WriteLine($"Uploaded {prog} bytes of {stream.Length} bytes");
        });

            // Upload the file
            var uploadResult = await largeFileUploadTask.UploadAsync(progress);

            if (uploadResult.UploadSucceeded)
            {
            // The ItemResponse object in the result represents the
            // created item.
            //Console.WriteLine($"Upload complete, item ID: {uploadResult.ItemResponse.Id}");
            Console.WriteLine("upload completed");
            }

  Finally sending email with 
                                                                      
                                                                         
  await graphServiceClient.Users["userid"].Messages[draft.Id]
                                  .Send()
                                  .Request()
                                  .PostAsync();

【问题讨论】:

  • 如果你有 S3 下载链接,他们有 ~3MB 的限制。
  • 作为一种解决方法,您可以使用 SMTP 发送邮件,它没有此限制。
  • 或以 ZIP 格式发送
  • 我们最近迁移到了图形 API。以前我们使用没有任何限制的 SMTP。什么是 S3 下载链接?
  • 能否请您给我有关如何使用图形 API 压缩附件并通过电子邮件发送的代码

标签: microsoft-graph-api microsoft-graph-sdks microsoft-graph-mail


【解决方案1】:

Graph API 中单个请求的大小限制为 4MB。要发送更大的附件,您需要首先针对电子邮件消息/日历事件创建一个上传会话,并在此会话中通过多个请求上传您的附件。 AFAIK 每个较小的 POST 请求也需要保持在 4MB 限制以下。

您可以找到更详细的文档和示例演练here

POST https://graph.microsoft.com/v1.0/me/messages/AAMkADI5MAAIT3drCAAA=/attachments/createUploadSession
Content-type: application/json

{
  "AttachmentItem": {
    "attachmentType": "file",
    "name": "flower",
    "size": 3483322
  }
}

【讨论】:

  • 较小的附件应该小于3MB?在我们的场景中,我们有客户数据,有时附件超过 15MB。在这种情况下,它会失败。我们是否有任何其他选项可以在单个邮件中发送所有附件。或者任何版本都需要更新
  • 上传会话用于将大于4MB的文件分段上传到服务器。附件仍作为单个电子邮件消息中的单个项目发送。它仅部分上传到服务器。收件人会将其视为单个文件/项目。
  • 如果您想将多个大文件附加到电子邮件中,您可以为每个文件创建单独的上传会话。单个上传会话用于将大文件分段上传到服务器。您可以同时创建多个会话。上传完附件后,就可以发送邮件了。
  • 我已经尝试使用控制台应用程序通过电子邮件发送大小为 16MB 的大型附件。我能够创建大小和上传会话,起草电子邮件,但我没有收到任何电子邮件。
  • 您能否分享您所面临的错误的屏幕截图?
猜你喜欢
  • 2020-08-08
  • 2022-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多