要发送带有大附件的邮件吗?

时间:2019-02-13 15:27:13

标签: php microsoft-graph

我希望使用图形API发送带有大附件(最大20MB)的电子邮件。有什么方法可以发送带有大附件的电子邮件?

先前使用Graph的尝试导致发现4MB上传限制。或者,我也曾考虑将文件上传到OneDrive并通过引用将其附加,但我相信会遇到相同的4MB限制。

此限制排除了Microsoft Graph。

我听说旧的Outlook REST API能够处理大文件上载,但是,我今天似乎找不到任何访问Outlook REST API的方法,它似乎已被弃用。此外,我很快从Microsoft阅读的所有文档都鼓励您使用新的Graph API。

从Azure门户看,似乎没有办法让我的应用程序通过Outlook API进行身份验证,这在任何地方都是不可行的。

在此提供参考的是我与Graph API一起使用的相关代码段。

$mailBody = ...
'attachments' => [
    [
        '@odata.type' => '#microsoft.graph.fileAttachment',
        'Name' => 'file.docx',
        'ContentBytes' => $localFile
    ]
 ]
     ...

$response = $this->getGraph()->createRequest("POST", "/users/{primary-user}/sendMail")
                ->attachBody($mailBody)
                ->execute();

1 个答案:

答案 0 :(得分:1)

您可以使用Upload Session将大于4MB的文件上传到OneDrive。上载会话可让您分块发送文件,而不必一次发送整个文件。整个文件上传完毕后,会话将关闭,并且该文件在云端硬盘上可用。

将文件上传到OneDrive之后,您可以将其作为referenceAttachment附加到电子邮件中。

您还将希望使用不同的Create MessageUpdate MessageSend Message方法,而不是简化的sendMail。因此,您的工作流程将如下所示:

  1. Create the messagePOST /users/{id}/messages):
  2. Add the attachmentPOST /users/{id}/messages/{id}/attachments
  3. Send the messagePOST /users/{id}/messages/{id}/send

人们普遍误以为Outlook REST API是与Microsoft Graph完全不同的API。虽然肯定没有在Graph上公开Outlook REST API的某些功能,但它们是幕后的相同API。

Microsoft Graph实际上是一个API聚合器,而不是API本身(无用的琐事:Graph通常由缩写词AGS称为“聚合器服务”)。对于基本调用,Graph只需将调用路由到基础API并以规范化的OData格式重写响应。 Graph变得有趣的地方是在更复杂的调用中,它可以执行诸如将调用路由到多个基础API,然后将结果合并在一起的操作。

如果您想知道它在做什么,可以将?whatif添加到呼叫中,并且Graph还将返回其路由的基础工作负载,而不是实际结果(即https://graph.microsoft.com/v1.0/me?whatif)。