通过Powershell Graph API发送带有附件的邮件

时间:2018-06-28 15:03:26

标签: powershell office365api

我目前正在尝试使用Microsoft的GraphAPI使用自动Powershell脚本发送邮件。

这里是全文:我需要每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 :(得分:0)

我找到了另一种方法来做我想做的(我现在打印文件) 所以我要关闭主题。