Sample code for 30+ languages & platforms
Perl

Send HTML Email with Attachments

See more SMTP Examples

Demonstrates how to send an HTML email with file attachments.

Chilkat Perl Downloads

Chilkat2 Perl
use strict;
use warnings;
use Chilkat2;

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

my $mailman = Chilkat2::MailMan->new;

$mailman->SmtpHost('smtp.my-starttls-mail-server.com');

$mailman->SmtpUsername('MY-SMTP-USERNAME');
$mailman->SmtpPassword('MY-SMTP-PASSWORD');

$mailman->StartTLS(1);
$mailman->SmtpPort(587);

# Create a new email object
my $email = Chilkat2::Email->new;
$email->Subject('Test SMTP API to Send HTML Email with Attachments');
$email->From('Joe Programmer <joe@my-starttls-mail-server.com>');
$email->AddTo('Chilkat Support', 'support@chilkatsoft.com');

# Add a plain-text alternative body, which will likely never be seen.
# (It is shown if the receiving email client is incapable of displaying HTML email.)
$email->AddPlainTextAlternativeBody('This is a plain-text alternative body...');

# Our HTML will include an image, so add the related image here.
my $contentIdStarfish = $email->AddRelatedFile('qa_data/jpg/starfish.jpg');
if (!$email->LastMethodSuccess) {
    print $email->LastErrorText, "\n";
    exit;
}

# The src attribute for the image tag is set to the contentIdStarfish:
my $sbHtml = Chilkat2::StringBuilder->new;
$sbHtml->Append('<html><body><p>This is an HTML email with an embedded image.</p>');
$sbHtml->Append('<p><img src="cid:CONTENT_ID_STARFISH" /></p></body></html>');
my $numReplacements = $sbHtml->Replace('CONTENT_ID_STARFISH', $contentIdStarfish);

$email->AddHtmlAlternativeBody($sbHtml->GetAsString());

# Finally, add some attachments to the email.
# Add a file attachment.
my $success = $email->AddFileAttachment2('qa_data/pdf/fishing.pdf', 'application/pdf');
if (!$success) {
    print $email->LastErrorText, "\n";
    exit;
}

# Add an attachment where the content is contained in a string.
my $content = 'This is the content of the 2nd attached file.';
$email->AddStringAttachment('someText.txt', $content);

# Send the HTML email.
$success = $mailman->SendEmail($email);
if (!$success) {
    print $mailman->LastErrorText, "\n";
    exit;
}

$success = $mailman->CloseSmtpConnection();
if (!$success) {
    print "Connection to SMTP server not closed cleanly.\n";
}

print "HTML email with attachments sent!\n";