API Graph: отправлять почту с вложением по идентификатору диска - PullRequest
0 голосов
/ 09 октября 2018

Я хочу отправить письмо через Graph API и прикрепить файл по его идентификатору элемента диска.

В данный момент я могу успешно отправить письмо через Graph API и прикрепитьфайл, который находится на моем локальном сервере.

Однако файл создается на OneDrive, поэтому в настоящее время мне нужно загрузить файл на свой сервер, затем повторно загрузить его через конечную точку sendMail в качестве вложения, а затем удалитьэто с моего сервера.

Это кажется ненужным шагом, если можно просто указать идентификатор файла и разрешить офису 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();

1 Ответ

0 голосов
/ 10 октября 2018

Вы можете прикрепить файл по его идентификатору элемента диска, он называется 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) graph 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(= (оказывается, это тоже не работает)

Альтернативное решение: не добавлять вложение, а напрямую добавлять ссылку на файл в теле письма (пусть получатель загружает его по мере необходимости).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...