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) Outlook -- Search Messages in a Particular FolderDemonstrates search the messages in a particular Outlook mailbox folder. This uses the OData $filter and $search system query options. See OData System Query Options for general information.
Also see OData URL Conventions for information about $filter, $search and other query options. This example demonstrates the following searches:
This example applies to: Exchange Online | Office 365 | Hotmail.com | Live.com | MSN.com | Outlook.com | Passport.com
-- 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 @http int -- Use "Chilkat_9_5_0.Http" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END -- Use your previously obtained access token here: -- See the following examples for getting an access token: -- Get Microsoft Graph OAuth2 Access Token (Azure AD v2.0 Endpoint). -- Get Microsoft Graph OAuth2 Access Token (Azure AD Endpoint). -- Refresh Access Token (Azure AD v2.0 Endpoint). -- Refresh Access Token (Azure AD Endpoint). EXEC sp_OASetProperty @http, 'AuthToken', 'MICROSOFT_GRAPH_ACCESS_TOKEN' DECLARE @sbResponse int -- Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbResponse OUT -- In this example, we'd like to get the messages in the folder "/Inbox", -- but we must specify the corresponding folder_id. The best way to do this is to create -- a local map of folderPaths-to-folderIds. -- This example does it: Create Outlook Folder Map) DECLARE @htFolderMap int -- Use "Chilkat_9_5_0.Hashtable" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Hashtable', @htFolderMap OUT DECLARE @sbMap int -- Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbMap OUT DECLARE @success int EXEC sp_OAMethod @sbMap, 'LoadFile', @success OUT, 'qa_data/outlook/folderMap.xml', 'utf-8' EXEC sp_OAMethod @htFolderMap, 'AddFromXmlSb', @success OUT, @sbMap -- Get the ID for the "/Inbox" folder: DECLARE @folderId nvarchar(4000) EXEC sp_OAMethod @htFolderMap, 'LookupStr', @folderId OUT, '/Inbox' EXEC sp_OAGetProperty @htFolderMap, 'LastMethodSuccess', @iTmp0 OUT IF @iTmp0 <> 1 BEGIN PRINT 'Folder ID not found' EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @sbResponse EXEC @hr = sp_OADestroy @htFolderMap EXEC @hr = sp_OADestroy @sbMap RETURN END DECLARE @success int SELECT @success = 1 DECLARE @json int -- Use "Chilkat_9_5_0.JsonObject" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @json OUT EXEC sp_OASetProperty @json, 'EmitCompact', 0 EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'folder_id', @folderId EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'select', 'subject,from' -- ----------------------------------------------------------------------------------------------------- -- Only return emails from "chilkat.support@gmail.com" EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'filter', 'from/emailAddress/address eq ''chilkat.support@gmail.com''' -- To return the full content of each email, omit the "&select=..." part of the URL. EXEC sp_OAMethod @http, 'QuickGetSb', @success OUT, 'https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}', @sbResponse EXEC sp_OAGetProperty @http, 'LastStatus', @iTmp0 OUT IF (@success <> 1) and (@iTmp0 = 0) BEGIN EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @sbResponse EXEC @hr = sp_OADestroy @htFolderMap EXEC @hr = sp_OADestroy @sbMap EXEC @hr = sp_OADestroy @json RETURN END EXEC sp_OAMethod @json, 'LoadSb', @success OUT, @sbResponse EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT PRINT @sTmp0 -- ----------------------------------------------------------------------------------------------------- -- Only return emails where the subject contains "Amazon" EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'filter', 'contains(subject,''Amazon'')' EXEC sp_OAMethod @http, 'QuickGetSb', @success OUT, 'https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}', @sbResponse EXEC sp_OAGetProperty @http, 'LastStatus', @iTmp0 OUT IF (@success <> 1) and (@iTmp0 = 0) BEGIN EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @sbResponse EXEC @hr = sp_OADestroy @htFolderMap EXEC @hr = sp_OADestroy @sbMap EXEC @hr = sp_OADestroy @json RETURN END EXEC sp_OAMethod @json, 'LoadSb', @success OUT, @sbResponse EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT PRINT @sTmp0 -- ----------------------------------------------------------------------------------------------------- -- Only return emails where the subject starts with "this email" and the from address is support@chilkatsoft.com -- (the startswith function is case insensitive) EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'filter', 'startswith(subject,''this email'') and (from/emailAddress/address eq ''support@chilkatsoft.com'')' EXEC sp_OAMethod @http, 'QuickGetSb', @success OUT, 'https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}', @sbResponse EXEC sp_OAGetProperty @http, 'LastStatus', @iTmp0 OUT IF (@success <> 1) and (@iTmp0 = 0) BEGIN EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @sbResponse EXEC @hr = sp_OADestroy @htFolderMap EXEC @hr = sp_OADestroy @sbMap EXEC @hr = sp_OADestroy @json RETURN END EXEC sp_OAMethod @json, 'LoadSb', @success OUT, @sbResponse EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT PRINT @sTmp0 -- ----------------------------------------------------------------------------------------------------- -- Only return emails received within the last 24 hours DECLARE @sbExpression int -- Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbExpression OUT EXEC sp_OAMethod @sbExpression, 'Append', @success OUT, 'receivedDateTime ge ' DECLARE @dt int -- Use "Chilkat_9_5_0.CkDateTime" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.CkDateTime', @dt OUT EXEC sp_OAMethod @dt, 'SetFromCurrentSystemTime', @success OUT EXEC sp_OAMethod @dt, 'AddDays', @success OUT, -1 EXEC sp_OAMethod @dt, 'GetAsTimestamp', @sTmp0 OUT, 0 EXEC sp_OAMethod @sbExpression, 'Append', @success OUT, @sTmp0 EXEC sp_OAMethod @sbExpression, 'GetAsString', @sTmp0 OUT EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'filter', @sTmp0 EXEC sp_OAMethod @http, 'QuickGetSb', @success OUT, 'https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}', @sbResponse EXEC sp_OAGetProperty @http, 'LastStatus', @iTmp0 OUT IF (@success <> 1) and (@iTmp0 = 0) BEGIN EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @sbResponse EXEC @hr = sp_OADestroy @htFolderMap EXEC @hr = sp_OADestroy @sbMap EXEC @hr = sp_OADestroy @json EXEC @hr = sp_OADestroy @sbExpression EXEC @hr = sp_OADestroy @dt RETURN END EXEC sp_OAMethod @json, 'LoadSb', @success OUT, @sbResponse EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT PRINT @sTmp0 -- ----------------------------------------------------------------------------------------------------- -- Only return emails received in October 2016 DECLARE @dtObj int -- Use "Chilkat_9_5_0.DtObj" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.DtObj', @dtObj OUT EXEC sp_OASetProperty @dtObj, 'Year', 2016 EXEC sp_OASetProperty @dtObj, 'Month', 10 EXEC sp_OASetProperty @dtObj, 'Day', 1 EXEC sp_OASetProperty @dtObj, 'Utc', 1 EXEC sp_OAMethod @dt, 'SetFromDtObj', @success OUT, @dtObj EXEC sp_OAMethod @sbExpression, 'Clear', NULL EXEC sp_OAMethod @sbExpression, 'Append', @success OUT, '(receivedDateTime ge ' EXEC sp_OAMethod @dt, 'GetAsTimestamp', @sTmp0 OUT, 0 EXEC sp_OAMethod @sbExpression, 'Append', @success OUT, @sTmp0 EXEC sp_OAMethod @sbExpression, 'Append', @success OUT, ') and (receivedDateTime lt ' EXEC sp_OASetProperty @dtObj, 'Month', 11 EXEC sp_OAMethod @dt, 'SetFromDtObj', @success OUT, @dtObj EXEC sp_OAMethod @dt, 'GetAsTimestamp', @sTmp0 OUT, 0 EXEC sp_OAMethod @sbExpression, 'Append', @success OUT, @sTmp0 EXEC sp_OAMethod @sbExpression, 'Append', @success OUT, ')' -- This is the expression we just built: (receivedDateTime ge 2016-10-01T00:00:00Z) and (receivedDateTime lt 2016-11-01T00:00:00Z) EXEC sp_OAMethod @sbExpression, 'GetAsString', @sTmp0 OUT PRINT @sTmp0 EXEC sp_OAMethod @sbExpression, 'GetAsString', @sTmp0 OUT EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'filter', @sTmp0 EXEC sp_OAMethod @http, 'QuickGetSb', @success OUT, 'https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}', @sbResponse EXEC sp_OAGetProperty @http, 'LastStatus', @iTmp0 OUT IF (@success <> 1) and (@iTmp0 = 0) BEGIN EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @sbResponse EXEC @hr = sp_OADestroy @htFolderMap EXEC @hr = sp_OADestroy @sbMap EXEC @hr = sp_OADestroy @json EXEC @hr = sp_OADestroy @sbExpression EXEC @hr = sp_OADestroy @dt EXEC @hr = sp_OADestroy @dtObj RETURN END EXEC sp_OAMethod @json, 'LoadSb', @success OUT, @sbResponse EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT PRINT @sTmp0 -- ----------------------------------------------------------------------------------------------------- -- Return unread emails EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'filter', 'isRead eq false' -- success = http.QuickGetSb("https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}",sbResponse); EXEC sp_OAGetProperty @http, 'LastStatus', @iTmp0 OUT IF (@success <> 1) and (@iTmp0 = 0) BEGIN EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @sbResponse EXEC @hr = sp_OADestroy @htFolderMap EXEC @hr = sp_OADestroy @sbMap EXEC @hr = sp_OADestroy @json EXEC @hr = sp_OADestroy @sbExpression EXEC @hr = sp_OADestroy @dt EXEC @hr = sp_OADestroy @dtObj RETURN END EXEC sp_OAMethod @json, 'LoadSb', @success OUT, @sbResponse EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT PRINT @sTmp0 -- ----------------------------------------------------------------------------------------------------- -- Return emails with a plain-text or HTML body containing the phrase "Outlook 365" EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'filter', 'contains(body/content,''Outlook 365'')' EXEC sp_OAMethod @http, 'QuickGetSb', @success OUT, 'https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}', @sbResponse EXEC sp_OAGetProperty @http, 'LastStatus', @iTmp0 OUT IF (@success <> 1) and (@iTmp0 = 0) BEGIN EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @sbResponse EXEC @hr = sp_OADestroy @htFolderMap EXEC @hr = sp_OADestroy @sbMap EXEC @hr = sp_OADestroy @json EXEC @hr = sp_OADestroy @sbExpression EXEC @hr = sp_OADestroy @dt EXEC @hr = sp_OADestroy @dtObj RETURN END EXEC sp_OAMethod @json, 'LoadSb', @success OUT, @sbResponse EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT PRINT @sTmp0 -- ----------------------------------------------------------------------------------------------------- -- Use the $search query option instead of $filter. -- $search is a free-text search over whatever fields the server deems appropriate, such as in the subject, -- body, address fields, etc. -- Search for the word Amazon EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'search', 'Amazon' EXEC sp_OAMethod @http, 'QuickGetSb', @success OUT, 'https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$search={$search}&$select={$select}', @sbResponse EXEC sp_OAGetProperty @http, 'LastStatus', @iTmp0 OUT IF (@success <> 1) and (@iTmp0 = 0) BEGIN EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @sbResponse EXEC @hr = sp_OADestroy @htFolderMap EXEC @hr = sp_OADestroy @sbMap EXEC @hr = sp_OADestroy @json EXEC @hr = sp_OADestroy @sbExpression EXEC @hr = sp_OADestroy @dt EXEC @hr = sp_OADestroy @dtObj RETURN END EXEC sp_OAMethod @json, 'LoadSb', @success OUT, @sbResponse EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT PRINT @sTmp0 -- ----------------------------------------------------------------------------------------------------- -- Search for chilkatsoft.com -- Some chars, such as the "." make it necessary to enclose the search expression in double-quotes. EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'search', '"chilkatsoft.com"' EXEC sp_OAMethod @http, 'QuickGetSb', @success OUT, 'https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$search={$search}&$select={$select}', @sbResponse EXEC sp_OAGetProperty @http, 'LastStatus', @iTmp0 OUT IF (@success <> 1) and (@iTmp0 = 0) BEGIN EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @sbResponse EXEC @hr = sp_OADestroy @htFolderMap EXEC @hr = sp_OADestroy @sbMap EXEC @hr = sp_OADestroy @json EXEC @hr = sp_OADestroy @sbExpression EXEC @hr = sp_OADestroy @dt EXEC @hr = sp_OADestroy @dtObj RETURN END EXEC sp_OAMethod @json, 'LoadSb', @success OUT, @sbResponse EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @sbResponse EXEC @hr = sp_OADestroy @htFolderMap EXEC @hr = sp_OADestroy @sbMap EXEC @hr = sp_OADestroy @json EXEC @hr = sp_OADestroy @sbExpression EXEC @hr = sp_OADestroy @dt EXEC @hr = sp_OADestroy @dtObj END GO |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.