Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Delphi ActiveX) IMAP Download and Verify Signed MIMEDownloads the unmodified MIME of a digitally signed email, saves the .p7s signature (and other MIME parts), then loads the email into a Chilkat email object (which unwraps the S/MIME and verifies the signature) and then saves attachments (if the MIME parts were not already saved).
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 imap: TChilkatImap; success: Integer; sbMime: TChilkatStringBuilder; mime: TChilkatMime; alreadySavedParts: Integer; sa: ICkStringArray; numFiles: Integer; i: Integer; email: TChilkatEmail; cert: IChilkatCert; begin // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. imap := TChilkatImap.Create(Self); // Connect to an IMAP server. // Use TLS imap.Ssl := 1; imap.Port := 993; success := imap.Connect('imap.someMailServer.com'); if (success <> 1) then begin Memo1.Lines.Add(imap.LastErrorText); Exit; end; success := imap.Login('myLogin','myPassword'); if (success <> 1) then begin Memo1.Lines.Add(imap.LastErrorText); Exit; end; // Select an IMAP mailbox success := imap.SelectMailbox('Inbox'); if (success <> 1) then begin Memo1.Lines.Add(imap.LastErrorText); Exit; end; // Download the 1st email (as MIME) in the Inbox by sequence number. sbMime := TChilkatStringBuilder.Create(Self); success := imap.FetchSingleAsMimeSb(1,0,sbMime.ControlInterface); if (success <> 1) then begin Memo1.Lines.Add(imap.LastErrorText); Exit; end; // Load it into a MIME object and check to see if it is signed mime := TChilkatMime.Create(Self); mime.LoadMimeSb(sbMime.ControlInterface); alreadySavedParts := 0; if (mime.ContainsSignedParts() = 1) then begin // This will save the .p7s and other parts... sa := mime.ExtractPartsToFiles('qa_output'); if (mime.LastMethodSuccess = 1) then begin numFiles := sa.Count; i := 0; while i < numFiles do begin Memo1.Lines.Add('Created: ' + sa.GetString(i)); i := i + 1; end; alreadySavedParts := 1; end; end; // Load the MIME into an Email object. This unwraps the security layers and verifies signatures. email := TChilkatEmail.Create(Self); email.SetFromMimeSb(sbMime.ControlInterface); if (email.ReceivedSigned = 1) then begin Memo1.Lines.Add('This email was signed.'); // Check to see if the signatures were verified. if (email.SignaturesValid = 1) then begin Memo1.Lines.Add('Digital signature(s) verified.'); Memo1.Lines.Add('Signer: ' + email.SignedBy); // The certificate used for signing may be obtained // by calling email.GetSignedByCert. cert := email.GetSignedByCert(); if (email.LastMethodSuccess <> 1) then begin Memo1.Lines.Add('Failed to get signing certificate object.'); end else begin Memo1.Lines.Add('Signing cert: ' + cert.SubjectCN); end; end; end else begin Memo1.Lines.Add('Digital signature verification failed.'); end; if (alreadySavedParts <> 1) then begin email.SaveAllAttachments('qa_output'); end; end; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.