Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
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 Pascal (Lazarus/Delphi) Downloads
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.StringBuilder,
Chilkat.BinData,
Chilkat.JsonObject;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
http: THttp;
attachmentId: string;
messageId: string;
url: string;
outputFilePath: string;
sbJson: TStringBuilder;
json: TJsonObject;
bd: TBinData;
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';
// 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".
attachmentId := 'ANGjdJ-oy3aCuZISJKLAhUdaEksCEklbAPyMaWzFgqOMGbPCRkgwgeu_Kttd99C17OBTHROkDZGekibTKWXGfscB5ww7fw4E65_V1dQ-jHhb2TD1Cdm58-BbNw2iDxzptco8iILPiSnLLfFn5Ps7nsRcxHaGTt3r0yqFKCuIYNnPK1vM04BXI_cfzo-HnI4I3tD6oHNHOGVQrL01MdShFQjPELPUjXM8z1qs7Kom-QyvV1iOldUN-66UuhynsmDX-CMM5TIdB-8KD_lmdhf-0DqG8JnCA20XpXyfqwS8XFkPA-t-QSjb7SdkHQFtQ4lz2PcBREFzZ2eI5j0l0Y_dQHRPYTeMwkVl1yl4MfFT4C4iso3VSF-eqaIjiFCbXKCFNyeEIW5WFsv189dhlSqU';
messageId := '1712bc1dc22da2a2';
http.SetUrlVar('messageId',messageId);
http.SetUrlVar('attachmentId',attachmentId);
url := '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=="
// }
outputFilePath := 'qa_output/helloWorld.pdf';
// Download into a StringBuilder.
sbJson := TStringBuilder.Create;
success := http.DownloadSb(url,'utf-8',sbJson);
if (success = False) then
begin
WriteLn(http.LastErrorText);
Exit;
end;
if (http.LastStatus <> 200) then
begin
// Something failed.
// the JSON contains an error message.
WriteLn(sbJson.GetAsString());
Exit;
end;
// Load into a Chilkat JSON object.
json := TJsonObject.Create;
success := json.LoadSb(sbJson);
// Extract the base64url data into a BinData.
bd := TBinData.Create;
success := json.BytesOf('data','base64url',bd);
// Save the data to a file.
success := bd.WriteFile('qa_output/helloWorld.pdf');
WriteLn('Success.');
http.Free;
sbJson.Free;
json.Free;
bd.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.