Sample code for 30+ languages & platforms
Perl

SendGrid HTML Email with Embedded Images

See more SendGrid Examples

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

Chilkat Perl Downloads

Perl
use chilkat();

$success = 0;

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

$req = chilkat::CkHttpRequest->new();
$http = chilkat::CkHttp->new();

# 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;" />
$bdJpg = chilkat::CkBinData->new();
$success = $bdJpg->LoadFile("qa_data/jpg/starfish.jpg");
if ($success == 0) {
    print "Failed to load JPG file." . "\r\n";
    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.
$sbHtml = chilkat::CkStringBuilder->new();
$sbHtml->Append("<html><body><b>This is a test<b><br /><img src=\"data:image/jpeg;base64,");
# Append the base64 image data to sbHtml.
$bdJpg->GetEncodedSb("base64",$sbHtml);
$sbHtml->Append("\" alt=\"\" style=\"border-width:0px;\" /></body></html>");

$json = chilkat::CkJsonObject->new();
$json->UpdateString("personalizations[0].to[0].email",'matt@chilkat.io');
$json->UpdateString("personalizations[0].to[0].name","Matt");
$json->UpdateString("from.email",'admin@chilkatsoft.com');
$json->UpdateString("subject","Test HTML email with images");
$json->UpdateString("content[0].type","text/html");
$json->UpdateSb("content[0].value",$sbHtml);

$http->put_AuthToken("SENDGRID_API_KEY");

$resp = chilkat::CkHttpResponse->new();
$success = $http->HttpJson("POST","https://api.sendgrid.com/v3/mail/send",$json,"application/json",$resp);
if ($success == 0) {
    print $http->lastErrorText() . "\r\n";
    exit;
}

print "response status code: " . $resp->get_StatusCode() . "\r\n";
# 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.)
print $resp->bodyStr() . "\r\n";