I received a huge response to my previous Article to send a Mail with MS GRAPH API and a lot asking me, “How to add an Attachment” to that Mail. So here we are. Let’s send an Email with a DOCX Attachment with PowerShell and MS GRAPH API.
To learn more from Microsoft GRAPH API, see my Blog Series:
Part 1 – Authentication and Azure App – Use Microsoft Graph API with PowerShell – Part 1 » TechGuy
Part 2 – Oauth2.0 – Use Microsoft Graph API with PowerShell – Part 2 » TechGuy
Part 3 – First Powershell Script to get a Teams Lis and Walkthrough – Use Microsoft Graph API with PowerShell – Part 3 » TechGuy
Part 4 – this one – Use Microsoft Graph API with PowerShell – Part 4 » TechGuy
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. Make sure you see the GitHub Repo for the newest Version.
#Configure Mail Properties
$MailSender = "michael.seidl@au2mator.com"
$Attachment="C:\Users\MichaelSeidlau2mator\OneDrive - Seidl Michael\2-Business\1 - TECHGUY\GitHub\Microsoft-Graph-API-Examples\Hello World.docx"
$Recipient="michael.seidl@au2mator.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
The Result, Mail with Attachment
GitHub Repo
Here you can find the GitHub Repo: Seidlm/Microsoft-Graph-API-Examples (github.com)
Michael Seidl aka Techguy
au2mate everything
Pingback: Send an E-Mail using the MS-Graph PowerShell Commandlets in 3 steps | PowerShell Usergroup Austria
Pingback: Finding Old Snapshots with PowerShell - The Random Admin
don’t forget to set the $tenantID in the code ✌️