Sample code for 30+ languages & platforms
SQL Server

Convert HTML Web Page to Email and Send

See more MHT / HTML Email Examples

Converts an HTML page at a URL into an email with embedded images and sends it.

Chilkat SQL Server Downloads

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    DECLARE @iTmp0 int
    -- Important: Do not use nvarchar(max).  See the warning about using nvarchar(max).
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

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

    DECLARE @mailman int
    EXEC @hr = sp_OACreate 'Chilkat.MailMan', @mailman OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    -- The MHT component can be used to convert an HTML page
    -- from a URL, file, or in-memory HTML into an email
    -- with embedded images and style sheets.
    DECLARE @mht int
    EXEC @hr = sp_OACreate 'Chilkat.Mht', @mht OUT

    DECLARE @email int
    EXEC @hr = sp_OACreate 'Chilkat.Email', @email OUT

    -- There are two ways of embedding images in emails: with CIDs
    -- and without.  When using CIDs, the IMG SRC attributes use
    -- urls that begin with "cid:" and the corresponding image
    -- embedded within the email includes a Content-ID header field.
    -- When not using CIDs, the IMG SRC attribute can have a URL,
    -- path, etc. and the corresponding image embedded within
    -- the email has a matching Content-Location header field.

    -- When testing with GMail, if CIDs are used the email will
    -- be displayed with images blocked (by default) unless
    -- the user allows them to be displayed.  Without CIDs,
    -- the images are automatically displayed.

    -- When testing with Eudora, Mozilla Thunderbird, and Outlook Express, 
    -- embedded images display correctly with our without CIDs.

    -- When testing with Yahoo! Mail, embedded images display OK.
    -- However, the Yahoo! Mail user has the option of blocking
    -- images.  If this is turned on, the CID images will still 
    -- display correctly even though images are blocked.  Why?
    -- It's because when viewing the email there is no external
    -- HTTP request to fetch an image.  Therefore, a spammer 
    -- cannot get an indication that you've read the email. 
    -- However, if CIDs are not used, the images are blocked by 
    -- any Yahoo! Mail user that has image blocking turned on --
    -- even though the images are embedded.

    -- I haven't tested Hotmail yet...
    -- Regardless, there is no perfect solution.  If CIDs are used,
    -- GMail users may block your embedded images, if CIDs are not
    -- used, Yahoo! Mail users may block your embedded images.

    -- I recommend setting using CIDs.  This is what Mozilla Thunderbird
    -- does by default, and it's the more clear an unambiguous way
    -- to indicate that images are indeed embedded.
    EXEC sp_OASetProperty @mht, 'UseCids', 1

    DECLARE @emlStr nvarchar(4000)
    EXEC sp_OAMethod @mht, 'GetEML', @emlStr OUT, 'http://www.bonairefishing.com/'
    EXEC sp_OAGetProperty @mht, 'LastMethodSuccess', @iTmp0 OUT
    IF @iTmp0 <> 1
      BEGIN
        EXEC sp_OAGetProperty @mht, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @mailman
        EXEC @hr = sp_OADestroy @mht
        EXEC @hr = sp_OADestroy @email
        RETURN
      END

    EXEC sp_OAMethod @email, 'SetFromMimeText', @success OUT, @emlStr
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @email, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @mailman
        EXEC @hr = sp_OADestroy @mht
        EXEC @hr = sp_OADestroy @email
        RETURN
      END

    EXEC sp_OASetProperty @email, 'Subject', 'Test HTML email'

    -- This example is tested in:
    -- Outlook 2000, Eudora 7, Mozilla Thunderbird 1.5.0.9, Outlook Express 6, GMail, Yahoo Mail
    EXEC sp_OAMethod @email, 'AddTo', @success OUT, 'Chilkat Support', 'support@chilkatsoft.com'

    -- Note: Chilkat does not regularly check our GMail and Yahoo
    -- email accounts.  Please send support email to support@chilkatsoft.com
    EXEC sp_OAMethod @email, 'AddTo', @success OUT, 'Chilkat on Yahoo', 'chilkat_software@yahoo.com'
    EXEC sp_OAMethod @email, 'AddTo', @success OUT, 'Chilkat on GMail', 'chilkat.support@gmail.com'

    EXEC sp_OASetProperty @email, 'From', 'chilkat@live.com'

    -- Send email using smtp.live.com
    EXEC sp_OASetProperty @mailman, 'SmtpHost', 'smtp.live.com'
    EXEC sp_OASetProperty @mailman, 'SmtpUsername', 'chilkat@live.com'
    EXEC sp_OASetProperty @mailman, 'SmtpPassword', 'myPassword'
    EXEC sp_OASetProperty @mailman, 'SmtpPort', 587
    EXEC sp_OASetProperty @mailman, 'StartTLS', 1

    EXEC sp_OAMethod @mailman, 'SendEmail', @success OUT, @email
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @mailman, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @mailman
        EXEC @hr = sp_OADestroy @mht
        EXEC @hr = sp_OADestroy @email
        RETURN
      END

    EXEC sp_OAMethod @mailman, 'CloseSmtpConnection', @success OUT
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @mailman, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @mailman
        EXEC @hr = sp_OADestroy @mht
        EXEC @hr = sp_OADestroy @email
        RETURN
      END


    PRINT 'HTML Email Sent!'

    EXEC @hr = sp_OADestroy @mailman
    EXEC @hr = sp_OADestroy @mht
    EXEC @hr = sp_OADestroy @email


END
GO