Sample code for 30+ languages & platforms
DataFlex

Download GMail Message Attachment by ID

See more GMail REST API Examples

Demonstrates how to download a GMail email attachment by the attachment ID.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoHttp
    String sAttachmentId
    String sMessageId
    String sUrl
    String sOutputFilePath
    Variant vSbJson
    Handle hoSbJson
    Handle hoJson
    Variant vBd
    Handle hoBd
    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

    Set ComAuthToken Of hoHttp To "ACCESS_TOKEN"
    Set ComAccept Of hoHttp To "application/json"

    // See the following example:  Get GMail Message (format=full)
    // It shows how to download an email by message ID, and it shows how to parse the JSON
    // response which includes attachment names, ids, and other information.

    // This example will assume we already have the attachment id and filename.

    // This is the attachment ID for a file named "helloWorld.pdf".
    Move "ANGjdJ-oy3aCuZISJKLAhUdaEksCEklbAPyMaWzFgqOMGbPCRkgwgeu_Kttd99C17OBTHROkDZGekibTKWXGfscB5ww7fw4E65_V1dQ-jHhb2TD1Cdm58-BbNw2iDxzptco8iILPiSnLLfFn5Ps7nsRcxHaGTt3r0yqFKCuIYNnPK1vM04BXI_cfzo-HnI4I3tD6oHNHOGVQrL01MdShFQjPELPUjXM8z1qs7Kom-QyvV1iOldUN-66UuhynsmDX-CMM5TIdB-8KD_lmdhf-0DqG8JnCA20XpXyfqwS8XFkPA-t-QSjb7SdkHQFtQ4lz2PcBREFzZ2eI5j0l0Y_dQHRPYTeMwkVl1yl4MfFT4C4iso3VSF-eqaIjiFCbXKCFNyeEIW5WFsv189dhlSqU" To sAttachmentId

    Move "1712bc1dc22da2a2" To sMessageId

    Get ComSetUrlVar Of hoHttp "messageId" sMessageId To iSuccess
    Get ComSetUrlVar Of hoHttp "attachmentId" sAttachmentId To iSuccess

    Move "https://www.googleapis.com/gmail/v1/users/userId/messages/{$messageId}/attachments/{$attachmentId}" To sUrl

    // When we download, the response is JSON that contains the attachment data base64url encoded, like this:
    // {
    //  "size": 934,
    //  "data": "JVBERi0xLjM ... CiUlRU9GCg=="
    // }

    Move "qa_output/helloWorld.pdf" To sOutputFilePath

    // Download into a StringBuilder.
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbJson
    If (Not(IsComObjectCreated(hoSbJson))) Begin
        Send CreateComObject of hoSbJson
    End
    Get pvComObject of hoSbJson to vSbJson
    Get ComDownloadSb Of hoHttp sUrl "utf-8" vSbJson To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoHttp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComLastStatus Of hoHttp To iTemp1
    If (iTemp1 <> 200) Begin
        // Something failed.
        // the JSON contains an error message.
        Get ComGetAsString Of hoSbJson To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Load into a Chilkat JSON object.
    Get Create (RefClass(cComChilkatJsonObject)) To hoJson
    If (Not(IsComObjectCreated(hoJson))) Begin
        Send CreateComObject of hoJson
    End
    Get pvComObject of hoSbJson to vSbJson
    Get ComLoadSb Of hoJson vSbJson To iSuccess

    // Extract the base64url data into a BinData.
    Get Create (RefClass(cComChilkatBinData)) To hoBd
    If (Not(IsComObjectCreated(hoBd))) Begin
        Send CreateComObject of hoBd
    End
    Get pvComObject of hoBd to vBd
    Get ComBytesOf Of hoJson "data" "base64url" vBd To iSuccess

    // Save the data to a file.
    Get ComWriteFile Of hoBd "qa_output/helloWorld.pdf" To iSuccess

    Showln "Success."


End_Procedure