internal/functions/sendmail/Get-MessageJSONFormat.ps1

function Get-MessageJSONFormat {
    [CmdletBinding()]
    param (
        [Parameter(Position = 1, Mandatory = $false)]
        [String]
        $Subject,
        
        [Parameter(Position = 2, Mandatory = $false)]
        [String]
        $Body,
        
        [Parameter(Position = 3, Mandatory = $false)]
        [psobject]
        $SenderEmailAddress,
        
        [Parameter(Position = 5, Mandatory = $false)]
        [psobject]
        $Attachments,
        
        [Parameter(Position = 5, Mandatory = $false)]
        [psobject]
        $ReferanceAttachments,
        
        [Parameter(Position = 6, Mandatory = $false)]
        [psobject]
        $ToRecipients,
        
        [Parameter(Position = 7, Mandatory = $false)]
        [psobject]
        $CcRecipients,
        
        [Parameter(Position = 7, Mandatory = $false)]
        [psobject]
        $bccRecipients,
        
        [Parameter(Position = 8, Mandatory = $false)]
        [psobject]
        $SentDate,
        
        [Parameter(Position = 9, Mandatory = $false)]
        [psobject]
        $StandardPropList,
        
        [Parameter(Position = 10, Mandatory = $false)]
        [psobject]
        $ExPropList,
        
        [Parameter(Position = 11, Mandatory = $false)]
        [switch]
        $ShowRequest,
        
        [Parameter(Position = 12, Mandatory = $false)]
        [String]
        $SaveToSentItems,
        
        [Parameter(Position = 13, Mandatory = $false)]
        [switch]
        $SendMail,
        
        [Parameter(Position = 14, Mandatory = $false)]
        [psobject]
        $ReplyTo,
        
        [Parameter(Position = 17, Mandatory = $false)]
        [bool]
        $RequestReadRecipient,
        
        [Parameter(Position = 18, Mandatory = $false)]
        [bool]
        $RequestDeliveryRecipient
    )
    Begin {
        $NewMessage = "{" + "`r`n"
        if ($SendMail.IsPresent) {
            $NewMessage += " `"Message`" : {" + "`r`n"
        }
        if (![String]::IsNullOrEmpty($Subject)) {
            $NewMessage += "`"Subject`": `"" + $Subject + "`"" + "`r`n"
        }
        if ($SenderEmailAddress -ne $null) {
            if ($NewMessage.Length -gt 5) { $NewMessage += "," }
            $NewMessage += "`"Sender`":{" + "`r`n"
            $NewMessage += " `"EmailAddress`":{" + "`r`n"
            $NewMessage += " `"Name`":`"" + $SenderEmailAddress.Name + "`"," + "`r`n"
            $NewMessage += " `"Address`":`"" + $SenderEmailAddress.Address + "`"" + "`r`n"
            $NewMessage += "}}" + "`r`n"
        }
        if (![String]::IsNullOrEmpty($Body)) {
            if ($NewMessage.Length -gt 5) { $NewMessage += "," }
            $NewMessage += "`"Body`": {" + "`r`n"
            $NewMessage += "`"ContentType`": `"HTML`"," + "`r`n"
            $NewMessage += "`"Content`": `"" + $Body + "`"" + "`r`n"
            $NewMessage += "}" + "`r`n"
        }
        
        $toRcpcnt = 0;
        if ($ToRecipients -ne $null) {
            if ($NewMessage.Length -gt 5) { $NewMessage += "," }
            $NewMessage += "`"ToRecipients`": [ " + "`r`n"
            foreach ($EmailAddress in $ToRecipients) {
                if ($toRcpcnt -gt 0) {
                    $NewMessage += " ,{ " + "`r`n"
                }
                else {
                    $NewMessage += " { " + "`r`n"
                }
                $NewMessage += " `"EmailAddress`":{" + "`r`n"
                $NewMessage += " `"Name`":`"" + $EmailAddress.Name + "`"," + "`r`n"
                $NewMessage += " `"Address`":`"" + $EmailAddress.Address + "`"" + "`r`n"
                $NewMessage += "}}" + "`r`n"
                $toRcpcnt++
            }
            $NewMessage += " ]" + "`r`n"
        }
        $ccRcpcnt = 0
        if ($CcRecipients -ne $null) {
            if ($NewMessage.Length -gt 5) { $NewMessage += "," }
            $NewMessage += "`"CcRecipients`": [ " + "`r`n"
            foreach ($EmailAddress in $CcRecipients) {
                if ($ccRcpcnt -gt 0) {
                    $NewMessage += " ,{ " + "`r`n"
                }
                else {
                    $NewMessage += " { " + "`r`n"
                }
                $NewMessage += " `"EmailAddress`":{" + "`r`n"
                $NewMessage += " `"Name`":`"" + $EmailAddress.Name + "`"," + "`r`n"
                $NewMessage += " `"Address`":`"" + $EmailAddress.Address + "`"" + "`r`n"
                $NewMessage += "}}" + "`r`n"
                $ccRcpcnt++
            }
            $NewMessage += " ]" + "`r`n"
        }
        $bccRcpcnt = 0
        if ($bccRecipients -ne $null) {
            if ($NewMessage.Length -gt 5) { $NewMessage += "," }
            $NewMessage += "`"BccRecipients`": [ " + "`r`n"
            foreach ($EmailAddress in $bccRecipients) {
                if ($bccRcpcnt -gt 0) {
                    $NewMessage += " ,{ " + "`r`n"
                }
                else {
                    $NewMessage += " { " + "`r`n"
                }
                $NewMessage += " `"EmailAddress`":{" + "`r`n"
                $NewMessage += " `"Name`":`"" + $EmailAddress.Name + "`"," + "`r`n"
                $NewMessage += " `"Address`":`"" + $EmailAddress.Address + "`"" + "`r`n"
                $NewMessage += "}}" + "`r`n"
                $bccRcpcnt++
            }
            $NewMessage += " ]" + "`r`n"
        }
        $ReplyTocnt = 0
        if ($ReplyTo -ne $null) {
            if ($NewMessage.Length -gt 5) { $NewMessage += "," }
            $NewMessage += "`"ReplyTo`": [ " + "`r`n"
            foreach ($EmailAddress in $ReplyTo) {
                if ($ReplyTocnt -gt 0) {
                    $NewMessage += " ,{ " + "`r`n"
                }
                else {
                    $NewMessage += " { " + "`r`n"
                }
                $NewMessage += " `"EmailAddress`":{" + "`r`n"
                $NewMessage += " `"Name`":`"" + $EmailAddress.Name + "`"," + "`r`n"
                $NewMessage += " `"Address`":`"" + $EmailAddress.Address + "`"" + "`r`n"
                $NewMessage += "}}" + "`r`n"
                $ReplyTocnt++
            }
            $NewMessage += " ]" + "`r`n"
        }
        if ($RequestDeliveryRecipient) {
            $NewMessage += ",`"IsDeliveryReceiptRequested`": true`r`n"
        }
        if ($RequestReadRecipient) {
            $NewMessage += ",`"IsReadReceiptRequested`": true `r`n"
        }
        if ($StandardPropList -ne $null) {
            foreach ($StandardProp in $StandardPropList) {
                if ($NewMessage.Length -gt 5) { $NewMessage += "," }
                switch ($StandardProp.PropertyType) {
                    "Single" {
                        if ($StandardProp.QuoteValue) {
                            $NewMessage += "`"" + $StandardProp.Name + "`": `"" + $StandardProp.Value + "`"" + "`r`n"
                        }
                        else {
                            $NewMessage += "`"" + $StandardProp.Name + "`": " + $StandardProp.Value + "`r`n"
                        }
                        
                        
                    }
                    "Object" {
                        if ($StandardProp.isArray) {
                            $NewMessage += "`"" + $StandardProp.PropertyName + "`": [ {" + "`r`n"
                        }
                        else {
                            $NewMessage += "`"" + $StandardProp.PropertyName + "`": {" + "`r`n"
                        }
                        $acCount = 0
                        foreach ($PropKeyValue in $StandardProp.PropertyList) {
                            if ($acCount -gt 0) {
                                $NewMessage += ","
                            }
                            $NewMessage += "`"" + $PropKeyValue.Name + "`": `"" + $PropKeyValue.Value + "`"" + "`r`n"
                            $acCount++
                        }
                        if ($StandardProp.isArray) {
                            $NewMessage += "}]" + "`r`n"
                        }
                        else {
                            $NewMessage += "}" + "`r`n"
                        }
                        
                    }
                    "ObjectCollection" {
                        if ($StandardProp.isArray) {
                            $NewMessage += "`"" + $StandardProp.PropertyName + "`": [" + "`r`n"
                        }
                        else {
                            $NewMessage += "`"" + $StandardProp.PropertyName + "`": {" + "`r`n"
                        }
                        foreach ($EnclosedStandardProp in $StandardProp.PropertyList) {
                            $NewMessage += "`"" + $EnclosedStandardProp.PropertyName + "`": {" + "`r`n"
                            foreach ($PropKeyValue in $EnclosedStandardProp.PropertyList) {
                                $NewMessage += "`"" + $PropKeyValue.Name + "`": `"" + $PropKeyValue.Value + "`"," + "`r`n"
                            }
                            $NewMessage += "}" + "`r`n"
                        }
                        if ($StandardProp.isArray) {
                            $NewMessage += "]" + "`r`n"
                        }
                        else {
                            $NewMessage += "}" + "`r`n"
                        }
                    }
                    
                }
            }
        }
        $atcnt = 0
        $processAttachments = $false
        if ($Attachments -ne $null) { $processAttachments = $true }
        if ($ReferanceAttachments -ne $null) { $processAttachments = $true }
        if ($processAttachments) {
            if ($NewMessage.Length -gt 5) { $NewMessage += "," }
            $NewMessage += " `"Attachments`": [ " + "`r`n"
            if ($Attachments -ne $null) {
                foreach ($Attachment in $Attachments) {
                    if ($atcnt -gt 0) {
                        $NewMessage += " ,{" + "`r`n"
                    }
                    else {
                        $NewMessage += " {" + "`r`n"
                    }
                    if ($Attachment.name) {
                        $NewMessage += " `"@odata.type`": `"#Microsoft.OutlookServices.FileAttachment`"," + "`r`n"
                        $NewMessage += " `"Name`": `"" + $Attachment.name + "`"," + "`r`n"
                        $NewMessage += " `"ContentBytes`": `" " + $Attachment.contentBytes + "`"" + "`r`n"
                    }
                    else {
                        $Item = Get-Item $Attachment

                        $NewMessage += " `"@odata.type`": `"#Microsoft.OutlookServices.FileAttachment`"," + "`r`n"
                        $NewMessage += " `"Name`": `"" + $Item.Name + "`"," + "`r`n"
                        $NewMessage += " `"ContentBytes`": `" " + [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($Attachment)) + "`"" + "`r`n"

                    }
                    $NewMessage += " } " + "`r`n"
                    $atcnt++
                    
                }
            }
            $atcnt = 0
            if ($ReferanceAttachments -ne $null) {
                foreach ($Attachment in $ReferanceAttachments) {
                    if ($atcnt -gt 0) {
                        $NewMessage += " ,{" + "`r`n"
                    }
                    else {
                        $NewMessage += " {" + "`r`n"
                    }
                    $NewMessage += " `"@odata.type`": `"#Microsoft.OutlookServices.ReferenceAttachment`"," + "`r`n"
                    $NewMessage += " `"Name`": `"" + $Attachment.Name + "`"," + "`r`n"
                    $NewMessage += " `"SourceUrl`": `"" + $Attachment.SourceUrl + "`"," + "`r`n"
                    $NewMessage += " `"ProviderType`": `"" + $Attachment.ProviderType + "`"," + "`r`n"
                    $NewMessage += " `"Permission`": `"" + $Attachment.Permission + "`"," + "`r`n"
                    $NewMessage += " `"IsFolder`": `"" + $Attachment.IsFolder + "`"" + "`r`n"
                    $NewMessage += " } " + "`r`n"
                    $atcnt++
                }
            }
            $NewMessage += " ]" + "`r`n"
        }
        
        if ($ExPropList -ne $null) {
            if ($NewMessage.Length -gt 5) { $NewMessage += "," }
            $NewMessage += "`"SingleValueExtendedProperties`": [" + "`r`n"
            $propCount = 0
            foreach ($Property in $ExPropList) {
                if ($propCount -eq 0) {
                    $NewMessage += "{" + "`r`n"
                }
                else {
                    $NewMessage += ",{" + "`r`n"
                }
                if ($Property.PropertyType -eq "Tagged") {
                    $NewMessage += "`"PropertyId`":`"" + $Property.DataType + " " + $Property.Id + "`", " + "`r`n"
                }
                else {
                    if ($Property.Type -eq "String") {
                        $NewMessage += "`"PropertyId`":`"" + $Property.DataType + " " + $Property.Guid + " Name " + $Property.Id + "`", " + "`r`n"
                    }
                    else {
                        $NewMessage += "`"PropertyId`":`"" + $Property.DataType + " " + $Property.Guid + " Id " + $Property.Id + "`", " + "`r`n"
                    }
                }
                if ($Property.Value -eq "null") {
                    $NewMessage += "`"Value`":null" + "`r`n"
                }
                else {
                    $NewMessage += "`"Value`":`"" + $Property.Value + "`"" + "`r`n"
                }                
                $NewMessage += " } " + "`r`n"
                $propCount++
            }
            $NewMessage += "]" + "`r`n"
        }
        if (![String]::IsNullOrEmpty($SaveToSentItems)) {
            $NewMessage += "} ,`"SaveToSentItems`": `"" + $SaveToSentItems.ToLower() + "`"" + "`r`n"
        }
        $NewMessage += "}"
        if ($ShowRequest.IsPresent) {
            Write-Host $NewMessage
        }
        return, $NewMessage
    }
}