我希望使用图形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();
答案 0 :(得分:1)
您可以使用Upload Session将大于4MB的文件上传到OneDrive。上载会话可让您分块发送文件,而不必一次发送整个文件。整个文件上传完毕后,会话将关闭,并且该文件在云端硬盘上可用。
将文件上传到OneDrive之后,您可以将其作为referenceAttachment
附加到电子邮件中。
您还将希望使用不同的Create Message,Update Message和Send Message方法,而不是简化的sendMail
。因此,您的工作流程将如下所示:
POST /users/{id}/messages
):POST /users/{id}/messages/{id}/attachments
)POST /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
)。