Sample code for 30+ languages & platforms
Tcl

Get GMail Message format=full

See more GMail REST API Examples

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

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

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

set http [new_CkHttp]

CkHttp_put_AuthToken $http "ACCESS_TOKEN"

CkHttp_put_Accept $http "application/json"

# This is the ID for a particular message in our mailbox...
set id "1712bc1dc22da2a2"

# Download the message using format=full
CkHttp_SetUrlVar $http "id" $id

set resp [new_CkHttpResponse]

set success [CkHttp_HttpNoBody $http "GET" "https://www.googleapis.com/gmail/v1/users/userId/messages/{$id}?format=full" $resp]
if {$success == 0} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkHttp $http
    delete_CkHttpResponse $resp
    exit
}

puts "Response Status Code: [CkHttpResponse_get_StatusCode $resp]"

set json [new_CkJsonObject]

CkJsonObject_Load $json [CkHttpResponse_bodyStr $resp]
CkJsonObject_put_EmitCompact $json 0
puts [CkJsonObject_emit $json]

if {[CkHttpResponse_get_StatusCode $resp] != 200} then {
    puts "Failed."
    delete_CkHttp $http
    delete_CkHttpResponse $resp
    delete_CkJsonObject $json
    exit
}

# 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
# }

set json1 [new_CkJsonObject]

set id [CkJsonObject_stringOf $json "id"]
set threadId [CkJsonObject_stringOf $json "threadId"]
set snippet [CkJsonObject_stringOf $json "snippet"]
set historyId [CkJsonObject_stringOf $json "historyId"]
set internalDate [CkJsonObject_stringOf $json "internalDate"]
set payloadPartId [CkJsonObject_stringOf $json "payload.partId"]
set payloadMimeType [CkJsonObject_stringOf $json "payload.mimeType"]
set payloadFilename [CkJsonObject_stringOf $json "payload.filename"]
set payloadBodySize [CkJsonObject_IntOf $json "payload.body.size"]
set sizeEstimate [CkJsonObject_IntOf $json "sizeEstimate"]
set i 0
set count_i [CkJsonObject_SizeOfArray $json "labelIds"]
while {$i < $count_i} {
    CkJsonObject_put_I $json $i
    set strVal [CkJsonObject_stringOf $json "labelIds[i]"]
    set i [expr $i + 1]
}
set i 0
set count_i [CkJsonObject_SizeOfArray $json "payload.headers"]
while {$i < $count_i} {
    CkJsonObject_put_I $json $i
    set name [CkJsonObject_stringOf $json "payload.headers[i].name"]
    set value [CkJsonObject_stringOf $json "payload.headers[i].value"]
    set i [expr $i + 1]
}
set i 0
set count_i [CkJsonObject_SizeOfArray $json "payload.parts"]
while {$i < $count_i} {
    CkJsonObject_put_I $json $i
    set partId [CkJsonObject_stringOf $json "payload.parts[i].partId"]
    set mimeType [CkJsonObject_stringOf $json "payload.parts[i].mimeType"]
    set filename [CkJsonObject_stringOf $json "payload.parts[i].filename"]
    set bodySize [CkJsonObject_IntOf $json "payload.parts[i].body.size"]
    set bodyAttachmentId [CkJsonObject_stringOf $json "payload.parts[i].body.attachmentId"]
    set j 0
    set count_j [CkJsonObject_SizeOfArray $json "payload.parts[i].headers"]
    while {$j < $count_j} {
        CkJsonObject_put_J $json $j
        set name [CkJsonObject_stringOf $json "payload.parts[i].headers[j].name"]
        set value [CkJsonObject_stringOf $json "payload.parts[i].headers[j].value"]
        set j [expr $j + 1]
    }
    set j 0
    set count_j [CkJsonObject_SizeOfArray $json "payload.parts[i].parts"]
    while {$j < $count_j} {
        CkJsonObject_put_J $json $j
        set partId [CkJsonObject_stringOf $json "payload.parts[i].parts[j].partId"]
        set mimeType [CkJsonObject_stringOf $json "payload.parts[i].parts[j].mimeType"]
        set filename [CkJsonObject_stringOf $json "payload.parts[i].parts[j].filename"]
        set bodySize [CkJsonObject_IntOf $json "payload.parts[i].parts[j].body.size"]
        set bodyData [CkJsonObject_stringOf $json "payload.parts[i].parts[j].body.data"]
        set k 0
        set count_k [CkJsonObject_SizeOfArray $json "payload.parts[i].parts[j].headers"]
        while {$k < $count_k} {
            CkJsonObject_put_K $json $k
            set name [CkJsonObject_stringOf $json "payload.parts[i].parts[j].headers[k].name"]
            set value [CkJsonObject_stringOf $json "payload.parts[i].parts[j].headers[k].value"]
            set k [expr $k + 1]
        }
        set k 0
        set count_k [CkJsonObject_SizeOfArray $json "payload.parts[i].parts[j].parts"]
        while {$k < $count_k} {
            CkJsonObject_put_K $json $k
            set partId [CkJsonObject_stringOf $json "payload.parts[i].parts[j].parts[k].partId"]
            set mimeType [CkJsonObject_stringOf $json "payload.parts[i].parts[j].parts[k].mimeType"]
            set filename [CkJsonObject_stringOf $json "payload.parts[i].parts[j].parts[k].filename"]
            set bodySize [CkJsonObject_IntOf $json "payload.parts[i].parts[j].parts[k].body.size"]
            set bodyData [CkJsonObject_stringOf $json "payload.parts[i].parts[j].parts[k].body.data"]
            set bodyAttachmentId [CkJsonObject_stringOf $json "payload.parts[i].parts[j].parts[k].body.attachmentId"]
            CkJsonObject_ObjectOf2 $json "payload.parts[i].parts[j].parts[k]" $json1

            set i1 0
            set count_i1 [CkJsonObject_SizeOfArray $json1 "headers"]
            while {$i1 < $count_i1} {
                CkJsonObject_put_I $json1 $i1
                set name [CkJsonObject_stringOf $json1 "headers[i].name"]
                set value [CkJsonObject_stringOf $json1 "headers[i].value"]
                set i1 [expr $i1 + 1]
            }
            set k [expr $k + 1]
        }
        set j [expr $j + 1]
    }
    set i [expr $i + 1]
}

delete_CkHttp $http
delete_CkHttpResponse $resp
delete_CkJsonObject $json
delete_CkJsonObject $json1