Sample code for 30+ languages & platforms
Visual FoxPro

Get GMail Message format=full

See more GMail REST API Examples

Examines the JSON returned when getting a message using format=full.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loHttp
LOCAL lcId
LOCAL loResp
LOCAL loJson
LOCAL lcStrVal
LOCAL lcName
LOCAL lcValue
LOCAL lcPartId
LOCAL lcMimeType
LOCAL lcFilename
LOCAL lnBodySize
LOCAL lcBodyAttachmentId
LOCAL j
LOCAL lnCount_j
LOCAL lcBodyData
LOCAL k
LOCAL lnCount_k
LOCAL loJson1
LOCAL lnI1
LOCAL lnCount_i1
LOCAL lcId
LOCAL lcThreadId
LOCAL lcSnippet
LOCAL lcHistoryId
LOCAL lcInternalDate
LOCAL lcPayloadPartId
LOCAL lcPayloadMimeType
LOCAL lcPayloadFilename
LOCAL lnPayloadBodySize
LOCAL lnSizeEstimate
LOCAL i
LOCAL lnCount_i

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"

* This is the ID for a particular message in our mailbox...
lcId = "1712bc1dc22da2a2"

* Download the message using format=full
loHttp.SetUrlVar("id",lcId)

loResp = CreateObject('Chilkat.HttpResponse')
lnSuccess = loHttp.HttpNoBody("GET","https://www.googleapis.com/gmail/v1/users/userId/messages/{$id}?format=full",loResp)
IF (lnSuccess = 0) THEN
    ? loHttp.LastErrorText
    RELEASE loHttp
    RELEASE loResp
    CANCEL
ENDIF

? "Response Status Code: " + STR(loResp.StatusCode)

loJson = CreateObject('Chilkat.JsonObject')
loJson.Load(loResp.BodyStr)
loJson.EmitCompact = 0
? loJson.Emit()

IF (loResp.StatusCode <> 200) THEN
    ? "Failed."
    RELEASE loHttp
    RELEASE loResp
    RELEASE loJson
    CANCEL
ENDIF

* Use this online tool to generate parsing code from sample JSON: 
* Generate Parsing Code from JSON

* Here is a sample "format=full" response that contains 4 attachments:
* The JSON parsing source code is shown below...

