Sample code for 30+ languages & platforms
Tcl

Send HTML Email with External CSS as Related Item

See more SMTP Examples

Demonstrates how to compose an HTML email with an external CSS file included as a related item and referenced by CID (Content-ID).

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

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

# The mailman object is used for sending and receiving email.
set mailman [new_CkMailMan]

# Use your SMTP server hostname.  This example uses office365, but it could be any SMTP server..
CkMailMan_put_SmtpHost $mailman "outlook.office365.com"
CkMailMan_put_SmtpPort $mailman 587
CkMailMan_put_StartTLS $mailman 1

# Set the SMTP login/password
CkMailMan_put_SmtpUsername $mailman "OFFICE365-SMTP-LOGIN"
CkMailMan_put_SmtpPassword $mailman "OFFICE365-SMTP-PASSWORD"

# Create a new email object
set email [new_CkEmail]

CkEmail_put_Subject $email "HTML Email with embedded CSS"
CkEmail_put_From $email "Chilkat Support <my-office365-user@mydomain.com>"
CkEmail_AddTo $email "Chilkat Support" "support@chilkatsoft.com"

set sbCss [new_CkStringBuilder]

set bCrlf 1
CkStringBuilder_AppendLine $sbCss "body {" $bCrlf
CkStringBuilder_AppendLine $sbCss "    background-color: powderblue;" $bCrlf
CkStringBuilder_AppendLine $sbCss "}" $bCrlf
CkStringBuilder_AppendLine $sbCss "h1 {" $bCrlf
CkStringBuilder_AppendLine $sbCss "    color: blue;" $bCrlf
CkStringBuilder_AppendLine $sbCss "}" $bCrlf
CkStringBuilder_AppendLine $sbCss "p {" $bCrlf
CkStringBuilder_AppendLine $sbCss "    color: red;" $bCrlf
CkStringBuilder_AppendLine $sbCss "}" $bCrlf

# It's possible to add a CSS file directly by calling AddRelatedFile.
# This example will add the CSS from a string.
set filenameInHtml "styles.css"
set contentIdCss [CkEmail_addRelatedString $email $filenameInHtml [CkStringBuilder_getAsString $sbCss] "utf-8"]
if {[CkEmail_get_LastMethodSuccess $email] != 1} then {
    puts [CkEmail_lastErrorText $email]
    delete_CkMailMan $mailman
    delete_CkEmail $email
    delete_CkStringBuilder $sbCss
    exit
}

# The src attribute for the image tag is set to the contentIdCss:
set sbHtml [new_CkStringBuilder]

CkStringBuilder_AppendLine $sbHtml "<!DOCTYPE html>" $bCrlf
CkStringBuilder_AppendLine $sbHtml "<html>" $bCrlf
CkStringBuilder_AppendLine $sbHtml "<head>" $bCrlf
CkStringBuilder_AppendLine $sbHtml "  <link rel=\"stylesheet\" href=\"cid:CONTENT_ID_CSS\">" $bCrlf
CkStringBuilder_AppendLine $sbHtml "</head>" $bCrlf
CkStringBuilder_AppendLine $sbHtml "<body>" $bCrlf
CkStringBuilder_AppendLine $sbHtml "" $bCrlf
CkStringBuilder_AppendLine $sbHtml "<h1>This is a heading</h1>" $bCrlf
CkStringBuilder_AppendLine $sbHtml "<p>This is a paragraph.</p>" $bCrlf
CkStringBuilder_AppendLine $sbHtml "" $bCrlf
CkStringBuilder_AppendLine $sbHtml "</body>" $bCrlf
CkStringBuilder_AppendLine $sbHtml "</html>" $bCrlf

set numReplacements [CkStringBuilder_Replace $sbHtml "CONTENT_ID_CSS" $contentIdCss]

CkEmail_SetHtmlBody $email [CkStringBuilder_getAsString $sbHtml]

set success [CkMailMan_SendEmail $mailman $email]
if {$success != 1} then {
    puts [CkMailMan_lastErrorText $mailman]
} else {
    puts "Mail Sent!"
}


delete_CkMailMan $mailman
delete_CkEmail $email
delete_CkStringBuilder $sbCss
delete_CkStringBuilder $sbHtml