Sample code for 30+ languages & platforms
PureBasic

Outlook -- List Messages in a Specified Folder

See more Outlook Examples

Demonstrates how to list the messages in a particular Outlook mailbox folder.

Note: This example requires Chilkat v9.5.0.67 or greater.

This example applies to: Exchange Online | Office 365 | Hotmail.com | Live.com | MSN.com | Outlook.com | Passport.com

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttp.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkHashtable.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

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

    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; 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::setCkAuthToken(http, "MICROSOFT_GRAPH_ACCESS_TOKEN")

    sbResponse.i = CkStringBuilder::ckCreate()
    If sbResponse.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Sends:  GET /users/{user_id | userPrincipalName}/mailFolders/{folder_id}/messages
    ; Note: It is also possible to use the literal string "me" for the current logged-on user.
    ; For example: GET /me/mailFolders/{folder_id}/messages

    CkHttp::ckClearUrlVars(http)
    CkHttp::ckSetUrlVar(http,"userPrincipalName","chilkatsoft@outlook.com")

    ; In this example, we'd like to get the 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.
    ; This example does it:  Create Outlook Folder Map)
    htFolderMap.i = CkHashtable::ckCreate()
    If htFolderMap.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    sbMap.i = CkStringBuilder::ckCreate()
    If sbMap.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkStringBuilder::ckLoadFile(sbMap,"qa_data/outlook/folderMap.xml","utf-8")
    CkHashtable::ckAddFromXmlSb(htFolderMap,sbMap)

    ; Get the ID for the "/Inbox/abc" folder:
    folderId.s = CkHashtable::ckLookupStr(htFolderMap,"/Inbox/abc")
    If CkHashtable::ckLastMethodSuccess(htFolderMap) <> 1
        Debug "Folder ID not found"
        CkHttp::ckDispose(http)
        CkStringBuilder::ckDispose(sbResponse)
        CkHashtable::ckDispose(htFolderMap)
        CkStringBuilder::ckDispose(sbMap)
        ProcedureReturn
    EndIf

    CkHttp::ckSetUrlVar(http,"folder_id",folderId)

    ; Send the request to list the messages.
    success = CkHttp::ckQuickGetSb(http,"https://graph.microsoft.com/v1.0/users/{$userPrincipalName}/mailFolders/{$folder_id}/messages",sbResponse)
    If (success <> 1) AND (CkHttp::ckLastStatus(http) = 0)
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkStringBuilder::ckDispose(sbResponse)
        CkHashtable::ckDispose(htFolderMap)
        CkStringBuilder::ckDispose(sbMap)
        ProcedureReturn
    EndIf

    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckLoadSb(json,sbResponse)
    CkJsonObject::setCkEmitCompact(json, 0)

    Debug "Status code = " + Str(CkHttp::ckLastStatus(http))
    If CkHttp::ckLastStatus(http) <> 200
        Debug CkJsonObject::ckEmit(json)
        Debug "Failed."
    EndIf

    ; In my test case, the raw JSON returned is shown below.
    ; Iterate over the messages to get information about each..

    i.i = 0
    numMessages.i = CkJsonObject::ckSizeOfArray(json,"value")
    While i < numMessages
        CkJsonObject::setCkI(json, i)

        ; This is the id for the email message.
        ; For REST API calls that require particular email message id, this is what should be used..
        messageId.s = CkJsonObject::ckStringOf(json,"value[i].id")
        Debug "id: " + messageId

        Debug "From Name: " + CkJsonObject::ckStringOf(json,"value[i].from.emailAddress.name")
        Debug "From Addr: " + CkJsonObject::ckStringOf(json,"value[i].from.emailAddress.address")

        numRecipients.i = CkJsonObject::ckSizeOfArray(json,"value[i].toRecipients")
        j.i = 0
        While j < numRecipients
            CkJsonObject::setCkJ(json, j)
            Debug "To Name: " + CkJsonObject::ckStringOf(json,"value[i].toRecipients[j].emailAddress.name")
            Debug "To Addr: " + CkJsonObject::ckStringOf(json,"value[i].toRecipients[j].emailAddress.address")
            j = j + 1
        Wend

        Debug "Subject: " + CkJsonObject::ckStringOf(json,"value[i].subject")
        Debug "Has Attachments:" + Str(CkJsonObject::ckBoolOf(json,"value[i].hasAttachments"))

        Debug "Body Content-Type:" + CkJsonObject::ckStringOf(json,"value[i].body.contentType")
        bodyContent.s = CkJsonObject::ckStringOf(json,"value[i].body.content")
        ; ...

        Debug "----"

        i = i + 1
    Wend

    ; The output of the above loop:

    ; id: AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAL8huv8AAADn68XtMop0TpsYJGpfKXY9AAAAwSju2wAAAA==
    ; From Name: Chilkat Software
    ; From Addr: support@chilkatsoft.com
    ; To Name: Chilkat Software
    ; To Addr: chilkatsoft@outlook.com
    ; Subject: email with attachments
    ; Has Attachments:True
    ; Body Content-Type:html
    ; ----
    ; id: AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAL8huv8AAADn68XtMop0TpsYJGpfKXY9AAAAwSju2gAAAA==
    ; From Name: Chilkat Software
    ; From Addr: support@chilkatsoft.com
    ; To Name: Chilkat Software
    ; To Addr: chilkatsoft@outlook.com
    ; To Name: admin@chilkat.io
    ; To Addr: admin@chilkat.io
    ; Subject: Re: Test HTML email with embedded images.
    ; Has Attachments:False
    ; Body Content-Type:html
    ; ----
    ; id: AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAL8huv8AAADn68XtMop0TpsYJGpfKXY9AAAAwSju2QAAAA==
    ; From Name: Chilkat Software
    ; From Addr: support@chilkatsoft.com
    ; To Name: chilkatsoft@outlook.com
    ; To Addr: chilkatsoft@outlook.com
    ; To Name: admin@chilkat.io
    ; To Addr: admin@chilkat.io
    ; Subject: Test HTML email with embedded images.
    ; Has Attachments:False
    ; Body Content-Type:html
    ; ----

    ; ------------------------------------------------------
    ; This is the raw JSON response:

    ; {
    ;   "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('chilkatsoft%40outlook.com')/mailFolders('AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAL8huv8AAAA%3D')/messages",
    ;   "value": [
    ;     {
    ;       "@odata.etag": "W/\"CQAAABYAAADn68XtMop0TpsYJGpfKXY9AADBQ0bb\"",
    ;       "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAL8huv8AAADn68XtMop0TpsYJGpfKXY9AAAAwSju2wAAAA==",
    ;       "createdDateTime": "2017-05-10T00:27:40Z",
    ;       "lastModifiedDateTime": "2017-05-10T00:30:51Z",
    ;       "changeKey": "CQAAABYAAADn68XtMop0TpsYJGpfKXY9AADBQ0bb",
    ;       "categories": [
    ;       ],
    ;       "receivedDateTime": "2017-05-10T00:27:41Z",
    ;       "sentDateTime": "2017-05-10T00:27:12Z",
    ;       "hasAttachments": true,
    ;       "internetMessageId": "<9a65d233-0882-d346-f405-202a8b1a3acd@chilkatsoft.com>",
    ;       "subject": "email with attachments",
    ;       "bodyPreview": "This email has attachments...",
    ;       "importance": "normal",
    ;       "parentFolderId": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAL8huv8AAAA=",
    ;       "conversationId": "AQQkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAQABQcNI8CG1xKpGjzxJTpoOE=",
    ;       "isDeliveryReceiptRequested": null,
    ;       "isReadReceiptRequested": false,
    ;       "isRead": true,
    ;       "isDraft": false,
    ;       "webLink": "https://outlook.live.com/owa/?ItemID=AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5%2BvF7TKKdE6bGCRqXyl2PQAAAL8huv8AAADn68XtMop0TpsYJGpfKXY9AAAAwSju2wAAAA%3D%3D&exvsurl=1&viewmodel=ReadMessageItem",
    ;       "inferenceClassification": "focused",
    ;       "body": {
    ;         "contentType": "html",
    ;         "content": "<html>...</html>\r\n"
    ;       },
    ;       "sender": {
    ;         "emailAddress": {
    ;           "name": "Chilkat Software",
    ;           "address": "support@chilkatsoft.com"
    ;         }
    ;       },
    ;       "from": {
    ;         "emailAddress": {
    ;           "name": "Chilkat Software",
    ;           "address": "support@chilkatsoft.com"
    ;         }
    ;       },
    ;       "toRecipients": [
    ;         {
    ;           "emailAddress": {
    ;             "name": "Chilkat Software",
    ;             "address": "chilkatsoft@outlook.com"
    ;           }
    ;         }
    ;       ],
    ;       "ccRecipients": [
    ;       ],
    ;       "bccRecipients": [
    ;       ],
    ;       "replyTo": [
    ;       ]
    ;     },
    ;     {
    ;       "@odata.etag": "W/\"CQAAABYAAADn68XtMop0TpsYJGpfKXY9AADBQ0bZ\"",
    ;       "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAL8huv8AAADn68XtMop0TpsYJGpfKXY9AAAAwSju2gAAAA==",
    ;       "createdDateTime": "2017-05-10T00:25:28Z",
    ;       "lastModifiedDateTime": "2017-05-10T00:25:44Z",
    ;       "changeKey": "CQAAABYAAADn68XtMop0TpsYJGpfKXY9AADBQ0bZ",
    ;       "categories": [
    ;       ],
    ;       "receivedDateTime": "2017-05-10T00:25:28Z",
    ;       "sentDateTime": "2017-05-10T00:25:10Z",
    ;       "hasAttachments": false,
    ;       "internetMessageId": "<707ff357-28ea-7ebd-9409-f46d752e871f@chilkatsoft.com>",
    ;       "subject": "Re: Test HTML email with embedded images.",
    ;       "bodyPreview": "My reply...",
    ;       "importance": "normal",
    ;       "parentFolderId": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAL8huv8AAAA=",
    ;       "conversationId": "AQQkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAQACYVrc_6yptKn9tuOqBiUMQ=",
    ;       "isDeliveryReceiptRequested": null,
    ;       "isReadReceiptRequested": false,
    ;       "isRead": true,
    ;       "isDraft": false,
    ;       "webLink": "https://outlook.live.com/owa/?ItemID=AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5%2BvF7TKKdE6bGCRqXyl2PQAAAL8huv8AAADn68XtMop0TpsYJGpfKXY9AAAAwSju2gAAAA%3D%3D&exvsurl=1&viewmodel=ReadMessageItem",
    ;       "inferenceClassification": "focused",
    ;       "body": {
    ;         "contentType": "html",
    ;         "content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n<meta content=\"text/html; charset=utf-8\">\r\n</head>\r\n<body bgcolor=\"#FFFFFF\">...</body>\r\n</html>\r\n"
    ;       },
    ;       "sender": {
    ;         "emailAddress": {
    ;           "name": "Chilkat Software",
    ; 
    ;           "address": "support@chilkatsoft.com"
    ;         }
    ;       },
    ;       "from": {
    ;         "emailAddress": {
    ;           "name": "Chilkat Software",
    ;           "address": "support@chilkatsoft.com"
    ;         }
    ;       },
    ;       "toRecipients": [
    ;         {
    ;           "emailAddress": {
    ;             "name": "Chilkat Software",
    ;             "address": "chilkatsoft@outlook.com"
    ;           }
    ;         },
    ;         {
    ;           "emailAddress": {
    ;             "name": "admin@chilkat.io",
    ;             "address": "admin@chilkat.io"
    ;           }
    ;         }
    ;       ],
    ;       "ccRecipients": [
    ;         {
    ;           "emailAddress": {
    ;             "name": "Matt Smith",
    ;             "address": "chilkat.support@gmail.com"
    ;           }
    ;         }
    ;       ],
    ;       "bccRecipients": [
    ;       ],
    ;       "replyTo": [
    ;       ]
    ;     },
    ;     {
    ;       "@odata.etag": "W/\"CQAAABYAAADn68XtMop0TpsYJGpfKXY9AADBQ0bY\"",
    ;       "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAL8huv8AAADn68XtMop0TpsYJGpfKXY9AAAAwSju2QAAAA==",
    ;       "createdDateTime": "2017-05-10T00:22:23Z",
    ;       "lastModifiedDateTime": "2017-05-10T00:22:45Z",
    ;       "changeKey": "CQAAABYAAADn68XtMop0TpsYJGpfKXY9AADBQ0bY",
    ;       "categories": [
    ;       ],
    ;       "receivedDateTime": "2017-05-10T00:22:23Z",
    ;       "sentDateTime": "2017-05-10T00:22:03Z",
    ;       "hasAttachments": false,
    ;       "internetMessageId": "<4da724c6-fa94-5516-81d5-9cdf152eddc5@chilkatsoft.com>",
    ;       "subject": "Test HTML email with embedded images.",
    ;       "bodyPreview": "This is a test email with images...",
    ;       "importance": "normal",
    ;       "parentFolderId": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAL8huv8AAAA=",
    ;       "conversationId": "AQQkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAQACYVrc_6yptKn9tuOqBiUMQ=",
    ;       "isDeliveryReceiptRequested": null,
    ;       "isReadReceiptRequested": false,
    ;       "isRead": true,
    ;       "isDraft": false,
    ;       "webLink": "https://outlook.live.com/owa/?ItemID=AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5%2BvF7TKKdE6bGCRqXyl2PQAAAL8huv8AAADn68XtMop0TpsYJGpfKXY9AAAAwSju2QAAAA%3D%3D&exvsurl=1&viewmodel=ReadMessageItem",
    ;       "inferenceClassification": "focused",
    ;       "body": {
    ;         "contentType": "html",
    ;         "content": "<html>...</html>\r\n"
    ;       },
    ;       "sender": {
    ;         "emailAddress": {
    ;           "name": "Chilkat Software",
    ;           "address": "support@chilkatsoft.com"
    ;         }
    ;       },
    ;       "from": {
    ;         "emailAddress": {
    ;           "name": "Chilkat Software",
    ;           "address": "support@chilkatsoft.com"
    ;         }
    ;       },
    ;       "toRecipients": [
    ;         {
    ;           "emailAddress": {
    ;             "name": "chilkatsoft@outlook.com",
    ;             "address": "chilkatsoft@outlook.com"
    ;           }
    ;         },
    ;         {
    ;           "emailAddress": {
    ;             "name": "admin@chilkat.io",
    ;             "address": "admin@chilkat.io"
    ;           }
    ;         }
    ;       ],
    ;       "ccRecipients": [
    ;         {
    ;           "emailAddress": {
    ;             "name": "Matt Smith",
    ;             "address": "chilkat.support@gmail.com"
    ;           }
    ;         }
    ;       ],
    ;       "bccRecipients": [
    ;       ],
    ;       "replyTo": [
    ;       ]
    ;     }
    ;   ]
    ; 
    ; }


    CkHttp::ckDispose(http)
    CkStringBuilder::ckDispose(sbResponse)
    CkHashtable::ckDispose(htFolderMap)
    CkStringBuilder::ckDispose(sbMap)
    CkJsonObject::ckDispose(json)


    ProcedureReturn
EndProcedure