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

Get the Email Received Date/Time

See more Email Object Examples

Get's the date/time from the topmost Received header. The date/time of when you received an email may be different than the date/time stored in the Date header field, which if truthful, is the date when the email was sent.

The Received header field will look something like this:

Received: from mail.example.com (mail.example.com [99.255.255.99])
 by inbound-smtp.us-west-2.amazonaws.com with SMTP id 72ma443vs1g0o6vqd8erojkpss35s0dt32h323o1
 for admin@chilkatsoft.com;
 Wed, 25 Jul 2018 08:04:23 +0000 (UTC)
The date/time is the final part delimited by a semicolon.

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.StringTable,
  Chilkat.StringBuilder,
  Chilkat.Email;

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

procedure RunDemo;
var
  success: Boolean;
  email: TEmail;
  sb: TStringBuilder;
  numReplaced: Integer;
  st: TStringTable;

begin
  success := False;

  email := TEmail.Create;

  success := email.LoadEml('qa_data/eml/p.eml');
  if (success <> True) then
    begin
      WriteLn(email.LastErrorText);
      Exit;
    end;

  sb := TStringBuilder.Create;
  sb.Append(email.GetHeaderField('Received'));

  //  Replace semicolons with CRLF's
  numReplaced := sb.Replace(';',#13#10);

  st := TStringTable.Create;
  st.AppendFromSb(sb);

  if (st.Count = 0) then
    begin
      WriteLn('Should have at least one line..');
      Exit;
    end;

  //  The date/time string is the last line in the string table.
  sb.SetString(st.StringAt(st.Count - 1));
  sb.Trim();

  WriteLn('Received date/time = ' + sb.GetAsString());


  email.Free;
  sb.Free;
  st.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.