PureBasic
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
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