Sample code for 30+ languages & platforms
PureBasic

Get GMail Message format=full

See more GMail REST API Examples

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

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

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

    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkHttp::setCkAuthToken(http, "ACCESS_TOKEN")

    CkHttp::setCkAccept(http, "application/json")

    ; This is the ID for a particular message in our mailbox...
    id.s = "1712bc1dc22da2a2"

    ; Download the message using format=full
    CkHttp::ckSetUrlVar(http,"id",id)

    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckHttpNoBody(http,"GET","https://www.googleapis.com/gmail/v1/users/userId/messages/{$id}?format=full",resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    Debug "Response Status Code: " + Str(CkHttpResponse::ckStatusCode(resp))

    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckLoad(json,CkHttpResponse::ckBodyStr(resp))
    CkJsonObject::setCkEmitCompact(json, 0)
    Debug CkJsonObject::ckEmit(json)

    If CkHttpResponse::ckStatusCode(resp) <> 200
        Debug "Failed."
        CkHttp::ckDispose(http)
        CkHttpResponse::ckDispose(resp)
        CkJsonObject::ckDispose(json)
        ProcedureReturn
    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
    ; }

    strVal.s
    name.s
    value.s
    partId.s
    mimeType.s
    filename.s
    bodySize.i
    bodyAttachmentId.s
    j.i
    count_j.i
    bodyData.s
    k.i
    count_k.i
    json1.i = CkJsonObject::ckCreate()
    If json1.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    i1.i
    count_i1.i

    id.s = CkJsonObject::ckStringOf(json,"id")
    threadId.s = CkJsonObject::ckStringOf(json,"threadId")
    snippet.s = CkJsonObject::ckStringOf(json,"snippet")
    historyId.s = CkJsonObject::ckStringOf(json,"historyId")
    internalDate.s = CkJsonObject::ckStringOf(json,"internalDate")
    payloadPartId.s = CkJsonObject::ckStringOf(json,"payload.partId")
    payloadMimeType.s = CkJsonObject::ckStringOf(json,"payload.mimeType")
    payloadFilename.s = CkJsonObject::ckStringOf(json,"payload.filename")
    payloadBodySize.i = CkJsonObject::ckIntOf(json,"payload.body.size")
    sizeEstimate.i = CkJsonObject::ckIntOf(json,"sizeEstimate")
    i.i = 0
    count_i.i = CkJsonObject::ckSizeOfArray(json,"labelIds")
    While i < count_i
        CkJsonObject::setCkI(json, i)
        strVal = CkJsonObject::ckStringOf(json,"labelIds[i]")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(json,"payload.headers")
    While i < count_i
        CkJsonObject::setCkI(json, i)
        name = CkJsonObject::ckStringOf(json,"payload.headers[i].name")
        value = CkJsonObject::ckStringOf(json,"payload.headers[i].value")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(json,"payload.parts")
    While i < count_i
        CkJsonObject::setCkI(json, i)
        partId = CkJsonObject::ckStringOf(json,"payload.parts[i].partId")
        mimeType = CkJsonObject::ckStringOf(json,"payload.parts[i].mimeType")
        filename = CkJsonObject::ckStringOf(json,"payload.parts[i].filename")
        bodySize = CkJsonObject::ckIntOf(json,"payload.parts[i].body.size")
        bodyAttachmentId = CkJsonObject::ckStringOf(json,"payload.parts[i].body.attachmentId")
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(json,"payload.parts[i].headers")
        While j < count_j
            CkJsonObject::setCkJ(json, j)
            name = CkJsonObject::ckStringOf(json,"payload.parts[i].headers[j].name")
            value = CkJsonObject::ckStringOf(json,"payload.parts[i].headers[j].value")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(json,"payload.parts[i].parts")
        While j < count_j
            CkJsonObject::setCkJ(json, j)
            partId = CkJsonObject::ckStringOf(json,"payload.parts[i].parts[j].partId")
            mimeType = CkJsonObject::ckStringOf(json,"payload.parts[i].parts[j].mimeType")
            filename = CkJsonObject::ckStringOf(json,"payload.parts[i].parts[j].filename")
            bodySize = CkJsonObject::ckIntOf(json,"payload.parts[i].parts[j].body.size")
            bodyData = CkJsonObject::ckStringOf(json,"payload.parts[i].parts[j].body.data")
            k = 0
            count_k = CkJsonObject::ckSizeOfArray(json,"payload.parts[i].parts[j].headers")
            While k < count_k
                CkJsonObject::setCkK(json, k)
                name = CkJsonObject::ckStringOf(json,"payload.parts[i].parts[j].headers[k].name")
                value = CkJsonObject::ckStringOf(json,"payload.parts[i].parts[j].headers[k].value")
                k = k + 1
            Wend
            k = 0
            count_k = CkJsonObject::ckSizeOfArray(json,"payload.parts[i].parts[j].parts")
            While k < count_k
                CkJsonObject::setCkK(json, k)
                partId = CkJsonObject::ckStringOf(json,"payload.parts[i].parts[j].parts[k].partId")
                mimeType = CkJsonObject::ckStringOf(json,"payload.parts[i].parts[j].parts[k].mimeType")
                filename = CkJsonObject::ckStringOf(json,"payload.parts[i].parts[j].parts[k].filename")
                bodySize = CkJsonObject::ckIntOf(json,"payload.parts[i].parts[j].parts[k].body.size")
                bodyData = CkJsonObject::ckStringOf(json,"payload.parts[i].parts[j].parts[k].body.data")
                bodyAttachmentId = CkJsonObject::ckStringOf(json,"payload.parts[i].parts[j].parts[k].body.attachmentId")
                CkJsonObject::ckObjectOf2(json,"payload.parts[i].parts[j].parts[k]",json1)

                i1 = 0
                count_i1 = CkJsonObject::ckSizeOfArray(json1,"headers")
                While i1 < count_i1
                    CkJsonObject::setCkI(json1, i1)
                    name = CkJsonObject::ckStringOf(json1,"headers[i].name")
                    value = CkJsonObject::ckStringOf(json1,"headers[i].value")
                    i1 = i1 + 1
                Wend
                k = k + 1
            Wend
            j = j + 1
        Wend
        i = i + 1
    Wend


    CkHttp::ckDispose(http)
    CkHttpResponse::ckDispose(resp)
    CkJsonObject::ckDispose(json)
    CkJsonObject::ckDispose(json1)


    ProcedureReturn
EndProcedure