Sample code for 30+ languages & platforms
Visual FoxPro

Build a multipart/related MIME Message

See more MIME Examples

Demonstrates how to construct a multipart/related MIME message containing HTML and a related JPG image.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loMime
LOCAL loCrypt
LOCAL loSbContentId
LOCAL loSbHtml
LOCAL lnNumReplacements
LOCAL loHtmlMime
LOCAL loFac
LOCAL loJpgBytes
LOCAL loJpgMime
LOCAL loSbContentIdHdr

lnSuccess = 0

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

* Start with an empty MIME object...
loMime = CreateObject('Chilkat.Mime')

* Initialize it as multipart/related.
loMime.NewMultipartRelated()

* Set a top-level MIME header field.
loMime.SetHeaderField("Subject","Test HTML email with JPG image.")

* Generate a Content-ID.  This will contain random data that will allow
* the HTML's "img" tag to reference the image part in the MIME.
loCrypt = CreateObject('Chilkat.Crypt2')
loCrypt.EncodingMode = "hex"

loSbContentId = CreateObject('Chilkat.StringBuilder')
loSbContentId.Append("part1.")
loSbContentId.Append(loCrypt.GenRandomBytesENC(4))
loSbContentId.Append(".")
loSbContentId.Append(loCrypt.GenRandomBytesENC(4))
loSbContentId.Append("@chilkatsoft.com")

* Create the HTML body.
loSbHtml = CreateObject('Chilkat.StringBuilder')
loSbHtml.Append("<html><head>" + CHR(13) + CHR(10))
loSbHtml.Append('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' + CHR(13) + CHR(10))
loSbHtml.Append("  </head>" + CHR(13) + CHR(10))
loSbHtml.Append('  <body bgcolor="#FFFFFF" text="#000000">' + CHR(13) + CHR(10))
loSbHtml.Append('    <p>This is a test.&nbsp; <img src="cid:CONTENT_ID" height="20" width="20"></p>' + CHR(13) + CHR(10))
loSbHtml.Append("  </body>" + CHR(13) + CHR(10))
loSbHtml.Append("</html>" + CHR(13) + CHR(10))
lnNumReplacements = loSbHtml.Replace("CONTENT_ID",loSbContentId.GetAsString())

* Create the HTML MIME part.
loHtmlMime = CreateObject('Chilkat.Mime')
loHtmlMime.SetBodyFromHtml(loSbHtml.GetAsString())
loHtmlMime.Encoding = "8bit"
loHtmlMime.Charset = "utf-8"

* Load our JPG image from a file.
loFac = CreateObject('Chilkat.FileAccess')

loJpgBytes = loFac.ReadEntireFile("qa_data/jpg/starfish20.jpg")

* Create an image/jpeg MIME part.
loJpgMime = CreateObject('Chilkat.Mime')
loJpgMime.SetBodyFromBinary(loJpgBytes)
* Setting the following properties has the effect of adding
* the Content-Type, Content-Transfer-Encoding, and Content-Disposition header fields.
* These header fields could also be set via the SetHeaderField method, in which case
* the values of the affected properties would be updated.
loJpgMime.ContentType = "image/jpeg"
loJpgMime.Name = "starfish20.jpg"
loJpgMime.Encoding = "base64"
loJpgMime.Disposition = "inline"
loJpgMime.Filename = "starfish20.jpg"

loSbContentIdHdr = CreateObject('Chilkat.StringBuilder')
loSbContentIdHdr.Append("<CONTENT_ID>")
lnNumReplacements = loSbContentIdHdr.Replace("CONTENT_ID",loSbContentId.GetAsString())
loJpgMime.SetHeaderField("Content-ID",loSbContentIdHdr.GetAsString())

* Add both parts as children of the multipart/related
loMime.AppendPart(loHtmlMime)
loMime.AppendPart(loJpgMime)
? loMime.GetMime()

* --------------------------------------------------------------
* --------------------------------------------------------------
* This example builds the following MIME message.  The boundary
* and Content-ID strings contain random data and will be different.  

* Content-Type: multipart/related; boundary="------------A940F1230E6F0105F03DB2CB"
* Subject: Test HTML email with JPG image.
* 
* --------------A940F1230E6F0105F03DB2CB
* Content-Type: text/html; charset="utf-8"
* Content-Transfer-Encoding: 8bit
* 
* <html><head>
* <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
*   </head>
*   <body bgcolor="#FFFFFF" text="#000000">
*     <p>This is a test.&nbsp; <img src="cid:part1.E16AE3B4.1505C436@chilkatsoft.com" height="20" width="20"></p>
*   </body>
* </html>
* 
* --------------A940F1230E6F0105F03DB2CB
* Content-Transfer-Encoding: base64
* Content-Type: image/jpeg; name="starfish20.jpg"
* Content-Disposition: inline; filename="starfish20.jpg"
* Content-ID: <part1.E16AE3B4.1505C436@chilkatsoft.com>
* 
* /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==
* 
* --------------A940F1230E6F0105F03DB2CB--
* 

RELEASE loMime
RELEASE loCrypt
RELEASE loSbContentId
RELEASE loSbHtml
RELEASE loHtmlMime
RELEASE loFac
RELEASE loJpgMime
RELEASE loSbContentIdHdr