Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(SQL Server) Outlook --Download Attachments for a Specific MessageSee more Outlook ExamplesDemonstrates 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
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls. -- CREATE PROCEDURE ChilkatSample AS BEGIN DECLARE @hr int DECLARE @iTmp0 int -- Important: Do not use nvarchar(max). See the warning about using nvarchar(max). DECLARE @sTmp0 nvarchar(4000) -- This example requires the Chilkat API to have been previously unlocked. -- See Global Unlock Sample for sample code. DECLARE @http int -- Use "Chilkat_9_5_0.Http" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN 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). EXEC sp_OASetProperty @http, 'AuthToken', 'MICROSOFT_GRAPH_ACCESS_TOKEN' DECLARE @sbResponse int -- Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbResponse OUT -- 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 EXEC sp_OAMethod @http, 'ClearUrlVars', NULL DECLARE @success int EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'userPrincipalName', 'chilkatsoft@outlook.com' -- Assume we already have a message ID from previously listing the messages in a folder DECLARE @messageId nvarchar(4000) SELECT @messageId = 'AAMkADYzZWE3YmZmLWU0YzgtNGNkZC04MGE1LWFiYTFlNTRlY2QwYQBGAAAAAAAu7cUXL5YOTrdsUIw7-v8FBwBUcG0qWqkmQYqWLHQataQxAACnwqJUAABUcG0qWqkmQYqWLHQataQxAACnwrnOAAA=' EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'message_id', @messageId -- Send the request to download the attachments. DECLARE @success int EXEC sp_OAMethod @http, 'QuickGetSb', @success OUT, 'https://graph.microsoft.com/v1.0/users/{$userPrincipalName}/messages/{$message_id}/attachments', @sbResponse EXEC sp_OAGetProperty @http, 'LastStatus', @iTmp0 OUT IF (@success <> 1) and (@iTmp0 = 0) BEGIN EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @sbResponse RETURN END -- The attachment data is contained within the JSON response. DECLARE @json int -- Use "Chilkat_9_5_0.JsonObject" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @json OUT EXEC sp_OAMethod @json, 'LoadSb', @success OUT, @sbResponse EXEC sp_OASetProperty @json, 'EmitCompact', 0 EXEC sp_OAGetProperty @http, 'LastStatus', @iTmp0 OUT PRINT 'Status code = ' + @iTmp0 EXEC sp_OAGetProperty @http, 'LastStatus', @iTmp0 OUT IF @iTmp0 <> 200 BEGIN EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT PRINT @sTmp0 PRINT '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==" -- } -- ] -- } DECLARE @sbSavePath int -- Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbSavePath OUT DECLARE @attachData int -- Use "Chilkat_9_5_0.BinData" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.BinData', @attachData OUT DECLARE @lastMod int -- Use "Chilkat_9_5_0.CkDateTime" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.CkDateTime', @lastMod OUT DECLARE @fac int -- Use "Chilkat_9_5_0.FileAccess" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.FileAccess', @fac OUT DECLARE @i int SELECT @i = 0 DECLARE @numMessages int EXEC sp_OAMethod @json, 'SizeOfArray', @numMessages OUT, 'value' WHILE @i < @numMessages BEGIN EXEC sp_OASetProperty @json, 'I', @i EXEC sp_OAMethod @json, 'StringOf', @sTmp0 OUT, 'value[i].name' PRINT 'name: ' + @sTmp0 EXEC sp_OAMethod @json, 'StringOf', @sTmp0 OUT, 'value[i].contentType' PRINT 'contentType: ' + @sTmp0 DECLARE @sizeInBytes int EXEC sp_OAMethod @json, 'IntOf', @sizeInBytes OUT, 'value[i].size' PRINT 'size: ' + @sizeInBytes -- Extract the data and save to a file. EXEC sp_OAMethod @sbSavePath, 'SetString', @success OUT, 'qa_output/' EXEC sp_OAMethod @json, 'StringOf', @sTmp0 OUT, 'value[i].name' EXEC sp_OAMethod @sbSavePath, 'Append', @success OUT, @sTmp0 EXEC sp_OAMethod @attachData, 'Clear', @success OUT EXEC sp_OAMethod @json, 'StringOf', @sTmp0 OUT, 'value[i].contentBytes' EXEC sp_OAMethod @attachData, 'AppendEncoded', @success OUT, @sTmp0, 'base64' EXEC sp_OAMethod @sbSavePath, 'GetAsString', @sTmp0 OUT EXEC sp_OAMethod @attachData, 'WriteFile', @success OUT, @sTmp0 -- Get the last-modified date/time and set the output file's last-mod date/time.. EXEC sp_OAMethod @json, 'StringOf', @sTmp0 OUT, 'value[i].lastModifiedDateTime' EXEC sp_OAMethod @lastMod, 'SetFromTimestamp', @success OUT, @sTmp0 EXEC sp_OAMethod @sbSavePath, 'GetAsString', @sTmp0 OUT EXEC sp_OAMethod @fac, 'SetLastModified', @success OUT, @sTmp0, @lastMod PRINT '----' SELECT @i = @i + 1 END -- The output of the above loop is: -- -- name: fishing.pdf -- contentType: application/pdf -- size: 295680 -- ---- -- name: testCert.cer -- contentType: application/octet-stream -- size: 1674 -- ---- -- EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @sbResponse EXEC @hr = sp_OADestroy @json EXEC @hr = sp_OADestroy @sbSavePath EXEC @hr = sp_OADestroy @attachData EXEC @hr = sp_OADestroy @lastMod EXEC @hr = sp_OADestroy @fac END GO |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.