* {
*   "id": "1712bc1dc22da2a2",
*   "threadId": "1712bc1dc22da2a2",
*   "labelIds": [
*     "UNREAD",
*     "IMPORTANT",
*     "CATEGORY_PERSONAL",
*     "INBOX"
*   ],
*   "snippet": "Hello, this is a test email with attachments..",
*   "historyId": "759379",
*   "internalDate": "1585577056000",
*   "payload": {
*     "partId": "",
*     "mimeType": "multipart/mixed",
*     "filename": "",
*     "headers": [
*       {
*         "name": "Delivered-To",
*         "value": "chilkat.support@gmail.com"
*       },
*       {
*         "name": "Received",
*         "value": "..."
*       },
*       {
*         "name": "X-Received",
*         "value": "..."
*       },
*       {
*         "name": "X-Google-Smtp-Source",
*         "value": "..."
*       },
*       {
*         "name": "X-Received",
*         "value": "..."
*       },
*       {
*         "name": "ARC-Seal",
*         "value": "..."
*       },
*       {
*         "name": "ARC-Message-Signature",
*         "value": "..."
*       },
*       {
*         "name": "ARC-Authentication-Results",
*         "value": "..."
*       },
*       {
*         "name": "Return-Path",
*         "value": "..."
*       },
*       {
*         "name": "Received",
*         "value": "..."
*       },
*       {
*         "name": "Received-SPF",
*         "value": "..."
*       },
*       {
*         "name": "Authentication-Results",
*         "value": "..."
*       },
*       {
*         "name": "DKIM-Signature",
*         "value": "..."
*       },
*       {
*         "name": "DKIM-Signature",
*         "value": "..."
*       },
*       {
*         "name": "Subject",
*         "value": "Test email with attachments"
*       },
*       {
*         "name": "From",
*         "value": "..."
*       },
*       {
*         "name": "To",
*         "value": "..."
*       },
*       {
*         "name": "Date",
*         "value": "Mon, 30 Mar 2020 14:04:16 +0000"
*       },
*       {
*         "name": "Mime-Version",
*         "value": "1.0"
*       },
*       {
*         "name": "Content-Type",
*         "value": "multipart/mixed;  boundary=\"=_wNvwW3YTnQBZ24pmfFNfay3S6M-pHT7KdZIkXwYF-BFiPYNE\""
*       },
*       {
*         "name": "References",
*         "value": "..."
*       },
*       {
*         "name": "X-Mailer",
*         "value": "..."
*       },
*       {
*         "name": "Thread-Index",
*         "value": "AQHWBpwYB0UZvgGPT1KluJJUCF0BGg=="
*       },
*       {
*         "name": "Thread-Topic",
*         "value": "Test email with attachments"
*       },
*       {
*         "name": "Message-ID",
*         "value": "..."
*       },
*       {
*         "name": "X-SES-Outgoing",
*         "value": "2020.03.30-54.240.27.106"
*       },
*       {
*         "name": "Feedback-ID",
*         "value": "..."
*       }
*     ],
*     "body": {
*       "size": 0
*     },
*     "parts": [
*       {
*         "partId": "0",
*         "mimeType": "multipart/alternative",
*         "filename": "",
*         "headers": [
*           {
*             "name": "Content-Type",
*             "value": "multipart/alternative;  boundary=\"=_wNvwHW2hdOZkYPaJAhdOY4+XBEFNAcvIZ1sQcW4JkBcAdDqA\""
*           }
*         ],
*         "body": {
*           "size": 0
*         },
*         "parts": [
*           {
*             "partId": "0.0",
*             "mimeType": "text/plain",
*             "filename": "",
*             "headers": [
*               {
*                 "name": "Content-Type",
*                 "value": "text/plain; charset=UTF-8"
*               },
*               {
*                 "name": "Content-Transfer-Encoding",
*                 "value": "7bit"
*               }
*             ],
*             "body": {
*               "size": 129,
*               "data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0IGVtYWlsIHdpdGggYXR0YWNobWVudHMuLg0KIA0KIA0KIA0KLS0gDQogQmVzdCBSZWdhcmRzLA0KIE1hdHQgRmF1c2V5DQogQ2hpbGthdCBTb2Z0d2FyZSwgSW5jLiANCg0KIA0KDQogDQog"
*             }
*           },
*           {
*             "partId": "0.1",
*             "mimeType": "multipart/related",
*             "filename": "",
*             "headers": [
*               {
*                 "name": "Content-Type",
*                 "value": "multipart/related;  boundary=\"=_wNvw-LQZP2xD5vBm4q4esgoD5F4j3w+DRPUkkzOidpnpXAre\""
*               }
*             ],
*             "body": {
*               "size": 0
*             },
*             "parts": [
*               {
*                 "partId": "0.1.0",
*                 "mimeType": "text/html",
*                 "filename": "",
*                 "headers": [
*                   {
*                     "name": "Content-Type",
*                     "value": "text/html; charset=utf-8"
*                   },
*                   {
*                     "name": "Content-Transfer-Encoding",
*                     "value": "7bit"
*                   }
*                 ],
*                 "body": {
*                   "size": 530,
*                   "data": "PGh0bWw-DQogIDxoZWFkPg0KDQogICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPg0KICA8L2hlYWQ-DQogIDxib2R5Pg0KICAgIEhlbGxvLCB0aGlzIGlzIGE8Zm9udCBjb2xvcj0iI2ZmMDAwMCI-IHRlc3Q8L2ZvbnQ-IGVtYWlsIHdpdGgNCiAgICBhdHRhY2htZW50cy4uPGJyPg0KICAgIDxicj4NCiAgICA8aW1nIG1vei1kby1ub3Qtc2VuZD0iZmFsc2UiDQogICAgICBzcmM9ImNpZDpwYXJ0MS5GMEI1MzVEQi5DQjZFN0ExMkBjaGlsa2F0c29mdC5jb20iIGFsdD0ic2VhaG9yc2UiDQogICAgICB3aWR0aD0iMTIwIiBoZWlnaHQ9IjEyMCI-PGJyPg0KICAgIDxkaXYgY2xhc3M9Im1vei1zaWduYXR1cmUiPi0tIDxicj4NCiAgICAgIEJlc3QgUmVnYXJkcyw8YnI-DQogICAgICBNYXR0IEZhdXNleTxicj4NCiAgICAgIENoaWxrYXQgU29mdHdhcmUsIEluYy4NCiAgICAgIDxwPg0KICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KICA8L2JvZHk-DQo8L2h0bWw-DQo="
*                 }
*               },
*               {
*                 "partId": "0.1.1",
*                 "mimeType": "image/jpeg",
*                 "filename": "seahorse.jpg",
*                 "headers": [
*                   {
*                     "name": "Content-Type",
*                     "value": "image/jpeg"
*                   },
*                   {
*                     "name": "Content-Id",
*                     "value": "\u003cpart1.F0B535DB.CB6E7A12@chilkatsoft.com\u003e"
*                   },
*                   {
*                     "name": "Content-Disposition",
*                     "value": "inline; filename=seahorse.jpg"
*                   },
*                   {
*                     "name": "Content-Transfer-Encoding",
*                     "value": "base64"
*                   }
*                 ],
*                 "body": {
*                   "attachmentId": "ANGjdJ-Z1c9gUGsEzexYYEsF5nLHGUaNiZQs5HkuFQVPo5jq1eze8poigmarvERUIRj1coKUaftiQPWhiZWaFyLDcyjFbfLdjWyyO3AxRO8pY5liAhVp1bt_5f79Nk0vfnZXL0OnZmNAMdrcFe645DbsajwDZcoYnWVcsV9Fe6PCNq41e6XW8Ko4Ex7zMzkATiwlLyx0RLcR0hl-FuZ-UVpQI0JeMTkNi4eN5-9L4dRU7HTo9qEyFW_p3__vXrnEJvmEvWXNUqxKLktcZvkvql6mnAVMDiIapqsE6x0EAvFobre7sf1_T6ieVlA-m92vrtELC2HHdxzkU-qhC_LuoOSOz8nd8tfWsrB8zex0v6NFFP9mJmBUb1QGtCGTxLdI40z_LdMOSiaqmeCq4o_s",
*                   "size": 24388
*                 }
*               }
*             ]
*           }
*         ]
*       },
*       {
*         "partId": "1",
*         "mimeType": "application/pdf",
*         "filename": "helloWorld.pdf",
*         "headers": [
*           {
*             "name": "Content-Type",
*             "value": "application/pdf; name=helloWorld.pdf"
*           },
*           {
*             "name": "Content-Transfer-Encoding",
*             "value": "base64"
*           },
*           {
*             "name": "Content-Disposition",
*             "value": "attachment; filename=helloWorld.pdf"
*           }
*         ],
*         "body": {
*           "attachmentId": "ANGjdJ-oy3aCuZISJKLAhUdaEksCEklbAPyMaWzFgqOMGbPCRkgwgeu_Kttd99C17OBTHROkDZGekibTKWXGfscB5ww7fw4E65_V1dQ-jHhb2TD1Cdm58-BbNw2iDxzptco8iILPiSnLLfFn5Ps7nsRcxHaGTt3r0yqFKCuIYNnPK1vM04BXI_cfzo-HnI4I3tD6oHNHOGVQrL01MdShFQjPELPUjXM8z1qs7Kom-QyvV1iOldUN-66UuhynsmDX-CMM5TIdB-8KD_lmdhf-0DqG8JnCA20XpXyfqwS8XFkPA-t-QSjb7SdkHQFtQ4lz2PcBREFzZ2eI5j0l0Y_dQHRPYTeMwkVl1yl4MfFT4C4iso3VSF-eqaIjiFCbXKCFNyeEIW5WFsv189dhlSqU",
*           "size": 934
*         }
*       },
*       {
*         "partId": "2",
*         "mimeType": "application/x-gzip",
*         "filename": "hamlet.xml.gz",
*         "headers": [
*           {
*             "name": "Content-Type",
*             "value": "application/x-gzip; name=hamlet.xml.gz"
*           },
*           {
*             "name": "Content-Transfer-Encoding",
*             "value": "base64"
*           },
*           {
*             "name": "Content-Disposition",
*             "value": "attachment; filename=hamlet.xml.gz"
*           }
*         ],
*         "body": {
*           "attachmentId": "ANGjdJ9rvj1ebIc-f0cXG0kwsb6pDBkRCNk3IQXbJ5z0-s2mEcVat3Pp6pVm3rTkRLOyeXHzRcTuel7nxRFJX6WVAKtG-5B-GL_b6DlsOWOzH4A_IKlyJ9U4aeWT02CgQL8oRwlCu1h0BtnY6lT8zureboGOqR7qoa-i5jH8xr6ds0nUDZp71lAwfOjji3eG6Wg6HfzWzWUThYPH3ba0_q35Jii8JIMhyJwwZnGjN3lvW_VhN6UIL1DIpop95b8rdwJdpyUavm7VhGtdNrI-mpgWQtT7WIAdIe6a-O74Zf4AB7uG7bp9R-IMBqQT-1jQqkN2_xlSpe3meWbuNu-4zsYfXN-IqM-Iy4dudAXjt0aY3Y8zxuHfW5qT7o4u8wSszhTIjM1j8lt-N7GZqnwJ",
*           "size": 77409
*         }
*       },
*       {
*         "partId": "3",
*         "mimeType": "text/plain",
*         "filename": "brasil_cert.pem",
*         "headers": [
*           {
*             "name": "Content-Type",
*             "value": "text/plain; name=brasil_cert.pem"
*           },
*           {
*             "name": "Content-Transfer-Encoding",
*             "value": "base64"
*           },
*           {
*             "name": "Content-Disposition",
*             "value": "attachment; filename=brasil_cert.pem"
*           }
*         ],
*         "body": {
*           "attachmentId": "ANGjdJ8nGD_xRHvjDwNIaSUleWCWk15ksUleks0fJ29gfGVOebzjBOUnAHYgKPefUQ6d6ExtqYubpvGCka1kJAB4gFwsnhQeflBhFNkORBqtb6FAGq0FcNgrbuxyKywmoHOUV4GDsNs4OGroEcFhBeZNQ8XKEdEoaO8ht8DARn2LncjxioQ4TmZ6jawmMF-mLbW1mz4QjwNir5jLOsE11tYZV2tLDoqjsubKeJJA8xojWo9r50zWfJFgWJKXZJwyNvKyZTwLmmBL_ATFxLFp4Nvo4K37uuVdUCG8WXiWwNr0oIV1RZOd_ZOA7M6Jif0wUcppJdxXRqlsFJqGlcVsLowkVGrJNAMe-fLY1x4w5od3axZIdZQgBPlVRKYYu5xopPTrLJsn4ld7pNyAhpZW",
*           "size": 2952
*         }
*       },
*       {
*         "partId": "4",
*         "mimeType": "application/x-zip-compressed",
*         "filename": "helloWorld.zip",
*         "headers": [
*           {
*             "name": "Content-Type",
*             "value": "application/x-zip-compressed; name=helloWorld.zip"
*           },
*           {
*             "name": "Content-Transfer-Encoding",
*             "value": "base64"
*           },
*           {
*             "name": "Content-Disposition",
*             "value": "attachment; filename=helloWorld.zip"
*           }
*         ],
*         "body": {
*           "attachmentId": "ANGjdJ9nWglkRNneBVGFk5GwSg83COa0zBeiTAvoMYniPklY03-w93dmEVHJTB9CAu5WMFW_yhV4ou2oX2w9SlpZjjyTgSc7sfYWeuX3pt29z67agy9WUVYeNGpo_30LSPgeyNk_Nm0DTAaektJTEMSy65rjRyK03VkHahNpMLY6Kd_pdfrk50oceuXzwNJZ-V-bftmIluueoQMqLcWQSGBRvEdIcl6EcPFFw8KuMLrjZZJwq8_bb8uM6zUvV23Q9LsLTgWg8FaBWejBf0wuIFXl3ZhtSLa-Y8OXCApHPdUnn45hccAzaQEmy4ZG7cgvCdN_jA9eFX46HYHty7ewleKPFGLTVof2JWsMiIi9BPqfohqQ5FPm1WXlGG_bOHvaMdoWcoqbKMMvF8lWZsfz",
*           "size": 174
*         }
*       }
*     ]
*   },
*   "sizeEstimate": 152847
* }

