SQL Server
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-generatedckx-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
-- 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