Sample code for 30+ languages & platforms
PureBasic

Outlook -- Move Messages from One Folder to Another

See more Outlook Examples

Demonstrates how to move messages from one folder to another.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttpResponse.pb"
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:
    CkHttp::setCkAuthToken(http, "MICROSOFT_GRAPH_ACCESS_TOKEN")

    ; This example will move some messages from /Inbox to /Inbox/abc/subFolderB
    ; We'll need the folder ids for both source and destination folders..

    ; Get the folder IDs from the folder map created by this example 
    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 IDs for the source and destination folders.
    srcFolderId.s = CkHashtable::ckLookupStr(htFolderMap,"/Inbox")
    If CkHashtable::ckLastMethodSuccess(htFolderMap) <> 1
        Debug "Folder ID not found"
        CkHttp::ckDispose(http)
        CkHashtable::ckDispose(htFolderMap)
        CkStringBuilder::ckDispose(sbMap)
        ProcedureReturn
    EndIf

    dstFolderId.s = CkHashtable::ckLookupStr(htFolderMap,"/Inbox/abc/subFolderB")
    If CkHashtable::ckLastMethodSuccess(htFolderMap) <> 1
        Debug "Folder ID not found"
        CkHttp::ckDispose(http)
        CkHashtable::ckDispose(htFolderMap)
        CkStringBuilder::ckDispose(sbMap)
        ProcedureReturn
    EndIf

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

    CkJsonObject::setCkEmitCompact(json, 0)

    ; Search for emails in this folder with the words "sample" or "example" in the subject, and return only the id and subject.
    CkHttp::ckSetUrlVar(http,"folder_id",srcFolderId)
    CkHttp::ckSetUrlVar(http,"select","id,subject")
    CkHttp::ckSetUrlVar(http,"filter","contains(subject,'sample') or contains(subject,'example')")

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

    success = CkHttp::ckQuickGetSb(http,"https://graph.microsoft.com/v1.0/me/mailFolders/{$folder_id}/messages?$filter={$filter}&$select={$select}",sbResponse)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkHashtable::ckDispose(htFolderMap)
        CkStringBuilder::ckDispose(sbMap)
        CkJsonObject::ckDispose(json)
        CkStringBuilder::ckDispose(sbResponse)
        ProcedureReturn
    EndIf

    CkJsonObject::ckLoadSb(json,sbResponse)
    ; Show the results..
    Debug CkJsonObject::ckEmit(json)

    ; Sample results:

    ; 	{
    ; 	  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('me')/mailFolders('AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAgEMAAAA')/messages(id,subject)",
    ; 	  "value": [
    ; 	    {
    ; 	      "@odata.etag": "W/\"CQAAABYAAADn68XtMop0TpsYJGpfKXY9AADOpwfr\"",
    ; 	      "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAgEMAAAA5_vF7TKKdE6bGCRqXyl2PQAAAM6Jj10AAAA=",
    ; 	      "subject": "A sample email with Amazon in the body"
    ; 	    },
    ; 	    {
    ; 	      "@odata.etag": "W/\"CQAAABYAAADn68XtMop0TpsYJGpfKXY9AADOpwfo\"",
    ; 	      "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAgEMAAAA5_vF7TKKdE6bGCRqXyl2PQAAAM6Jj1oAAAA=",
    ; 	      "subject": "This is an example email from chilkat.io"
    ; 	    }
    ; 	  ]
    ; 	}

    ; ------------
    ; Proceed to move (copy) each of the above emails to the destination folder.
    jsonRequestBody.i = CkJsonObject::ckCreate()
    If jsonRequestBody.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

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

    CkJsonObject::setCkEmitCompact(jsonResponse, 0)

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

        messageId = CkJsonObject::ckStringOf(json,"value[i].id")
        CkHttp::ckSetUrlVar(http,"message_id",messageId)

        ; Create a JSON request body with this content:
        ; 
        ; 		{
        ; 		  "DestinationId": "destinationId-value"
        ; 		}
        ; 
        dstFolderId = CkHashtable::ckLookupStr(htFolderMap,"/Inbox/abc/subFolderB")
        CkJsonObject::ckUpdateString(jsonRequestBody,"DestinationId",dstFolderId)
        Debug "Moving " + messageId

        ; Move the message to the destination folder
        resp.i = CkHttpResponse::ckCreate()
        If resp.i = 0
            Debug "Failed to create object."
            ProcedureReturn
        EndIf

        success = CkHttp::ckHttpJson(http,"POST","https://graph.microsoft.com/v1.0/me/messages/{$message_id}/move",jsonRequestBody,"application/json",resp)
        If success = 0
            Debug CkHttp::ckLastErrorText(http)
            CkHttp::ckDispose(http)
            CkHashtable::ckDispose(htFolderMap)
            CkStringBuilder::ckDispose(sbMap)
            CkJsonObject::ckDispose(json)
            CkStringBuilder::ckDispose(sbResponse)
            CkJsonObject::ckDispose(jsonRequestBody)
            CkJsonObject::ckDispose(jsonResponse)
            CkHttpResponse::ckDispose(resp)
            ProcedureReturn
        EndIf

        ; A 200 response indicates success.
        If CkHttp::ckLastStatus(http) = 200
            Debug "Message moved."
        Else
            Debug "Response status code = " + Str(CkHttpResponse::ckStatusCode(resp))
            Debug "Error: Message not moved."
        EndIf

        ; Show the response in both cases..
        CkJsonObject::ckLoad(jsonResponse,CkHttpResponse::ckBodyStr(resp))
        Debug CkJsonObject::ckEmit(jsonResponse)

        i = i + 1
    Wend

    ; ---------------------------------------------------
    ; Sample output:

    ; Moving AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAgEMAAAA5_vF7TKKdE6bGCRqXyl2PQAAAM6Jj2EAAAA=
    ; Message moved.
    ; {
    ;   "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#message",
    ;   "@odata.type": "#microsoft.graph.message",
    ;   "@odata.etag": "W/\"CQAAABYAAADn68XtMop0TpsYJGpfKXY9AADOp08j\"",
    ;   "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAL8huwMAAADn68XtMop0TpsYJGpfKXY9AAAAzomk2wAAAA==",
    ;   "createdDateTime": "2017-05-30T23:39:35Z",
    ;   "lastModifiedDateTime": "2017-05-31T23:17:59Z",
    ;   "changeKey": "CQAAABYAAADn68XtMop0TpsYJGpfKXY9AADOp08j",
    ;   "categories": [
    ;   ],
    ;   "receivedDateTime": "2017-05-30T23:39:35Z",
    ;   "sentDateTime": "2017-05-30T23:39:18Z",
    ;   "hasAttachments": false,
    ;   "internetMessageId": "<4aea73c1-2b29-f550-e6f1-eb22785a56f0@chilkatsoft.com>",
    ;   "subject": "A sample email with Amazon in the body",
    ;   "bodyPreview": "This email has the keyword Amazon in the body..",
    ;   "importance": "normal",
    ;   "parentFolderId": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAL8huwMAAAA=",
    ;   "conversationId": "AQQkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAQADxkIFlCV-RFitsiVnh2MsI=",
    ;   "isDeliveryReceiptRequested": null,
    ;   "isReadReceiptRequested": false,
    ;   "isRead": false,
    ;   "isDraft": false,
    ;   "webLink": "https://outlook.live.com/owa/?ItemID=AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5%2BvF7TKKdE6bGCRqXyl2PQAAAL8huwMAAADn68XtMop0TpsYJGpfKXY9AAAAzomk2wAAAA%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": [
    ;   ]
    ; }
    ; 
    ; Moving AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAgEMAAAA5_vF7TKKdE6bGCRqXyl2PQAAAM6Jj2IAAAA=
    ; Message moved.
    ; {
    ;   "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#message",
    ;   "@odata.type": "#microsoft.graph.message",
    ;   "@odata.etag": "W/\"CQAAABYAAADn68XtMop0TpsYJGpfKXY9AADOp08k\"",
    ;   "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAL8huwMAAADn68XtMop0TpsYJGpfKXY9AAAAzomk3AAAAA==",
    ;   "createdDateTime": "2017-05-30T21:07:18Z",
    ;   "lastModifiedDateTime": "2017-05-31T23:17:59Z",
    ;   "changeKey": "CQAAABYAAADn68XtMop0TpsYJGpfKXY9AADOp08k",
    ;   "categories": [
    ;   ],
    ;   "receivedDateTime": "2017-05-30T21:07:18Z",
    ;   "sentDateTime": "2017-05-30T21:06:56Z",
    ;   "hasAttachments": false,
    ;   "internetMessageId": "<31fbbbce-2c70-c8d1-f0bd-35a7c7694a99@chilkat.io>",
    ;   "subject": "This is an example email from chilkat.io",
    ;   "bodyPreview": "This is an example email from chilkat.io",
    ;   "importance": "normal",
    ;   "parentFolderId": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7ill8xAEA5_vF7TKKdE6bGCRqXyl2PQAAAL8huwMAAAA=",
    ;   "conversationId": "AQQkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAQAEa8sL3gJ_FNjgk2YkP1eTQ=",
    ;   "isDeliveryReceiptRequested": null,
    ;   "isReadReceiptRequested": false,
    ;   "isRead": true,
    ;   "isDraft": false,
    ;   "webLink": "https://outlook.live.com/owa/?ItemID=AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5%2BvF7TKKdE6bGCRqXyl2PQAAAL8huwMAAADn68XtMop0TpsYJGpfKXY9AAAAzomk3AAAAA%3D%3D&exvsurl=1&viewmodel=ReadMessageItem",
    ;   "inferenceClassification": "focused",
    ;   "body": {
    ;     "contentType": "html",
    ;     "content": "<html>...</html>\r\n"
    ;   },
    ;   "sender": {
    ;     "emailAddress": {
    ;       "name": "Chilkat Software",
    ;       "address": "admin@chilkat.io"
    ;     }
    ;   },
    ;   "from": {
    ;     "emailAddress": {
    ;       "name": "Chilkat Software",
    ;       "address": "admin@chilkat.io"
    ;     }
    ;   },
    ;   "toRecipients": [
    ;     {
    ;       "emailAddress": {
    ;         "name": "Chilkat Software",
    ;         "address": "chilkatsoft@outlook.com"
    ;       }
    ;     }
    ;   ],
    ;   "ccRecipients": [
    ;   ],
    ;   "bccRecipients": [
    ;   ],
    ;   "replyTo": [
    ;   ]
    ; }
    ; 


    CkHttp::ckDispose(http)
    CkHashtable::ckDispose(htFolderMap)
    CkStringBuilder::ckDispose(sbMap)
    CkJsonObject::ckDispose(json)
    CkStringBuilder::ckDispose(sbResponse)
    CkJsonObject::ckDispose(jsonRequestBody)
    CkJsonObject::ckDispose(jsonResponse)
    CkHttpResponse::ckDispose(resp)


    ProcedureReturn
EndProcedure