Delphi ActiveX
Delphi ActiveX
Iterate MIME Parts of an Email
See more Email Object Examples
Demonstrates how to iterate over the MIME sub-parts of an email, and retrieve the content of each MIME sub-part body.Note: This example requires some new features added to Chilkat v9.5.0.95.
Chilkat Delphi ActiveX Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
email: TChilkatEmail;
sbContentType: TChilkatStringBuilder;
caseSensitive: Integer;
inlineOnly: Integer;
excludeAttachments: Integer;
searchSpec: WideString;
numParts: Integer;
i: Integer;
textBody: WideString;
attachedEmail: TChilkatEmail;
bdMime: TChilkatBinData;
bd: TChilkatBinData;
begin
success := 0;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// See the following Chilkat post to Quickly Understand Email MIME
email := TChilkatEmail.Create(Self);
success := email.LoadEml('qa_data/eml/sample.eml');
if (success = 0) then
begin
Memo1.Lines.Add('Failed to load .eml');
Exit;
end;
sbContentType := TChilkatStringBuilder.Create(Self);
caseSensitive := 0;
// Get the total number of non-multipart MIME sub-parts.
// (This is a simple way of iterating over all the MIME leaf parts regardless of the MIME tree structure)
inlineOnly := 0;
excludeAttachments := 0;
searchSpec := '*/*';
numParts := email.GetNumPartsOfType(searchSpec,inlineOnly,excludeAttachments);
i := 0;
while i < numParts do
begin
// What is the Content-Type of this MIME part?
sbContentType.Append(email.GetNthContentType(i,searchSpec,inlineOnly,excludeAttachments));
if (sbContentType.StartsWith('text/',caseSensitive) = 1) then
begin
// Get the text body of this MIME part.
textBody := email.GetNthTextPartOfType(i,searchSpec,inlineOnly,excludeAttachments);
Memo1.Lines.Add('Got text body for ' + sbContentType.GetAsString());
end
else
begin
if (sbContentType.ContentsEqual('message/rfc822',caseSensitive) = 1) then
begin
// If the Content-Type is message/rfc822, then the MIME body for this part contains a full embedded MIME messages.
// Your application could load it into a Chilkat email object and recursively process...
attachedEmail := TChilkatEmail.Create(Self);
bdMime := TChilkatBinData.Create(Self);
email.GetNthBinaryPartOfTypeBd(i,searchSpec,inlineOnly,excludeAttachments,bdMime.ControlInterface);
attachedEmail.SetFromMimeBd(bdMime.ControlInterface);
// Now your app can recursively process the attachedEmail...
end
else
begin
// Get the bytes of this MIME body part.
bd := TChilkatBinData.Create(Self);
email.GetNthBinaryPartOfTypeBd(i,searchSpec,inlineOnly,excludeAttachments,bd.ControlInterface);
Memo1.Lines.Add('Got binary body for ' + sbContentType.GetAsString() + ' numBytes = ' + IntToStr(bd.NumBytes));
end;
end;
sbContentType.Clear();
i := i + 1;
end;
end;