图形 API:按驱动器项目 ID 发送带有附件的邮件?



我想通过图形 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 (=( 事实证明它也不起作用(

另一种解决方案,不是添加附件,而是直接在邮件正文中添加文件链接(让收件人根据需要下载(。

相关内容

最新更新