Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(SQL Server) Search IMAP Mailbox for Email Matching CriteriaSearching an IMAP mailbox for messages that match search criteria.
-- 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) -- This example requires the Chilkat API to have been previously unlocked. -- See Global Unlock Sample for sample code. DECLARE @imap int -- Use "Chilkat_9_5_0.Imap" for versions of Chilkat < 10.0.0 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 DECLARE @success int EXEC sp_OAMethod @imap, 'Connect', @success OUT, 'imap.someMailServer.com' IF @success <> 1 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, 'myLogin', 'myPassword' IF @success <> 1 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 <> 1 BEGIN EXEC sp_OAGetProperty @imap, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @imap RETURN END DECLARE @messageSet int -- We can choose to fetch UIDs or sequence numbers. DECLARE @fetchUids int SELECT @fetchUids = 1 -- Here are examples of different search criteria: -- Return all messages. DECLARE @allMsgs nvarchar(4000) SELECT @allMsgs = 'ALL' -- Search for already-answered emails. DECLARE @answered nvarchar(4000) SELECT @answered = 'ANSWERED' -- Search for messages on a specific date. -- The date string is DD-Month-YYYY where Month is -- Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, or Dec. DECLARE @onDate nvarchar(4000) SELECT @onDate = 'SENTON 05-Mar-2007' -- Search for messages between two dates. SENTBEFORE -- finds emails sent before a date, and SENTSINCE finds -- email sent on or after a date. The "AND" operation -- is implied by joining criteria, separated by spaces. DECLARE @betweenDates nvarchar(4000) SELECT @betweenDates = 'SENTSINCE 01-Mar-2007 SENTBEFORE 05-Mar-2007' -- Another example of AND: find all unanswered emails -- sent after 04-Mar-2007 with "Problem" in the subject: DECLARE @complexSearch1 nvarchar(4000) SELECT @complexSearch1 = 'UNANSWERED SENTSINCE 04-Mar-2007 Subject "Problem"' -- Find messages with a specific string in the body: DECLARE @bodySearch nvarchar(4000) SELECT @bodySearch = 'BODY "problem solved"' -- Using OR. The syntax is OR <criteria1> <criteria2>. -- The "OR" comes first, followed by each criteria. -- For example, to match all emails with "Help" or "Question" in the subject. -- You'll notice that literal strings may be quoted or unquoted. -- If a literal contains SPACE characters, quote it: DECLARE @orSearch nvarchar(4000) SELECT @orSearch = 'OR SUBJECT Help SUBJECT Question' -- ---------------------------------------------- -- Strings are case-insensitive when searching.... -- ---------------------------------------------- -- Find all emails sent from yahoo.com addresses: DECLARE @fromSearch nvarchar(4000) SELECT @fromSearch = 'FROM yahoo.com' -- Find all emails sent from anyone with "John" in their name: DECLARE @johnSearch nvarchar(4000) SELECT @johnSearch = 'FROM John' -- Find emails with the RECENT flag set: DECLARE @recentSearch nvarchar(4000) SELECT @recentSearch = 'RECENT' -- Find emails that don't have the recent flag set: DECLARE @notRecentSearch nvarchar(4000) SELECT @notRecentSearch = 'NOT RECENT' -- This is synonymous with "OLD": DECLARE @oldSearch nvarchar(4000) SELECT @oldSearch = 'OLD' -- Find all emails marked for deletion: DECLARE @markedForDeleteSearch nvarchar(4000) SELECT @markedForDeleteSearch = 'DELETED' -- Find all emails having a specified header field with a value -- containing a substring: DECLARE @headerSearch nvarchar(4000) SELECT @headerSearch = 'HEADER DomainKey-Signature paypal.com' -- Find any emails having a specific header field. If the -- 2nd argument to the "HEADER" criteria is an empty string, -- any email having the header field is returned regardless -- of the header field's content. -- Find any emails with a DomainKey-Signature field: DECLARE @headerExistsSearch nvarchar(4000) SELECT @headerExistsSearch = 'HEADER DomainKey-Signature ""' -- Find NEW emails: these are emails that have the RECENT flag -- set, but not the SEEN flag: DECLARE @newSearch nvarchar(4000) SELECT @newSearch = 'NEW' -- Find emails larger than a certain number of bytes: DECLARE @sizeLargerSearch nvarchar(4000) SELECT @sizeLargerSearch = 'LARGER 500000' -- Find emails marked as seen or not already seen: DECLARE @seenSearch nvarchar(4000) SELECT @seenSearch = 'SEEN' DECLARE @notSeenSearch nvarchar(4000) SELECT @notSeenSearch = 'NOT SEEN' -- Find emails having a given substring in the TO header field: DECLARE @toSearch nvarchar(4000) SELECT @toSearch = 'TO support@chilkatsoft.com' -- A more long-winded way to do the same thing: DECLARE @toSearch2 nvarchar(4000) SELECT @toSearch2 = 'HEADER TO support@chilkatsoft.com' -- Find emails smaller than a size in bytes: DECLARE @smallerSearch nvarchar(4000) SELECT @smallerSearch = 'SMALLER 30000' -- Find emails that have a substring anywhere in the header -- or body: DECLARE @fullSubstringSearch nvarchar(4000) SELECT @fullSubstringSearch = 'TEXT "Zip Component"' -- Pass any of the above strings here to test a search: EXEC sp_OAMethod @imap, 'Search', @messageSet OUT, @orSearch, @fetchUids EXEC sp_OAGetProperty @imap, 'LastMethodSuccess', @iTmp0 OUT IF @iTmp0 = 0 BEGIN EXEC sp_OAGetProperty @imap, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @imap RETURN END -- Fetch the email headers into a bundle object: DECLARE @bundle int EXEC sp_OAMethod @imap, 'FetchHeaders', @bundle OUT, @messageSet EXEC sp_OAGetProperty @imap, 'LastMethodSuccess', @iTmp0 OUT IF @iTmp0 = 0 BEGIN EXEC @hr = sp_OADestroy @messageSet EXEC sp_OAGetProperty @imap, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @imap RETURN END -- Display the Subject and From of each email. DECLARE @i int SELECT @i = 0 EXEC sp_OAGetProperty @bundle, 'MessageCount', @iTmp0 OUT WHILE @i < @iTmp0 BEGIN DECLARE @email int EXEC sp_OAMethod @bundle, 'GetEmail', @email OUT, @i EXEC sp_OAMethod @email, 'GetHeaderField', @sTmp0 OUT, 'Date' PRINT @sTmp0 EXEC sp_OAGetProperty @email, 'Subject', @sTmp0 OUT PRINT @sTmp0 EXEC sp_OAGetProperty @email, 'From', @sTmp0 OUT PRINT @sTmp0 PRINT '--' EXEC @hr = sp_OADestroy @email SELECT @i = @i + 1 END -- Disconnect from the IMAP server. EXEC sp_OAMethod @imap, 'Disconnect', @success OUT EXEC @hr = sp_OADestroy @messageSet EXEC @hr = sp_OADestroy @bundle EXEC @hr = sp_OADestroy @imap END GO |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.