首页 > 解决方案 > 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();

标签: phpmicrosoft-graph-api

解决方案


您可以通过其驱动器项 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 (=(结果它也不起作用)

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


推荐阅读