Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Get GMail Message format=full

See more GMail REST API Examples

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

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Http,
  Chilkat.HttpResponse,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  id: string;
  resp: THttpResponse;
  json: TJsonObject;
  strVal: string;
  name: string;
  value: string;
  partId: string;
  mimeType: string;
  filename: string;
  bodySize: Integer;
  bodyAttachmentId: string;
  j: Integer;
  count_j: Integer;
  bodyData: string;
  k: Integer;
  count_k: Integer;
  json1: TJsonObject;
  i1: Integer;
  count_i1: Integer;
  id: string;
  threadId: string;
  snippet: string;
  historyId: string;
  internalDate: string;
  payloadPartId: string;
  payloadMimeType: string;
  payloadFilename: string;
  payloadBodySize: Integer;
  sizeEstimate: Integer;
  i: Integer;
  count_i: Integer;

begin
  success := False;

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

  http := THttp.Create;

  http.AuthToken := 'ACCESS_TOKEN';

  http.Accept := 'application/json';

  //  This is the ID for a particular message in our mailbox...
  id := '1712bc1dc22da2a2';

  //  Download the message using format=full
  http.SetUrlVar('id',id);

  resp := THttpResponse.Create;
  success := http.HttpNoBody('GET','https://www.googleapis.com/gmail/v1/users/userId/messages/{$id}?format=full',resp);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  WriteLn('Response Status Code: ' + resp.StatusCode);

  json := TJsonObject.Create;
  json.Load(resp.BodyStr);
  json.EmitCompact := False;
  WriteLn(json.Emit());

  if (resp.StatusCode <> 200) then
    begin
      WriteLn('Failed.');
      Exit;
    end;

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

  json1 := TJsonObject.Create;

  id := json.StringOf('id');
  threadId := json.StringOf('threadId');
  snippet := json.StringOf('snippet');
  historyId := json.StringOf('historyId');
  internalDate := json.StringOf('internalDate');
  payloadPartId := json.StringOf('payload.partId');
  payloadMimeType := json.StringOf('payload.mimeType');
  payloadFilename := json.StringOf('payload.filename');
  payloadBodySize := json.IntOf('payload.body.size');
  sizeEstimate := json.IntOf('sizeEstimate');
  i := 0;
  count_i := json.SizeOfArray('labelIds');
  while i < count_i do
    begin
      json.I := i;
      strVal := json.StringOf('labelIds[i]');
      i := i + 1;
    end;

  i := 0;
  count_i := json.SizeOfArray('payload.headers');
  while i < count_i do
    begin
      json.I := i;
      name := json.StringOf('payload.headers[i].name');
      value := json.StringOf('payload.headers[i].value');
      i := i + 1;
    end;

  i := 0;
  count_i := json.SizeOfArray('payload.parts');
  while i < count_i do
    begin
      json.I := i;
      partId := json.StringOf('payload.parts[i].partId');
      mimeType := json.StringOf('payload.parts[i].mimeType');
      filename := json.StringOf('payload.parts[i].filename');
      bodySize := json.IntOf('payload.parts[i].body.size');
      bodyAttachmentId := json.StringOf('payload.parts[i].body.attachmentId');
      j := 0;
      count_j := json.SizeOfArray('payload.parts[i].headers');
      while j < count_j do
        begin
          json.J := j;
          name := json.StringOf('payload.parts[i].headers[j].name');
          value := json.StringOf('payload.parts[i].headers[j].value');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('payload.parts[i].parts');
      while j < count_j do
        begin
          json.J := j;
          partId := json.StringOf('payload.parts[i].parts[j].partId');
          mimeType := json.StringOf('payload.parts[i].parts[j].mimeType');
          filename := json.StringOf('payload.parts[i].parts[j].filename');
          bodySize := json.IntOf('payload.parts[i].parts[j].body.size');
          bodyData := json.StringOf('payload.parts[i].parts[j].body.data');
          k := 0;
          count_k := json.SizeOfArray('payload.parts[i].parts[j].headers');
          while k < count_k do
            begin
              json.K := k;
              name := json.StringOf('payload.parts[i].parts[j].headers[k].name');
              value := json.StringOf('payload.parts[i].parts[j].headers[k].value');
              k := k + 1;
            end;

          k := 0;
          count_k := json.SizeOfArray('payload.parts[i].parts[j].parts');
          while k < count_k do
            begin
              json.K := k;
              partId := json.StringOf('payload.parts[i].parts[j].parts[k].partId');
              mimeType := json.StringOf('payload.parts[i].parts[j].parts[k].mimeType');
              filename := json.StringOf('payload.parts[i].parts[j].parts[k].filename');
              bodySize := json.IntOf('payload.parts[i].parts[j].parts[k].body.size');
              bodyData := json.StringOf('payload.parts[i].parts[j].parts[k].body.data');
              bodyAttachmentId := json.StringOf('payload.parts[i].parts[j].parts[k].body.attachmentId');
              json.ObjectOf2('payload.parts[i].parts[j].parts[k]',json1);

              i1 := 0;
              count_i1 := json1.SizeOfArray('headers');
              while i1 < count_i1 do
                begin
                  json1.I := i1;
                  name := json1.StringOf('headers[i].name');
                  value := json1.StringOf('headers[i].value');
                  i1 := i1 + 1;
                end;

              k := k + 1;
            end;

          j := j + 1;
        end;

      i := i + 1;
    end;



  http.Free;
  resp.Free;
  json.Free;
  json1.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.