API Reference and Permissions
The official documentation is here:
- Send mail – Microsoft Graph v1.0 | Microsoft Docs
- fileAttachment resource type – Microsoft Graph v1.0 | Microsoft Docs
Azure App Registration Rights:
- Mail.Send
The PowerShell Script to send Mail with Attachment using MS GRAPH API
That’s the Script on using PowerShell with MS GRAPH API to send a Mail with an Attachment.
#Configure Mail Properties
$MailSender = "sender@company.com"
$Attachment = "C:\Users\you\OneDrive - test_folder\Hello World.docx"
$Recipient = "recipient@company.com"
#Get File Name and Base64 string
$FileName = (Get-Item -Path $Attachment).name
$base64string = [Convert]::ToBase64String([IO.File]::ReadAllBytes($Attachment))
#Connect to GRAPH API
$tokenBody = @{
Grant_Type = "client_credentials"
Scope = "https://graph.microsoft.com/.default"
Client_Id = $clientId
Client_Secret = $clientSecret
}
$tokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantID/oauth2/v2.0/token" -Method POST -Body $tokenBody
$headers = @{
"Authorization" = "Bearer $($tokenResponse.access_token)"
"Content-type" = "application/json"
}
#Send Mail
$URLsend = "https://graph.microsoft.com/v1.0/users/$MailSender/sendMail"
$BodyJsonsend = @"
{
"message": {
"subject": "Hello World from Microsoft Graph API",
"body": {
"contentType": "HTML",
"content": "This Mail is sent via Microsoft <br>
GRAPH <br>
API<br>
and an Attachment <br>
"
},
"toRecipients": [
{
"emailAddress": {
"address": "$Recipient"
}
}
]
,"attachments": [
{
"@odata.type": "#microsoft.graph.fileAttachment",
"name": "$FileName",
"contentType": "text/plain",
"contentBytes": "$base64string"
}
]
},
"saveToSentItems": "false"
}
"@
Invoke-RestMethod -Method POST -Uri $URLsend -Headers $headers -Body $BodyJsonsend