PowerShell
PowerShell
Outlook Send Email using MIME Format
See more Outlook Examples
This example sends an email using MIME format via the Microsoft Graph Outlook REST API.Chilkat PowerShell Downloads
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"
$success = $false
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
$http = New-Object Chilkat.Http
# Use your previously obtained access token here:
# See the following examples for getting an access token:
# Get Microsoft Graph OAuth2 Access Token (Azure AD v2.0 Endpoint).
# Get Microsoft Graph OAuth2 Access Token (Azure AD Endpoint).
# Refresh Access Token (Azure AD v2.0 Endpoint).
# Refresh Access Token (Azure AD Endpoint).
$jsonToken = New-Object Chilkat.JsonObject
$success = $jsonToken.LoadFile("qa_data/tokens/microsoftGraph.json")
if ($success -eq $false) {
$($jsonToken.LastErrorText)
exit
}
$http.AuthToken = $jsonToken.StringOf("access_token")
# To send email, we'll POST to the following endpoint:
#
# POST /users/{id | userPrincipalName}/sendMail
#
# (The special keyword "me" may be used in place of a principal name.)
#
# The body of the POST request will contain the MIME source of the email in base64 format.
# Create a new email object
$email = New-Object Chilkat.Email
$email.Subject = "Test Outlook API to Send HTML Email with Attachments"
$email.From = "Mary <mary@somewhere.com>"
$email.AddTo("Joe","joe@example.com")
# Add a plain-text alternative body, which will likely never be seen.
# (It is shown if the receiving email client is incapable of displaying HTML email.)
$email.AddPlainTextAlternativeBody("This is a plain-text alternative body...")
# Our HTML will include an image, so add the related image here.
$contentIdStarfish = $email.AddRelatedFile("qa_data/jpg/starfish.jpg")
if ($email.LastMethodSuccess -eq $false) {
$($email.LastErrorText)
exit
}
# The src attribute for the image tag is set to the contentIdStarfish:
$sbHtml = New-Object Chilkat.StringBuilder
$sbHtml.Append("<html><body><p>This is an HTML email with an embedded image.</p>")
$sbHtml.Append("<p><img src=`"cid:CONTENT_ID_STARFISH`" /></p></body></html>")
$numReplacements = $sbHtml.Replace("CONTENT_ID_STARFISH",$contentIdStarfish)
$email.AddHtmlAlternativeBody($sbHtml.GetAsString())
# Finally, add some attachments to the email.
# Add a file attachment.
$success = $email.AddFileAttachment2("qa_data/pdf/fishing.pdf","application/pdf")
if ($success -eq $false) {
$($email.LastErrorText)
exit
}
# Add an attachment where the content is contained in a string.
$content = "This is the content of the 2nd attached file."
$email.AddStringAttachment("someText.txt",$content)
# Get the email as multi-line base64..
$bdMime = New-Object Chilkat.BinData
$email.GetMimeBd($bdMime)
# Now get it as multi-line base64
$sbBase64 = New-Object Chilkat.StringBuilder
$bdMime.GetEncodedSb("base64_mime",$sbBase64)
# Send the HTTP POST (i.e. send the email)
$resp = New-Object Chilkat.HttpResponse
$success = $http.HttpSb("POST","https://graph.microsoft.com/v1.0/me/sendMail",$sbBase64,"utf-8","text/plain",$resp)
if ($success -eq $false) {
$($http.LastErrorText)
exit
}
# The send succeeded if the response status code = 202.
# In the success case, there is no response body. (We just get the response code to know that it succeeded.)
if ($resp.StatusCode -ne 202) {
$json = New-Object Chilkat.JsonObject
$json.Load($resp.BodyStr)
$json.EmitCompact = $false
$($json.Emit())
$("Failed, response status code = " + $resp.StatusCode)
}
else {
$("Outlook Mail Sent.")
}