Sample code for 30+ languages & platforms
Tcl

SendGrid HTML Email with Embedded Images

See more SendGrid Examples

Demonstrates how to send an HTML email with embedded images using SendGrid.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

# This requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code

set req [new_CkHttpRequest]

set http [new_CkHttp]

# First.. load a JPG file and build an HTML img tag with the JPG data inline encoded.
# Our HTML img tag will look like this:
# <img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEA3ADcAA..." alt="" style="border-width:0px;" />
set bdJpg [new_CkBinData]

set success [CkBinData_LoadFile $bdJpg "qa_data/jpg/starfish.jpg"]
if {$success == 0} then {
    puts "Failed to load JPG file."
    delete_CkHttpRequest $req
    delete_CkHttp $http
    delete_CkBinData $bdJpg
    exit
}

# Note: HTML containing embedded base64 image data may not be visible in all email clients.
# For example, GMail might not display the image, but viewing in Outlook might be OK.
set sbHtml [new_CkStringBuilder]

CkStringBuilder_Append $sbHtml "<html><body><b>This is a test<b><br /><img src=\"data:image/jpeg;base64,"
# Append the base64 image data to sbHtml.
CkBinData_GetEncodedSb $bdJpg "base64" $sbHtml
CkStringBuilder_Append $sbHtml "\" alt=\"\" style=\"border-width:0px;\" /></body></html>"

set json [new_CkJsonObject]

CkJsonObject_UpdateString $json "personalizations[0].to[0].email" "matt@chilkat.io"
CkJsonObject_UpdateString $json "personalizations[0].to[0].name" "Matt"
CkJsonObject_UpdateString $json "from.email" "admin@chilkatsoft.com"
CkJsonObject_UpdateString $json "subject" "Test HTML email with images"
CkJsonObject_UpdateString $json "content[0].type" "text/html"
CkJsonObject_UpdateSb $json "content[0].value" $sbHtml

CkHttp_put_AuthToken $http "SENDGRID_API_KEY"

set resp [new_CkHttpResponse]

set success [CkHttp_HttpJson $http "POST" "https://api.sendgrid.com/v3/mail/send" $json "application/json" $resp]
if {$success == 0} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkHttpRequest $req
    delete_CkHttp $http
    delete_CkBinData $bdJpg
    delete_CkStringBuilder $sbHtml
    delete_CkJsonObject $json
    delete_CkHttpResponse $resp
    exit
}

puts "response status code: [CkHttpResponse_get_StatusCode $resp]"
# Display the response.
# If successful, the response code is 202 and the response body string is empty.
# (The response body string may also be empty for error response codes.)
puts [CkHttpResponse_bodyStr $resp]

delete_CkHttpRequest $req
delete_CkHttp $http
delete_CkBinData $bdJpg
delete_CkStringBuilder $sbHtml
delete_CkJsonObject $json
delete_CkHttpResponse $resp