Sample code for 30+ languages & platforms
Visual FoxPro

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 Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loHttp
LOCAL lcAttachmentId
LOCAL lcMessageId
LOCAL lcUrl
LOCAL lcOutputFilePath
LOCAL loSbJson
LOCAL loJson
LOCAL loBd

lnSuccess = 0

* This example requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.

loHttp = CreateObject('Chilkat.Http')

loHttp.AuthToken = "ACCESS_TOKEN"
loHttp.Accept = "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".
lcAttachmentId = "ANGjdJ-oy3aCuZISJKLAhUdaEksCEklbAPyMaWzFgqOMGbPCRkgwgeu_Kttd99C17OBTHROkDZGekibTKWXGfscB5ww7fw4E65_V1dQ-jHhb2TD1Cdm58-BbNw2iDxzptco8iILPiSnLLfFn5Ps7nsRcxHaGTt3r0yqFKCuIYNnPK1vM04BXI_cfzo-HnI4I3tD6oHNHOGVQrL01MdShFQjPELPUjXM8z1qs7Kom-QyvV1iOldUN-66UuhynsmDX-CMM5TIdB-8KD_lmdhf-0DqG8JnCA20XpXyfqwS8XFkPA-t-QSjb7SdkHQFtQ4lz2PcBREFzZ2eI5j0l0Y_dQHRPYTeMwkVl1yl4MfFT4C4iso3VSF-eqaIjiFCbXKCFNyeEIW5WFsv189dhlSqU"

lcMessageId = "1712bc1dc22da2a2"

loHttp.SetUrlVar("messageId",lcMessageId)
loHttp.SetUrlVar("attachmentId",lcAttachmentId)

lcUrl = "https://www.googleapis.com/gmail/v1/users/userId/messages/{$messageId}/attachments/{$attachmentId}"

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

lcOutputFilePath = "qa_output/helloWorld.pdf"

* Download into a StringBuilder.
loSbJson = CreateObject('Chilkat.StringBuilder')
lnSuccess = loHttp.DownloadSb(lcUrl,"utf-8",loSbJson)
IF (lnSuccess = 0) THEN
    ? loHttp.LastErrorText
    RELEASE loHttp
    RELEASE loSbJson
    CANCEL
ENDIF

IF (loHttp.LastStatus <> 200) THEN
    * Something failed.
    * the JSON contains an error message.
    ? loSbJson.GetAsString()
    RELEASE loHttp
    RELEASE loSbJson
    CANCEL
ENDIF

* Load into a Chilkat JSON object.
loJson = CreateObject('Chilkat.JsonObject')
lnSuccess = loJson.LoadSb(loSbJson)

* Extract the base64url data into a BinData.
loBd = CreateObject('Chilkat.BinData')
lnSuccess = loJson.BytesOf("data","base64url",loBd)

* Save the data to a file.
lnSuccess = loBd.WriteFile("qa_output/helloWorld.pdf")

? "Success."

RELEASE loHttp
RELEASE loSbJson
RELEASE loJson
RELEASE loBd