php - Graph API:通过驱动器项目ID发送带有附件的邮件?
问题描述
我想通过 Graph API 发送邮件并通过其驱动器项 ID 附加文件。
目前,我可以通过 Graph API 成功发送电子邮件并附加本地服务器上的文件。
但是该文件源自 OneDrive,因此目前的情况是我必须将文件下载到我的服务器,然后通过 sendMail 端点将其作为附件重新上传,然后将其从我的服务器中删除。
如果可以只提供文件 ID 并让 office 365 在本地解决所有问题,这似乎是一个不需要的步骤。
$mailBody = ...
'attachments' => [
[
'@odata.type' => '#microsoft.graph.fileAttachment',
'Name' => 'file.docx',
'ContentBytes' => $localFile
// 'DriveID' => 'possibly this instead of Content Bytes?'
]
]
...
$response = $this->getGraph()->createRequest("POST", "/users/{primary-user}/sendMail")
->attachBody($mailBody)
->execute();
解决方案
您可以通过其驱动器项 ID 附加文件,它称为referenceAttachment但不是代码中的 fileAttachment。v1.0 版对referenceAttachment 的支持非常有限。我的意思是,除了承认存在一个之外,你对它们无能为力。
来自 egorbunov 答案的参考:通过 Graph API 将参考附件发送到电子邮件
Create the message draft using POST request to https://graph.microsoft.com/beta/me/messages with payload: { "subject": "TestMessage", "toRecipients": [ { "emailAddress":{ "address":"egor-mailbox@ya.ru" } } ], "body": { "contentType": "html", "content": "<b>Hello!</b>" } }, As a response you will get the whole message structure with id set to something like
AQMkADAwATMwMAItMTJkYi03YjFjLTAwAi0wMAoARgAAA_hRKmxc6QpJks9QJkO5R50HAP6mz4np5UJHkvaxWZjGproAAAIBDwAAAP6mz4np5UJHkvaxWZjGproAAAAUZT2jAAAA。让我们将其称为 {messageID}。注意:如您所见,我已经通过了 html 类型的正文。这是必需的,因为(至少在 GraphAPI Explorer 中)如果您尝试将参考附件添加到具有非 html 正文内容类型的消息,则图形 api 会返回错误。
After that you can create an attachment using POST request to https://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 } After step 2 you will see created message in your mailbox Drafts folder. To send it use
https://graph.microsoft.com/beta/me/messages/ {messageID}/send (=(结果它也不起作用)
另一种解决方案,不添加附件,而是直接在邮件正文中添加文件链接(让收件人根据需要下载)。
推荐阅读
- javascript - 我可以接受带有 Javascript 的警报吗?
- javascript - 具有背景图像到 png 转换的 SVG/Canvas 提供黑色背景
- java - 当我在 google kubernetes 引擎上运行我的应用程序时,我得到 org.springframework.web.client.HttpClientErrorException$Forbidden: 403 Forbidden 错误
- c# - 在工作人员服务 .net 5 中检测到 Windows 关闭/注销/登录
- c++ - 在没有正则表达式的 C++ 中用专门的文字解析整数
- powershell - Powershell 在 pscustomobject 元素中添加顺序编号
- android - java.lang.RuntimeException: java.lang.IllegalAccessException: 类 androidx.test.espresso.base.ThreadPoolExecutorExtractor$2
- python - Jupyter notebook 在使用 Conda 安装时不断要求选择应用程序来打开 .py 文件?
- c# - C# 找不到与程序在同一目录中的文件
- multithreading - 在 Rust 中,我如何转储恐慌的结果!由 join() 返回?