我想通过图形 API 发送邮件,并按其驱动器项 ID 附加文件。
目前,我可以通过图形 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 答案的参考:通过图形 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 中 资源管理器(图形 API 在您尝试添加时返回错误 引用具有非 HTML 正文内容类型的邮件附件。
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 (=( 事实证明它也不起作用(
另一种解决方案,不是添加附件,而是直接在邮件正文中添加文件链接(让收件人根据需要下载(。