SQL Server
SQL Server
Iterate MIME Parts of an Email
See more Email Object Examples
Demonstrates how to iterate over the MIME sub-parts of an email, and retrieve the content of each MIME sub-part body.Note: This example requires some new features added to Chilkat v9.5.0.95.
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
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.
-- See the following Chilkat post to Quickly Understand Email MIME
DECLARE @email int
EXEC @hr = sp_OACreate 'Chilkat.Email', @email OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OAMethod @email, 'LoadEml', @success OUT, 'qa_data/eml/sample.eml'
IF @success = 0
BEGIN
PRINT 'Failed to load .eml'
EXEC @hr = sp_OADestroy @email
RETURN
END
DECLARE @sbContentType int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbContentType OUT
DECLARE @caseSensitive int
SELECT @caseSensitive = 0
-- Get the total number of non-multipart MIME sub-parts.
-- (This is a simple way of iterating over all the MIME leaf parts regardless of the MIME tree structure)
DECLARE @inlineOnly int
SELECT @inlineOnly = 0
DECLARE @excludeAttachments int
SELECT @excludeAttachments = 0
DECLARE @searchSpec nvarchar(4000)
SELECT @searchSpec = '*/*'
DECLARE @numParts int
EXEC sp_OAMethod @email, 'GetNumPartsOfType', @numParts OUT, @searchSpec, @inlineOnly, @excludeAttachments
DECLARE @i int
SELECT @i = 0
WHILE @i < @numParts
BEGIN
-- What is the Content-Type of this MIME part?
EXEC sp_OAMethod @email, 'GetNthContentType', @sTmp0 OUT, @i, @searchSpec, @inlineOnly, @excludeAttachments
EXEC sp_OAMethod @sbContentType, 'Append', @success OUT, @sTmp0
EXEC sp_OAMethod @sbContentType, 'StartsWith', @iTmp0 OUT, 'text/', @caseSensitive
IF @iTmp0 = 1
BEGIN
-- Get the text body of this MIME part.
DECLARE @textBody nvarchar(4000)
EXEC sp_OAMethod @email, 'GetNthTextPartOfType', @textBody OUT, @i, @searchSpec, @inlineOnly, @excludeAttachments
EXEC sp_OAMethod @sbContentType, 'GetAsString', @sTmp0 OUT
PRINT 'Got text body for ' + @sTmp0
END
ELSE
BEGIN
EXEC sp_OAMethod @sbContentType, 'ContentsEqual', @iTmp0 OUT, 'message/rfc822', @caseSensitive
IF @iTmp0 = 1
BEGIN
-- If the Content-Type is message/rfc822, then the MIME body for this part contains a full embedded MIME messages.
-- Your application could load it into a Chilkat email object and recursively process...
DECLARE @attachedEmail int
EXEC @hr = sp_OACreate 'Chilkat.Email', @attachedEmail OUT
DECLARE @bdMime int
EXEC @hr = sp_OACreate 'Chilkat.BinData', @bdMime OUT
EXEC sp_OAMethod @email, 'GetNthBinaryPartOfTypeBd', @success OUT, @i, @searchSpec, @inlineOnly, @excludeAttachments, @bdMime
EXEC sp_OAMethod @attachedEmail, 'SetFromMimeBd', @success OUT, @bdMime
-- Now your app can recursively process the attachedEmail...
END
ELSE
BEGIN
-- Get the bytes of this MIME body part.
DECLARE @bd int
EXEC @hr = sp_OACreate 'Chilkat.BinData', @bd OUT
EXEC sp_OAMethod @email, 'GetNthBinaryPartOfTypeBd', @success OUT, @i, @searchSpec, @inlineOnly, @excludeAttachments, @bd
EXEC sp_OAMethod @sbContentType, 'GetAsString', @sTmp0 OUT
EXEC sp_OAGetProperty @bd, 'NumBytes', @iTmp0 OUT
PRINT 'Got binary body for ' + @sTmp0 + ' numBytes = ' + @iTmp0
END
END
EXEC sp_OAMethod @sbContentType, 'Clear', NULL
SELECT @i = @i + 1
END
EXEC @hr = sp_OADestroy @email
EXEC @hr = sp_OADestroy @sbContentType
EXEC @hr = sp_OADestroy @attachedEmail
EXEC @hr = sp_OADestroy @bdMime
EXEC @hr = sp_OADestroy @bd
END
GO