Sample code for 30+ languages & platforms
Tcl

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 Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

set http [new_CkHttp]

# 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).

CkHttp_put_AuthToken $http "MICROSOFT_GRAPH_ACCESS_TOKEN"

set sbResponse [new_CkStringBuilder]

# This gets the combined total number of emails in all folders.
set success [CkHttp_QuickGetSb $http "https://graph.microsoft.com/v1.0/me/messages/$count" $sbResponse]
if {expr [$success != 1]  &&  [[CkHttp_get_LastStatus $http] == 0]} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkHttp $http
    delete_CkStringBuilder $sbResponse
    exit
}

set json [new_CkJsonObject]

CkJsonObject_put_EmitCompact $json 0

# If the status code was not 200, then it failed and the response is likely JSON:
if {[CkHttp_get_LastStatus $http] != 200} then {
    puts "Status code = [CkHttp_get_LastStatus $http]"
    CkJsonObject_LoadSb $json $sbResponse
    puts [CkJsonObject_emit $json]
    puts "Failed."
    delete_CkHttp $http
    delete_CkStringBuilder $sbResponse
    delete_CkJsonObject $json
    exit
}

# A success response payload contains just the integer value (it is not JSON)
puts "Combined Total Number of Emails = [CkStringBuilder_getAsString $sbResponse]"
puts "--"

# ---------------------------------------------------------------------------
# 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)
set htFolderMap [new_CkHashtable]

set sbMap [new_CkStringBuilder]

CkStringBuilder_LoadFile $sbMap "qa_data/outlook/folderMap.xml" "utf-8"
CkHashtable_AddFromXmlSb $htFolderMap $sbMap

# Get the ID for the "/Inbox/abc" folder:
set folderId [CkHashtable_lookupStr $htFolderMap "/Inbox/abc"]
if {[CkHashtable_get_LastMethodSuccess $htFolderMap] != 1} then {
    puts "Folder ID not found"
    delete_CkHttp $http
    delete_CkStringBuilder $sbResponse
    delete_CkJsonObject $json
    delete_CkHashtable $htFolderMap
    delete_CkStringBuilder $sbMap
    exit
}

CkHttp_SetUrlVar $http "folder_id" $folderId

# Send the request get the folder information.
# In this case we are NOT using the $count system query option.
set success [CkHttp_QuickGetSb $http "https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}" $sbResponse]
if {expr [$success != 1]  &&  [[CkHttp_get_LastStatus $http] == 0]} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkHttp $http
    delete_CkStringBuilder $sbResponse
    delete_CkJsonObject $json
    delete_CkHashtable $htFolderMap
    delete_CkStringBuilder $sbMap
    exit
}

CkJsonObject_LoadSb $json $sbResponse
puts [CkJsonObject_emit $json]
puts "--"

if {[CkHttp_get_LastStatus $http] != 200} then {
    puts "Status code = [CkHttp_get_LastStatus $http]"
    puts "Failed."
    delete_CkHttp $http
    delete_CkStringBuilder $sbResponse
    delete_CkJsonObject $json
    delete_CkHashtable $htFolderMap
    delete_CkStringBuilder $sbMap
    exit
}

# 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:
set totalItemCount [CkJsonObject_IntOf $json "totalItemCount"]
puts "totalItemCount = $totalItemCount"

set childFolderCount [CkJsonObject_IntOf $json "childFolderCount"]
puts "childFolderCount = $childFolderCount"

# etc..

delete_CkHttp $http
delete_CkStringBuilder $sbResponse
delete_CkJsonObject $json
delete_CkHashtable $htFolderMap
delete_CkStringBuilder $sbMap