Sample code for 30+ languages & platforms
Delphi DLL

Parsing a Multipart/Digest Email

See more Email Object Examples

This example demonstrates how to parse a multipart/digest email. An email parsed by this sample could have a MIME structure as follows:
multipart/mixed
    text/plain
    text/plain
    multipart/digest
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
        message/rfc822
    text/plain

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Email;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
emlPath: PWideChar;
email: HCkEmail;
numDigests: Integer;
eDigest: HCkEmail;
i: Integer;
m: PWideChar;

begin
success := False;

emlPath := 'qa_data/eml/multipart_digest.eml';

email := CkEmail_Create();

// For this example, we'll load the email from a .eml.
// The email could alternatively be loaded as a result of downloading from an IMAP or POP3 server..

success := CkEmail_LoadEml(email,emlPath);
if (success = False) then
  begin
    Memo1.Lines.Add(CkEmail__lastErrorText(email));
    Exit;
  end;

numDigests := CkEmail_getNumDigests(email);
Memo1.Lines.Add('num digests = ' + IntToStr(numDigests));

eDigest := CkEmail_Create();
i := 0;
while i < numDigests do
  begin
    CkEmail_GetDigestEmail(email,i,eDigest);
    Memo1.Lines.Add(IntToStr(i) + ':' + CkEmail__fromAddress(eDigest) + ', ' + CkEmail__subject(eDigest));
    m := CkEmail__getHeaderField(eDigest,'Message');
    if (CkEmail_getLastMethodSuccess(eDigest) = True) then
      begin
        Memo1.Lines.Add('    Message = ' + m);
      end;
    i := i + 1;
  end;

CkEmail_Dispose(email);
CkEmail_Dispose(eDigest);

end;