Sample code for 30+ languages & platforms
Xojo Plugin

Add Image to HTML Email

See more Email Object Examples

Demonstrates how to add an image to an HTML email.

Chilkat Xojo Plugin Downloads

Xojo Plugin
Dim success As Boolean
success = False

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

Dim email As New Chilkat.Email

email.From = "Matt <matt@example.com>"
success = email.AddTo("Joe","joe@example.com")
email.Subject = "This is a test"

// Add an HTML body with an image tag.
Dim html As String
html = "<html><body><p>Test with image:</p><p><img src=""/wildlife/starfish.jpg"" /></p></body></html>"
email.SetHtmlBody html

// Add the image data from a file.  The pathInHtml must match the value of the img tag's src attribute.
Dim pathInHtml As String
pathInHtml = "/wildlife/starfish.jpg"
// The actual path of the JPG file in the local filesystem:
Dim pathOnDisk As String
pathOnDisk = "qa_data/jpg/starfish20.jpg"

success = email.AddRelatedFile2(pathOnDisk,pathInHtml)
If (success = False) Then
    System.DebugLog(email.LastErrorText)
    Return
End If

// The email is now properly constructed with an image that will be visible in the HTML.
// In this example, we'll save it to a .eml file and verify by loading the .eml in an email client such as Mozilla Thunderbird.

success = email.SaveEml("qa_output/starfish.eml")

// Also, we can examine the MIME to understand how the image data in the MIME is associated with the img tag in the HTML.
// It is the Content-Location header value that must match the value of the img tag's src attribute.

System.DebugLog(email.GetMime())

// Here's the MIME:

// MIME-Version: 1.0
// Date: Thu, 26 May 2022 11:09:12 -0500
// Message-ID: <B1D499F74F533E287BFE04BBD79AAF1D973B61E3@SLICE>
// Content-Type: multipart/related; boundary="------------000205040704010904010706"
// X-Priority: 3 (Normal)
// From: Matt <matt@example.com>
// To: Joe <joe@example.com>
// Subject: This is a test
// 
// --------------000205040704010904010706
// Content-Type: text/html; charset=us-ascii
// Content-Transfer-Encoding: 7bit
// 
// <html><body><p>Test with image:</p><p><img src="/wildlife/starfish.jpg" /></p></body></html>
// --------------000205040704010904010706
// Content-Type: image/jpeg; name="/wildlife/starfish.jpg"
// Content-Transfer-Encoding: base64
// Content-Disposition: inline; filename="/wildlife/starfish.jpg"
// Content-Location: /wildlife/starfish.jpg
// 
// /9j/4AAQSkZJRgABAQEASABIAAD//gAmRmlsZSB3cml0dGVuIGJ5IEFkb2JlIFBob3Rvc2hvcD8g
// NC4w/9sAQwAQCwwODAoQDg0OEhEQExgoGhgWFhgxIyUdKDozPTw5Mzg3QEhcTkBEV0U3OFBtUVdf
// YmdoZz5NcXlwZHhcZWdj/9sAQwEREhIYFRgvGhovY0I4QmNjY2NjY2NjY2NjY2NjY2NjY2NjY2Nj
// Y2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Nj/8IAEQgAFAAUAwERAAIRAQMRAf/EABcAAAMBAAAA
// AAAAAAAAAAAAAAIDBAX/xAAYAQADAQEAAAAAAAAAAAAAAAABAgMEAP/aAAwDAQACEAMQAAAB2kZY
// NNEijWKddfTmLgALWH//xAAbEAACAgMBAAAAAAAAAAAAAAABAgMRAAQSE//aAAgBAQABBQL0XqN+
// pM2aqJGMiqFFCyg7z//EABwRAAICAgMAAAAAAAAAAAAAAAERAAIQIQMSUf/aAAgBAwEBPwHqU5aq
// Axx+y1tMQl4elj//xAAcEQEAAQUBAQAAAAAAAAAAAAABEQACEBIhA1H/2gAIAQIBAT8B3Bhqy7Zc
// enyiwmGgDhiOzj//xAAdEAABAwUBAAAAAAAAAAAAAAABAAIREBIhIkFR/9oACAEBAAY/ArZyn+Cg
// xtxWuJaoCnqDuin/xAAcEAABBAMBAAAAAAAAAAAAAAABABEhYRAxQVH/2gAIAQEAAT8hkEwPUUR9
// DYfE4nxtRpIkBTsayuALIiuY/9oADAMBAAIAAwAAABDWPTsf/8QAGhEAAwADAQAAAAAAAAAAAAAA
// AAEREDFBIf/aAAgBAwEBPxC0DVPcWm+Ce4OesrkE6bjH/8QAGBEBAQEBAQAAAAAAAAAAAAAAAREA
// QRD/2gAIAQIBAT8QahMiOc8YgSrnTY3ELclHXn//xAAcEAEBAAIDAQEAAAAAAAAAAAABEQAhMUFx
// EFH/2gAIAQEAAT8Qn3igmSZSj+c4N4zapMy9IjFV98wncN2iuLFsCEbDGxQkI6RO/n//2Q==
// 
// --------------000205040704010904010706--