Tcl
Tcl
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 Tcl Downloads
load ./chilkat.dll
set success 0
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
set http [new_CkHttp]
# 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).
set jsonToken [new_CkJsonObject]
set success [CkJsonObject_LoadFile $jsonToken "qa_data/tokens/microsoftGraph.json"]
if {$success == 0} then {
puts [CkJsonObject_lastErrorText $jsonToken]
delete_CkHttp $http
delete_CkJsonObject $jsonToken
exit
}
CkHttp_put_AuthToken $http [CkJsonObject_stringOf $jsonToken "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
set email [new_CkEmail]
CkEmail_put_Subject $email "Test Outlook API to Send HTML Email with Attachments"
CkEmail_put_From $email "Mary <mary@somewhere.com>"
CkEmail_AddTo $email "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.)
CkEmail_AddPlainTextAlternativeBody $email "This is a plain-text alternative body..."
# Our HTML will include an image, so add the related image here.
set contentIdStarfish [CkEmail_addRelatedFile $email "qa_data/jpg/starfish.jpg"]
if {[CkEmail_get_LastMethodSuccess $email] == 0} then {
puts [CkEmail_lastErrorText $email]
delete_CkHttp $http
delete_CkJsonObject $jsonToken
delete_CkEmail $email
exit
}
# The src attribute for the image tag is set to the contentIdStarfish:
set sbHtml [new_CkStringBuilder]
CkStringBuilder_Append $sbHtml "<html><body><p>This is an HTML email with an embedded image.</p>"
CkStringBuilder_Append $sbHtml "<p><img src=\"cid:CONTENT_ID_STARFISH\" /></p></body></html>"
set numReplacements [CkStringBuilder_Replace $sbHtml "CONTENT_ID_STARFISH" $contentIdStarfish]
CkEmail_AddHtmlAlternativeBody $email [CkStringBuilder_getAsString $sbHtml]
# Finally, add some attachments to the email.
# Add a file attachment.
set success [CkEmail_AddFileAttachment2 $email "qa_data/pdf/fishing.pdf" "application/pdf"]
if {$success == 0} then {
puts [CkEmail_lastErrorText $email]
delete_CkHttp $http
delete_CkJsonObject $jsonToken
delete_CkEmail $email
delete_CkStringBuilder $sbHtml
exit
}
# Add an attachment where the content is contained in a string.
set content "This is the content of the 2nd attached file."
CkEmail_AddStringAttachment $email "someText.txt" $content
# Get the email as multi-line base64..
set bdMime [new_CkBinData]
CkEmail_GetMimeBd $email $bdMime
# Now get it as multi-line base64
set sbBase64 [new_CkStringBuilder]
CkBinData_GetEncodedSb $bdMime "base64_mime" $sbBase64
# Send the HTTP POST (i.e. send the email)
set resp [new_CkHttpResponse]
set success [CkHttp_HttpSb $http "POST" "https://graph.microsoft.com/v1.0/me/sendMail" $sbBase64 "utf-8" "text/plain" $resp]
if {$success == 0} then {
puts [CkHttp_lastErrorText $http]
delete_CkHttp $http
delete_CkJsonObject $jsonToken
delete_CkEmail $email
delete_CkStringBuilder $sbHtml
delete_CkBinData $bdMime
delete_CkStringBuilder $sbBase64
delete_CkHttpResponse $resp
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 {[CkHttpResponse_get_StatusCode $resp] != 202} then {
set json [new_CkJsonObject]
CkJsonObject_Load $json [CkHttpResponse_bodyStr $resp]
CkJsonObject_put_EmitCompact $json 0
puts [CkJsonObject_emit $json]
puts "Failed, response status code = [CkHttpResponse_get_StatusCode $resp]"
} else {
puts "Outlook Mail Sent."
}
delete_CkHttp $http
delete_CkJsonObject $jsonToken
delete_CkEmail $email
delete_CkStringBuilder $sbHtml
delete_CkBinData $bdMime
delete_CkStringBuilder $sbBase64
delete_CkHttpResponse $resp
delete_CkJsonObject $json