Sample code for 30+ languages & platforms
SQL Server

Fetch Full Email Given Email Header

When you fetch email headers using UIDs instead of sequence numbers, the email object (which includes only the header) will have auto-generated ckx-imap-* headers. These headers provide details like the UID and attachments. The IMAP UID is found in the ckx-imap-uid header. Additionally, the ckx-imap-isUid header indicates whether the email header was downloaded by UID, showing YES or NO. Since sequence numbers can change if emails are deleted, UIDs are essential for downloading the correct full email.

The Chilkat Email object offers a GetImapUid method to retrieve the UID from the ckx-imap-uid header. This UID can be used to fetch the full email.

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
    -- 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 requires the Chilkat API to have been previously unlocked.
    -- See Global Unlock Sample for sample code.

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

    -- Connect to an IMAP server.
    -- Use TLS
    EXEC sp_OASetProperty @imap, 'Ssl', 1
    EXEC sp_OASetProperty @imap, 'Port', 993
    EXEC sp_OAMethod @imap, 'Connect', @success OUT, 'imap.example.com'
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @imap, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @imap
        RETURN
      END

    -- Login
    EXEC sp_OAMethod @imap, 'Login', @success OUT, '***', '***'
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @imap, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @imap
        RETURN
      END

    -- Select an IMAP mailbox
    EXEC sp_OAMethod @imap, 'SelectMailbox', @success OUT, 'Inbox'
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @imap, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @imap
        RETURN
      END

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

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

    DECLARE @uid int
    SELECT @uid = 2014
    DECLARE @isUid int
    SELECT @isUid = 1

    -- Fetch only the email header
    EXEC sp_OAMethod @imap, 'FetchEmail', @success OUT, 1, @uid, @isUid, @emailHeader
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @imap, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @imap
        EXEC @hr = sp_OADestroy @emailHeader
        EXEC @hr = sp_OADestroy @emailFull
        RETURN
      END

    -- Now fetch the full email
    DECLARE @uidFromCkxHeader int
    EXEC sp_OAMethod @emailHeader, 'GetImapUid', @uidFromCkxHeader OUT
    IF @uidFromCkxHeader < 0
      BEGIN
        -- Failed. 

        PRINT 'No ckx-imap-uid header was found.'
        EXEC @hr = sp_OADestroy @imap
        EXEC @hr = sp_OADestroy @emailHeader
        EXEC @hr = sp_OADestroy @emailFull
        RETURN
      END

    EXEC sp_OAMethod @imap, 'FetchEmail', @success OUT, 0, @uid, @isUid, @emailFull
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @imap, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @imap
        EXEC @hr = sp_OADestroy @emailHeader
        EXEC @hr = sp_OADestroy @emailFull
        RETURN
      END

    -- OK, we have the full email, do whatever we want...

    -- Disconnect from the IMAP server.
    EXEC sp_OAMethod @imap, 'Disconnect', @success OUT

    EXEC @hr = sp_OADestroy @imap
    EXEC @hr = sp_OADestroy @emailHeader
    EXEC @hr = sp_OADestroy @emailFull


END
GO