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
(PureBasic) Using Client Certificate w/ IMAP SSLDemonstrates how to use a client-side certificate with an IMAP SSL connection. The SetSslClientCert method is called to specify a certificate to be used for the SSL connection.
IncludeFile "CkEmailBundle.pb" IncludeFile "CkMessageSet.pb" IncludeFile "CkImap.pb" IncludeFile "CkEmail.pb" IncludeFile "CkCertStore.pb" IncludeFile "CkCert.pb" Procedure ChilkatExample() ; This example assumes the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. imap.i = CkImap::ckCreate() If imap.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; To use a secure SSL connection, set SSL and the port: CkImap::setCkSsl(imap, 1) ; The typical port for IMAP SSL is 993 CkImap::setCkPort(imap, 993) ; Load a certificate from a PFX file and use it. ; Note: Other methods are available to load pre-installed ; certificates from registry-based certificate stores. ; Create an instance of a certificate store object, load a PFX file, ; locate the certificate we need, and use it for signing. ; (a PFX file may contain more than one certificate.) certStore.i = CkCertStore::ckCreate() If certStore.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; The 1st argument is the filename, the 2nd arg is the ; PFX file's password: success.i = CkCertStore::ckLoadPfxFile(certStore,"myCertWithPrivateKey.pfx","secret") If success <> 1 Debug CkCertStore::ckLastErrorText(certStore) CkImap::ckDispose(imap) CkCertStore::ckDispose(certStore) ProcedureReturn EndIf ; Find the certificate by the subject common name: cert.i cert = CkCertStore::ckFindCertBySubjectCN(certStore,"Chilkat Software, Inc.") If CkCertStore::ckLastMethodSuccess(certStore) = 0 Debug CkCertStore::ckLastErrorText(certStore) CkImap::ckDispose(imap) CkCertStore::ckDispose(certStore) ProcedureReturn EndIf ; If a PFX file is known to contain a single certificate, ; you may load it directly into a Chilkat certificate object. ; This snippet of source code shows how: cert2.i = CkCert::ckCreate() If cert2.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; The 1st argument is the filename, the 2nd arg is the ; PFX file's password: success = CkCert::ckLoadPfxFile(cert2,"myClientCert.pfx","secret") If success <> 1 Debug CkCert::ckLastErrorText(cert) CkImap::ckDispose(imap) CkCertStore::ckDispose(certStore) CkCert::ckDispose(cert2) ProcedureReturn EndIf ; Use the cert: success = CkImap::ckSetSslClientCert(imap,cert) ; Connect to an IMAP server. success = CkImap::ckConnect(imap,"imap.someMailServer.com") If success <> 1 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) CkCertStore::ckDispose(certStore) CkCert::ckDispose(cert2) ProcedureReturn EndIf ; Login success = CkImap::ckLogin(imap,"myLogin","myPassword") If success <> 1 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) CkCertStore::ckDispose(certStore) CkCert::ckDispose(cert2) ProcedureReturn EndIf ; Select an IMAP mailbox success = CkImap::ckSelectMailbox(imap,"Inbox") If success <> 1 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) CkCertStore::ckDispose(certStore) CkCert::ckDispose(cert2) ProcedureReturn EndIf messageSet.i ; We can choose to fetch UIDs or sequence numbers. fetchUids.i = 1 ; Get the message IDs of all the emails in the mailbox messageSet = CkImap::ckSearch(imap,"ALL",fetchUids) If CkImap::ckLastMethodSuccess(imap) = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) CkCertStore::ckDispose(certStore) CkCert::ckDispose(cert2) ProcedureReturn EndIf ; Fetch the emails into a bundle object: bundle.i bundle = CkImap::ckFetchBundle(imap,messageSet) If CkImap::ckLastMethodSuccess(imap) = 0 CkMessageSet::ckDispose(messageSet) Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) CkCertStore::ckDispose(certStore) CkCert::ckDispose(cert2) ProcedureReturn EndIf ; Loop over the bundle and display the FROM and SUBJECT of each. i.i = 0 numEmails.i = CkEmailBundle::ckMessageCount(bundle) While i < numEmails email.i = CkEmailBundle::ckGetEmail(bundle,i) Debug CkEmail::ckFrom(email) Debug CkEmail::ckSubject(email) Debug "--" CkEmail::ckDispose(email) i = i + 1 Wend ; Disconnect from the IMAP server. success = CkImap::ckDisconnect(imap) CkMessageSet::ckDispose(messageSet) CkEmailBundle::ckDispose(bundle) CkImap::ckDispose(imap) CkCertStore::ckDispose(certStore) CkCert::ckDispose(cert2) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.