Отправить письмо с вложением через Powershell Graph API - PullRequest
0 голосов
/ 28 июня 2018

В настоящее время я пытаюсь отправить письмо с помощью автоматического скрипта Powershell с использованием GraphAPI от Microsoft.

Вот полная история: мне нужно каждые 15 минут проверять почту, полученную в почтовом ящике Office 365, получать конкретное вложение файла (фильтровать по имени), загружать файл и повторно отправлять его с новым письмом.

Все работает, но я не могу отправить новое письмо с вложением (Работает без вложения).

Вот мой код:

    $date = (get-date).ToUniversalTime().AddMinutes(-15).ToString("yyyy-MM-ddTHH:mm:ssZ")
    $Uri = "https://graph.microsoft.com/v1.0/me/messages"
    $UriSend = "https://graph.microsoft.com/v1.0/me/sendMail"
    $filter = "?`$select=Id,ReceivedDateTime&`$filter=HasAttachments eq true and ReceivedDateTime ge " + $date 
    $url = $Uri + $filter

    $Result = (Invoke-RestMethod -Method Get -Headers $requestheader -Uri $url)

    if($Result.value){ 
    ## Loop through each results 
    foreach ($message in $Result.value) 
    { 
        # get attachments and save to file system 
        $query = $Uri + "/" + $message.Id + "/attachments" 
        $attachments = (Invoke-RestMethod -Method Get -Headers $requestheader -Uri $query)

        # in case of multiple attachments in email 
        foreach ($attachment in $attachments.value) 
    { 
        $patternPDF = "FAX AR document\.pdf$"
        if($attachment.Name -match $patternPDF)
        {
            $name = $message.ReceivedDateTime -replace "T","-"
            $name = $name -replace "Z",""
            $name = $name -replace ":","-"
            $path = "c:\Temp\" + $name + ".pdf"

            # Creation of the PDF file
            $Content = [System.Convert]::FromBase64String($attachment.ContentBytes) 
            Set-Content -Path $path -Value $Content -Encoding Byte


            $file = Get-Content $path -Encoding Byte -ReadCount 0

            #Send File by Mail
            $body = 
                @"
                {
                "message" : {
                    "subject": "AR Fax",
                    "body" : {
                        "contentType": "Text",
                        "content": "Accusé Fax"
                    },
                    "toRecipients": [
                    {
                        "emailAddress" : {
                            "address" : "mail@domain.com"
                         }
                    }
                    ],
                    "attachments":[
                        {
                            "@@odata.type":"#microsoft.graph.fileAttachment",
                            "name":"Fax_AR.pdf",
                            "contentType":"application/pdf",
                            "contentBytes":"$file"
                         }
                    ]
                },
                "saveToSentItems": "true"
                }
"@
            # Invokes the request
            Invoke-RestMethod -Headers $requestheader -Uri $uriSend -Method Post -Body $body 

Я не очень хорош в powershell (или вообще в коде), поэтому, пожалуйста, будьте снисходительны ^^

РЕДАКТИРОВАТЬ: я нашел другой способ сделать то, что я хочу (сейчас я печатаю файл)

1 Ответ

0 голосов
/ 24 июля 2018

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

...