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
(Delphi ActiveX) 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
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB; ... procedure TForm1.Button1Click(Sender: TObject); var http: TChilkatHttp; sbResponse: TChilkatStringBuilder; htFolderMap: TChilkatHashtable; sbMap: TChilkatStringBuilder; folderId: WideString; success: Integer; json: TChilkatJsonObject; sbExpression: TChilkatStringBuilder; dt: TCkDateTime; dtObj: TDtObj; begin // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. http := TChilkatHttp.Create(Self); // 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). http.AuthToken := 'MICROSOFT_GRAPH_ACCESS_TOKEN'; sbResponse := TChilkatStringBuilder.Create(Self); // 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) htFolderMap := TChilkatHashtable.Create(Self); sbMap := TChilkatStringBuilder.Create(Self); sbMap.LoadFile('qa_data/outlook/folderMap.xml','utf-8'); htFolderMap.AddFromXmlSb(sbMap.ControlInterface); // Get the ID for the "/Inbox" folder: folderId := htFolderMap.LookupStr('/Inbox'); if (htFolderMap.LastMethodSuccess <> 1) then begin Memo1.Lines.Add('Folder ID not found'); Exit; end; success := 1; json := TChilkatJsonObject.Create(Self); json.EmitCompact := 0; http.SetUrlVar('folder_id',folderId); http.SetUrlVar('select','subject,from'); // ----------------------------------------------------------------------------------------------------- // Only return emails from "chilkat.support@gmail.com" http.SetUrlVar('filter','from/emailAddress/address eq ''chilkat.support@gmail.com'''); // To return the full content of each email, omit the "&select=..." part of the URL. success := http.QuickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}',sbResponse.ControlInterface); if ((success <> 1) and (http.LastStatus = 0)) then begin Memo1.Lines.Add(http.LastErrorText); Exit; end; json.LoadSb(sbResponse.ControlInterface); Memo1.Lines.Add(json.Emit()); // ----------------------------------------------------------------------------------------------------- // Only return emails where the subject contains "Amazon" http.SetUrlVar('filter','contains(subject,''Amazon'')'); success := http.QuickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}',sbResponse.ControlInterface); if ((success <> 1) and (http.LastStatus = 0)) then begin Memo1.Lines.Add(http.LastErrorText); Exit; end; json.LoadSb(sbResponse.ControlInterface); Memo1.Lines.Add(json.Emit()); // ----------------------------------------------------------------------------------------------------- // Only return emails where the subject starts with "this email" and the from address is support@chilkatsoft.com // (the startswith function is case insensitive) http.SetUrlVar('filter','startswith(subject,''this email'') and (from/emailAddress/address eq ''support@chilkatsoft.com'')'); success := http.QuickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}',sbResponse.ControlInterface); if ((success <> 1) and (http.LastStatus = 0)) then begin Memo1.Lines.Add(http.LastErrorText); Exit; end; json.LoadSb(sbResponse.ControlInterface); Memo1.Lines.Add(json.Emit()); // ----------------------------------------------------------------------------------------------------- // Only return emails received within the last 24 hours sbExpression := TChilkatStringBuilder.Create(Self); sbExpression.Append('receivedDateTime ge '); dt := TCkDateTime.Create(Self); dt.SetFromCurrentSystemTime(); dt.AddDays(-1); sbExpression.Append(dt.GetAsTimestamp(0)); http.SetUrlVar('filter',sbExpression.GetAsString()); success := http.QuickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}',sbResponse.ControlInterface); if ((success <> 1) and (http.LastStatus = 0)) then begin Memo1.Lines.Add(http.LastErrorText); Exit; end; json.LoadSb(sbResponse.ControlInterface); Memo1.Lines.Add(json.Emit()); // ----------------------------------------------------------------------------------------------------- // Only return emails received in October 2016 dtObj := TDtObj.Create(Self); dtObj.Year := 2016; dtObj.Month := 10; dtObj.Day := 1; dtObj.Utc := 1; dt.SetFromDtObj(dtObj.ControlInterface); sbExpression.Clear(); sbExpression.Append('(receivedDateTime ge '); sbExpression.Append(dt.GetAsTimestamp(0)); sbExpression.Append(') and (receivedDateTime lt '); dtObj.Month := 11; dt.SetFromDtObj(dtObj.ControlInterface); sbExpression.Append(dt.GetAsTimestamp(0)); sbExpression.Append(')'); // This is the expression we just built: (receivedDateTime ge 2016-10-01T00:00:00Z) and (receivedDateTime lt 2016-11-01T00:00:00Z) Memo1.Lines.Add(sbExpression.GetAsString()); http.SetUrlVar('filter',sbExpression.GetAsString()); success := http.QuickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}',sbResponse.ControlInterface); if ((success <> 1) and (http.LastStatus = 0)) then begin Memo1.Lines.Add(http.LastErrorText); Exit; end; json.LoadSb(sbResponse.ControlInterface); Memo1.Lines.Add(json.Emit()); // ----------------------------------------------------------------------------------------------------- // Return unread emails http.SetUrlVar('filter','isRead eq false'); // success = http.QuickGetSb("https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}",sbResponse); if ((success <> 1) and (http.LastStatus = 0)) then begin Memo1.Lines.Add(http.LastErrorText); Exit; end; json.LoadSb(sbResponse.ControlInterface); Memo1.Lines.Add(json.Emit()); // ----------------------------------------------------------------------------------------------------- // Return emails with a plain-text or HTML body containing the phrase "Outlook 365" http.SetUrlVar('filter','contains(body/content,''Outlook 365'')'); success := http.QuickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}',sbResponse.ControlInterface); if ((success <> 1) and (http.LastStatus = 0)) then begin Memo1.Lines.Add(http.LastErrorText); Exit; end; json.LoadSb(sbResponse.ControlInterface); Memo1.Lines.Add(json.Emit()); // ----------------------------------------------------------------------------------------------------- // 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 http.SetUrlVar('search','Amazon'); success := http.QuickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$search={$search}&$select={$select}',sbResponse.ControlInterface); if ((success <> 1) and (http.LastStatus = 0)) then begin Memo1.Lines.Add(http.LastErrorText); Exit; end; json.LoadSb(sbResponse.ControlInterface); Memo1.Lines.Add(json.Emit()); // ----------------------------------------------------------------------------------------------------- // Search for chilkatsoft.com // Some chars, such as the "." make it necessary to enclose the search expression in double-quotes. http.SetUrlVar('search','"chilkatsoft.com"'); success := http.QuickGetSb('https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$search={$search}&$select={$select}',sbResponse.ControlInterface); if ((success <> 1) and (http.LastStatus = 0)) then begin Memo1.Lines.Add(http.LastErrorText); Exit; end; json.LoadSb(sbResponse.ControlInterface); Memo1.Lines.Add(json.Emit()); end; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.