【问题标题】:Send reference attachment to email via Graph API通过 Graph API 将参考附件发送到电子邮件
【发布时间】:2018-11-14 11:30:36
【问题描述】:

Graph API 有 4MB 的请求限制,所以如果我想发送带有 10MB 附件的电子邮件,我不能使用 FileAttachment 类型。据我了解,推荐的方法是使用ReferenceAttachment,它带有指向已上传到OneDrive 的文件的链接(它确实接受大型有效负载)。但是,当我这样做时,我可以在已发送项目中看到 ReferenceAttachment(并且可以完整下载),但附件不存在于目的地(Gmail 或 Outlook)。

我正在使用此 URL 调用 beta API:

https://graph.microsoft.com/beta/users/USERNAME/microsoft.graph.sendMail

发布的内容是:

{
  "saveToSentItems": true,
  "message": {
    "attachments": [
      {
        "sourceUrl": "https://100255-my.sharepoint.com/personal/USERNAME/Documents/sent-attachments/largefile.txt_6T7sHv5E",
        "permission": "view",
        "providerType": "oneDriveConsumer",
        "name": "largefile.txt",
        "contentType": "text/plain",
        "@odata.type": "#microsoft.graph.referenceAttachment"
      }
    ],
    "subject": "Test E-Mail",
    "toRecipients": [
      {
        "emailAddress": {
          "address": "me@gmail.com"
        }
      }
    ]
  }
}

如何确保电子邮件收件人收到附件?

编辑: 当我使用providerType: onDriveBusiness 时,我会走得更远。我收到一个无法理解的二进制附件(winmail.datnoname)和主电子邮件,然后是带有链接的辅助电子邮件,要求我在 Microsoft 开一个帐户,以便我可以查看共享文件。第二封邮件的主题是:

USERNAME wants to share the file largefile.txt_6T7sHv5E with you

请注意,这就是 gmail 发生的情况。当我在连接到 Exchange 的 Windows 上使用 Outlook 客户端时,我没有收到附件,也没有收到第二封电子邮件。呸!

真是闲话!我的企业(搜索和救援)不可能接受这个 API,因为电子邮件收件人有明显的障碍!我可以将完整的电子邮件重建为一封没有难以理解的二进制附件且无需在 Microsoft 上创建帐户的电子邮件吗?

【问题讨论】:

  • @ArunV 的评论:感谢您报告此问题,我们将进行调查并回复。此外,我想与您分享我们正在努力支持 Graph API 上的大型附件并计划在今年晚些时候发布的更新。 我已将其复制到此处,因为答案与此有关信息已被版主删除(正确)。

标签: microsoft-graph-api outlook-restapi


【解决方案1】:

DISCLAMER:我已经开始写答案,但在最后一步发现它并不能解决问题。决定留下它以供参考。至少可以得出结论,/messages/{messageID}/send 端点也是错误的。

阅读图形 API documentation 让我建议下一步以实现您的目标:

  1. 使用POSThttps://graph.microsoft.com/beta/me/messages 的请求和有效负载创建消息草稿:

    {
        "subject": "TestMessage",
        "toRecipients": [
            {
                "emailAddress":{
                    "address":"egor-mailbox@ya.ru"
                }
            }
        ],
        "body": {
            "contentType": "html",
            "content": "<b>Hello!</b>"
        }
    },
    

    作为响应,您将获得将id 设置为AQMkADAwATMwMAItMTJkYi03YjFjLTAwAi0wMAoARgAAA_hRKmxc6QpJks9QJkO5R50HAP6mz4np5UJHkvaxWZjGproAAAIBDwAAAP6mz4np5UJHkvaxWZjGproAAAAUZT2jAAAA 之类的整个消息结构。让我们将其称为{messageID}注意:如您所见,我已经通过了 html 类型的正文。这是必需的,因为(至少在 GraphAPI Explorer 中)如果您尝试将参考附件添加到具有非 html 正文内容类型的消息,则图形 api 会返回错误。

  2. 之后,您可以使用POSThttps://graph.microsoft.com/beta/me/messages/{messageID}/attachments 请求创建附件

    {
        "@odata.type": "#microsoft.graph.referenceAttachment",
        "name": "AttachmentName",
        "sourceUrl": "https://1drv.ms/u/s!ASDLKASDLASHDLASKDLJAXCXZ_DASD",
        "providerType": "oneDriveConsumer",
        "isFolder": false
    }
    
  3. 在步骤2 之后,您将在邮箱Drafts 文件夹中看到已创建的消息。要发送它,请使用https://graph.microsoft.com/beta/me/messages/{messageID}/send(=(结果它也不起作用)

【讨论】:

    【解决方案2】:

    有没有人碰巧知道 OneDrive 之外的“providerType”还有哪些选项?似乎找不到文档。想知道它是否支持 Azure Blob 存储。

    【讨论】:

    猜你喜欢
    • 2016-07-19
    • 2016-11-30
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 2015-07-23
    • 1970-01-01
    相关资源
    最近更新 更多