loJson1 = CreateObject('Chilkat.JsonObject')

lcId = loJson.StringOf("id")
lcThreadId = loJson.StringOf("threadId")
lcSnippet = loJson.StringOf("snippet")
lcHistoryId = loJson.StringOf("historyId")
lcInternalDate = loJson.StringOf("internalDate")
lcPayloadPartId = loJson.StringOf("payload.partId")
lcPayloadMimeType = loJson.StringOf("payload.mimeType")
lcPayloadFilename = loJson.StringOf("payload.filename")
lnPayloadBodySize = loJson.IntOf("payload.body.size")
lnSizeEstimate = loJson.IntOf("sizeEstimate")
i = 0
lnCount_i = loJson.SizeOfArray("labelIds")
DO WHILE i < lnCount_i
    loJson.I = i
    lcStrVal = loJson.StringOf("labelIds[i]")
    i = i + 1
ENDDO
i = 0
lnCount_i = loJson.SizeOfArray("payload.headers")
DO WHILE i < lnCount_i
    loJson.I = i
    lcName = loJson.StringOf("payload.headers[i].name")
    lcValue = loJson.StringOf("payload.headers[i].value")
    i = i + 1
ENDDO
i = 0
lnCount_i = loJson.SizeOfArray("payload.parts")
DO WHILE i < lnCount_i
    loJson.I = i
    lcPartId = loJson.StringOf("payload.parts[i].partId")
    lcMimeType = loJson.StringOf("payload.parts[i].mimeType")
    lcFilename = loJson.StringOf("payload.parts[i].filename")
    lnBodySize = loJson.IntOf("payload.parts[i].body.size")
    lcBodyAttachmentId = loJson.StringOf("payload.parts[i].body.attachmentId")
    j = 0
    lnCount_j = loJson.SizeOfArray("payload.parts[i].headers")
    DO WHILE j < lnCount_j
        loJson.J = j
        lcName = loJson.StringOf("payload.parts[i].headers[j].name")
        lcValue = loJson.StringOf("payload.parts[i].headers[j].value")
        j = j + 1
    ENDDO
    j = 0
    lnCount_j = loJson.SizeOfArray("payload.parts[i].parts")
    DO WHILE j < lnCount_j
        loJson.J = j
        lcPartId = loJson.StringOf("payload.parts[i].parts[j].partId")
        lcMimeType = loJson.StringOf("payload.parts[i].parts[j].mimeType")
        lcFilename = loJson.StringOf("payload.parts[i].parts[j].filename")
        lnBodySize = loJson.IntOf("payload.parts[i].parts[j].body.size")
        lcBodyData = loJson.StringOf("payload.parts[i].parts[j].body.data")
        k = 0
        lnCount_k = loJson.SizeOfArray("payload.parts[i].parts[j].headers")
        DO WHILE k < lnCount_k
            loJson.K = k
            lcName = loJson.StringOf("payload.parts[i].parts[j].headers[k].name")
            lcValue = loJson.StringOf("payload.parts[i].parts[j].headers[k].value")
            k = k + 1
        ENDDO
        k = 0
        lnCount_k = loJson.SizeOfArray("payload.parts[i].parts[j].parts")
        DO WHILE k < lnCount_k
            loJson.K = k
            lcPartId = loJson.StringOf("payload.parts[i].parts[j].parts[k].partId")
            lcMimeType = loJson.StringOf("payload.parts[i].parts[j].parts[k].mimeType")
            lcFilename = loJson.StringOf("payload.parts[i].parts[j].parts[k].filename")
            lnBodySize = loJson.IntOf("payload.parts[i].parts[j].parts[k].body.size")
            lcBodyData = loJson.StringOf("payload.parts[i].parts[j].parts[k].body.data")
            lcBodyAttachmentId = loJson.StringOf("payload.parts[i].parts[j].parts[k].body.attachmentId")
            loJson.ObjectOf2("payload.parts[i].parts[j].parts[k]",loJson1)

            lnI1 = 0
            lnCount_i1 = loJson1.SizeOfArray("headers")
            DO WHILE lnI1 < lnCount_i1
                loJson1.I = lnI1
                lcName = loJson1.StringOf("headers[i].name")
                lcValue = loJson1.StringOf("headers[i].value")
                lnI1 = lnI1 + 1
            ENDDO
            k = k + 1
        ENDDO
        j = j + 1
    ENDDO
    i = i + 1
ENDDO

RELEASE loHttp
RELEASE loResp
RELEASE loJson
RELEASE loJson1