DataFlex
DataFlex
Outlook -- Get Number of Emails
See more Outlook Examples
Gets the number of emails in an Outlook folder. This uses the OData $count system query option. See OData System Query Option $count for general information.This example first gets the combined total number of messages across all folders.
Note: This example requires Chilkat v9.5.0.68 or greater.
This example applies to: Exchange Online | Office 365 | Hotmail.com | Live.com | MSN.com | Outlook.com | Passport.com
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoHttp
Variant vSbResponse
Handle hoSbResponse
Handle hoJson
Handle hoHtFolderMap
Variant vSbMap
Handle hoSbMap
String sFolderId
Integer iTotalItemCount
Integer iChildFolderCount
String sTemp1
Integer iTemp1
Boolean bTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatHttp)) To hoHttp
If (Not(IsComObjectCreated(hoHttp))) Begin
Send CreateComObject of hoHttp
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).
Set ComAuthToken Of hoHttp To "MICROSOFT_GRAPH_ACCESS_TOKEN"
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbResponse
If (Not(IsComObjectCreated(hoSbResponse))) Begin
Send CreateComObject of hoSbResponse
End
// This gets the combined total number of emails in all folders.
Get pvComObject of hoSbResponse to vSbResponse
Get ComQuickGetSb Of hoHttp "https://graph.microsoft.com/v1.0/me/messages/$count" vSbResponse To iSuccess
Get ComLastStatus Of hoHttp To iTemp1
If ((iSuccess <> True) And (iTemp1 = 0)) Begin
Get ComLastErrorText Of hoHttp To sTemp1
Showln sTemp1
Procedure_Return
End
Get Create (RefClass(cComChilkatJsonObject)) To hoJson
If (Not(IsComObjectCreated(hoJson))) Begin
Send CreateComObject of hoJson
End
Set ComEmitCompact Of hoJson To False
// If the status code was not 200, then it failed and the response is likely JSON:
Get ComLastStatus Of hoHttp To iTemp1
If (iTemp1 <> 200) Begin
Get ComLastStatus Of hoHttp To iTemp1
Showln "Status code = " iTemp1
Get pvComObject of hoSbResponse to vSbResponse
Get ComLoadSb Of hoJson vSbResponse To iSuccess
Get ComEmit Of hoJson To sTemp1
Showln sTemp1
Showln "Failed."
Procedure_Return
End
// A success response payload contains just the integer value (it is not JSON)
Get ComGetAsString Of hoSbResponse To sTemp1
Showln "Combined Total Number of Emails = " sTemp1
Showln "--"
// ---------------------------------------------------------------------------
// To get the number of emails in a particular folder, we need to use the folder id.
//
// In this example, we'd like to get number of messages in the folder "/Inbox/abc",
// but we must specify the corresponding folder_id. The best way to do this is to create
// a local map of folderPaths-to-folderIds.
// We'll use the map created by this example: Create Outlook Folder Map)
Get Create (RefClass(cComChilkatHashtable)) To hoHtFolderMap
If (Not(IsComObjectCreated(hoHtFolderMap))) Begin
Send CreateComObject of hoHtFolderMap
End
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbMap
If (Not(IsComObjectCreated(hoSbMap))) Begin
Send CreateComObject of hoSbMap
End
Get ComLoadFile Of hoSbMap "qa_data/outlook/folderMap.xml" "utf-8" To iSuccess
Get pvComObject of hoSbMap to vSbMap
Get ComAddFromXmlSb Of hoHtFolderMap vSbMap To iSuccess
// Get the ID for the "/Inbox/abc" folder:
Get ComLookupStr Of hoHtFolderMap "/Inbox/abc" To sFolderId
Get ComLastMethodSuccess Of hoHtFolderMap To bTemp1
If (bTemp1 <> True) Begin
Showln "Folder ID not found"
Procedure_Return
End
Get ComSetUrlVar Of hoHttp "folder_id" sFolderId To iSuccess
// Send the request get the folder information.
// In this case we are NOT using the $count system query option.
Get pvComObject of hoSbResponse to vSbResponse
Get ComQuickGetSb Of hoHttp "https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}" vSbResponse To iSuccess
Get ComLastStatus Of hoHttp To iTemp1
If ((iSuccess <> True) And (iTemp1 = 0)) Begin
Get ComLastErrorText Of hoHttp To sTemp1
Showln sTemp1
Procedure_Return
End
Get pvComObject of hoSbResponse to vSbResponse
Get ComLoadSb Of hoJson vSbResponse To iSuccess
Get ComEmit Of hoJson To sTemp1
Showln sTemp1
Showln "--"
Get ComLastStatus Of hoHttp To iTemp1
If (iTemp1 <> 200) Begin
Get ComLastStatus Of hoHttp To iTemp1
Showln "Status code = " iTemp1
Showln "Failed."
Procedure_Return
End
// The successful JSON response looks like this;
// {
// "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('me')/mailFolders/$entity",
// "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAL8huv8AAAA=",
// "displayName": "abc",
// "parentFolderId": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgEMAAAA",
// "childFolderCount": 2,
// "unreadItemCount": 0,
// "totalItemCount": 3
// }
//
// Get the integer value from the JSON like this:
Get ComIntOf Of hoJson "totalItemCount" To iTotalItemCount
Showln "totalItemCount = " iTotalItemCount
Get ComIntOf Of hoJson "childFolderCount" To iChildFolderCount
Showln "childFolderCount = " iChildFolderCount
// etc..
End_Procedure