DataFlex
DataFlex
Outlook --Download Attachments for a Specific Message
See more Outlook Examples
Demonstrates how to download the attachments for a particular email message.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 DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoHttp
Variant vSbResponse
Handle hoSbResponse
String sMessageId
Handle hoJson
Handle hoSbSavePath
Handle hoAttachData
Variant vLastMod
Handle hoLastMod
Handle hoFac
Integer i
Integer iNumMessages
Integer iSizeInBytes
String sTemp1
Integer iTemp1
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
// Sends: GET /users/{user_id | userPrincipalName}/messages/{message_id}/attachments
// Note: It is also possible to use the literal string "me" for the current logged-on user.
// For example: GET /me/messages/{message_id}/attachments
Send ComClearUrlVars To hoHttp
Get ComSetUrlVar Of hoHttp "userPrincipalName" "chilkatsoft@outlook.com" To iSuccess
// Assume we already have a message ID from previously listing the messages in a folder
Move "AAMkADYzZWE3YmZmLWU0YzgtNGNkZC04MGE1LWFiYTFlNTRlY2QwYQBGAAAAAAAu7cUXL5YOTrdsUIw7-v8FBwBUcG0qWqkmQYqWLHQataQxAACnwqJUAABUcG0qWqkmQYqWLHQataQxAACnwrnOAAA=" To sMessageId
Get ComSetUrlVar Of hoHttp "message_id" sMessageId To iSuccess
// Send the request to download the attachments.
Get pvComObject of hoSbResponse to vSbResponse
Get ComQuickGetSb Of hoHttp "https://graph.microsoft.com/v1.0/users/{$userPrincipalName}/messages/{$message_id}/attachments" 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
// The attachment data is contained within the JSON response.
Get Create (RefClass(cComChilkatJsonObject)) To hoJson
If (Not(IsComObjectCreated(hoJson))) Begin
Send CreateComObject of hoJson
End
Get pvComObject of hoSbResponse to vSbResponse
Get ComLoadSb Of hoJson vSbResponse To iSuccess
Set ComEmitCompact Of hoJson To False
Get ComLastStatus Of hoHttp To iTemp1
Showln "Status code = " iTemp1
Get ComLastStatus Of hoHttp To iTemp1
If (iTemp1 <> 200) Begin
Get ComEmit Of hoJson To sTemp1
Showln sTemp1
Showln "Failed."
End
// This is a sample JSON response. The code for parsing and extracting/saving the attachments
// is shown below.
// {
// "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('chilkatsoft%40outlook.com')/messages('AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAL8huv8AAADn68XtMop0TpsYJGpfKXY9AAAAwSju2wAAAA%3D%3D')/attachments",
// "value": [
// {
// "@odata.type": "#microsoft.graph.fileAttachment",
// "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAL8huv8AAADn68XtMop0TpsYJGpfKXY9AAAAwSju2wAAAAESABAAft6wtbaSJU6sgQLi98DI0Q==",
// "lastModifiedDateTime": "2017-05-10T00:30:51Z",
// "name": "fishing.pdf",
// "contentType": "application/pdf",
// "size": 295680,
// "isInline": false,
// "contentId": "F861B218BE380F44B16933097FDDACFC@namprd20.prod.outlook.com",
// "contentLocation": null,
// "contentBytes": "JVBERi0xLjMKJcfsj6 ... yZWYKMjk0MzY5CiUlRU9GCg=="
// },
// {
// "@odata.type": "#microsoft.graph.fileAttachment",
// "id": "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAL8huv8AAADn68XtMop0TpsYJGpfKXY9AAAAwSju2wAAAAESABAAXS7qXQ-iRUCYXnhJpN8Ihg==",
// "lastModifiedDateTime": "2017-05-10T00:30:51Z",
// "name": "testCert.cer",
// "contentType": "application/octet-stream",
// "size": 1674,
// "isInline": false,
// "contentId": "5E51FA33EF0F8941ACC8260395CB1A33@namprd20.prod.outlook.com",
// "contentLocation": null,
// "contentBytes": "MIIFRjCCBC6gAwIBA ... 7pt3C5w=="
// }
// ]
// }
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbSavePath
If (Not(IsComObjectCreated(hoSbSavePath))) Begin
Send CreateComObject of hoSbSavePath
End
Get Create (RefClass(cComChilkatBinData)) To hoAttachData
If (Not(IsComObjectCreated(hoAttachData))) Begin
Send CreateComObject of hoAttachData
End
Get Create (RefClass(cComCkDateTime)) To hoLastMod
If (Not(IsComObjectCreated(hoLastMod))) Begin
Send CreateComObject of hoLastMod
End
Get Create (RefClass(cComCkFileAccess)) To hoFac
If (Not(IsComObjectCreated(hoFac))) Begin
Send CreateComObject of hoFac
End
Move 0 To i
Get ComSizeOfArray Of hoJson "value" To iNumMessages
While (i < iNumMessages)
Set ComI Of hoJson To i
Get ComStringOf Of hoJson "value[i].name" To sTemp1
Showln "name: " sTemp1
Get ComStringOf Of hoJson "value[i].contentType" To sTemp1
Showln "contentType: " sTemp1
Get ComIntOf Of hoJson "value[i].size" To iSizeInBytes
Showln "size: " iSizeInBytes
// Extract the data and save to a file.
Get ComSetString Of hoSbSavePath "qa_output/" To iSuccess
Get ComStringOf Of hoJson "value[i].name" To sTemp1
Get ComAppend Of hoSbSavePath sTemp1 To iSuccess
Get ComClear Of hoAttachData To iSuccess
Get ComStringOf Of hoJson "value[i].contentBytes" To sTemp1
Get ComAppendEncoded Of hoAttachData sTemp1 "base64" To iSuccess
Get ComGetAsString Of hoSbSavePath To sTemp1
Get ComWriteFile Of hoAttachData sTemp1 To iSuccess
// Get the last-modified date/time and set the output file's last-mod date/time..
Get ComStringOf Of hoJson "value[i].lastModifiedDateTime" To sTemp1
Get ComSetFromTimestamp Of hoLastMod sTemp1 To iSuccess
Get ComGetAsString Of hoSbSavePath To sTemp1
Get pvComObject of hoLastMod to vLastMod
Get ComSetLastModified Of hoFac sTemp1 vLastMod To iSuccess
Showln "----"
Move (i + 1) To i
Loop
// The output of the above loop is:
//
// name: fishing.pdf
// contentType: application/pdf
// size: 295680
// ----
// name: testCert.cer
// contentType: application/octet-stream
// size: 1674
// ----
//
End_Procedure