Sample code for 30+ languages & platforms
C

Add Image to HTML Email

See more Email Object Examples

Demonstrates how to add an image to an HTML email.

Chilkat C Downloads

C
#include <C_CkEmail.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkEmail email;
    const char *html;
    const char *pathInHtml;
    const char *pathOnDisk;

    success = FALSE;

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

    email = CkEmail_Create();

    CkEmail_putFrom(email,"Matt <matt@example.com>");
    CkEmail_AddTo(email,"Joe","joe@example.com");
    CkEmail_putSubject(email,"This is a test");

    //  Add an HTML body with an image tag.
    html = "<html><body><p>Test with image:</p><p><img src=\"/wildlife/starfish.jpg\" /></p></body></html>";
    CkEmail_SetHtmlBody(email,html);

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

    success = CkEmail_AddRelatedFile2(email,pathOnDisk,pathInHtml);
    if (success == FALSE) {
        printf("%s\n",CkEmail_lastErrorText(email));
        CkEmail_Dispose(email);
        return;
    }

    //  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 = CkEmail_SaveEml(email,"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.

    printf("%s\n",CkEmail_getMime(email));

    //  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--


    CkEmail_Dispose(email);

    }