Visual FoxPro
Visual FoxPro
Using Client Certificate w/ IMAP SSL
Demonstrates 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.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loImap
LOCAL loCertStore
LOCAL loJsonCN
LOCAL loCert
LOCAL loCert2
LOCAL lnFetchUids
LOCAL loMessageSet
LOCAL loBundle
LOCAL lnHeadersOnly
LOCAL loEmail
LOCAL i
LOCAL lnNumEmails
lnSuccess = 0
* This example assumes the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.
loImap = CreateObject('Chilkat.Imap')
* To use a secure SSL connection, set SSL and the port:
loImap.Ssl = 1
* The typical port for IMAP SSL is 993
loImap.Port = 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.)
loCertStore = CreateObject('Chilkat.CertStore')
* The 1st argument is the filename, the 2nd arg is the
* PFX file's password:
lnSuccess = loCertStore.LoadPfxFile("myCertWithPrivateKey.pfx","secret")
IF (lnSuccess = 0) THEN
? loCertStore.LastErrorText
RELEASE loImap
RELEASE loCertStore
CANCEL
ENDIF
* Find the certificate by the subject common name:
loJsonCN = CreateObject('Chilkat.JsonObject')
loJsonCN.UpdateString("CN","cert common name")
loCert = CreateObject('Chilkat.Cert')
lnSuccess = loCertStore.FindCert(loJsonCN,loCert)
IF (lnSuccess = 0) THEN
? loCertStore.LastErrorText
RELEASE loImap
RELEASE loCertStore
RELEASE loJsonCN
RELEASE loCert
CANCEL
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:
loCert2 = CreateObject('Chilkat.Cert')
* The 1st argument is the filename, the 2nd arg is the
* PFX file's password:
lnSuccess = loCert2.LoadPfxFile("myClientCert.pfx","secret")
IF (lnSuccess = 0) THEN
? loCert.LastErrorText
RELEASE loImap
RELEASE loCertStore
RELEASE loJsonCN
RELEASE loCert
RELEASE loCert2
CANCEL
ENDIF
* Use the cert:
lnSuccess = loImap.SetSslClientCert(loCert)
* Connect to an IMAP server.
lnSuccess = loImap.Connect("imap.example.com")
IF (lnSuccess = 0) THEN
? loImap.LastErrorText
RELEASE loImap
RELEASE loCertStore
RELEASE loJsonCN
RELEASE loCert
RELEASE loCert2
CANCEL
ENDIF
* Login
lnSuccess = loImap.Login("myLogin","myPassword")
IF (lnSuccess = 0) THEN
? loImap.LastErrorText
RELEASE loImap
RELEASE loCertStore
RELEASE loJsonCN
RELEASE loCert
RELEASE loCert2
CANCEL
ENDIF
* Select an IMAP mailbox
lnSuccess = loImap.SelectMailbox("Inbox")
IF (lnSuccess = 0) THEN
? loImap.LastErrorText
RELEASE loImap
RELEASE loCertStore
RELEASE loJsonCN
RELEASE loCert
RELEASE loCert2
CANCEL
ENDIF
* Get the message IDs of all the emails in the mailbox
lnFetchUids = 1
loMessageSet = CreateObject('Chilkat.MessageSet')
lnSuccess = loImap.QueryMbx("ALL",lnFetchUids,loMessageSet)
IF (lnSuccess = 0) THEN
? loImap.LastErrorText
RELEASE loImap
RELEASE loCertStore
RELEASE loJsonCN
RELEASE loCert
RELEASE loCert2
RELEASE loMessageSet
CANCEL
ENDIF
* Fetch the emails into a bundle object:
loBundle = CreateObject('Chilkat.EmailBundle')
lnHeadersOnly = 0
lnSuccess = loImap.FetchMsgSet(lnHeadersOnly,loMessageSet,loBundle)
IF (lnSuccess = 0) THEN
? loImap.LastErrorText
RELEASE loImap
RELEASE loCertStore
RELEASE loJsonCN
RELEASE loCert
RELEASE loCert2
RELEASE loMessageSet
RELEASE loBundle
CANCEL
ENDIF
* Loop over the bundle and display the FROM and SUBJECT of each.
loEmail = CreateObject('Chilkat.Email')
i = 0
lnNumEmails = loBundle.MessageCount
DO WHILE i < lnNumEmails
loBundle.EmailAt(i,loEmail)
? loEmail.From
? loEmail.Subject
? "--"
i = i + 1
ENDDO
* Disconnect from the IMAP server.
lnSuccess = loImap.Disconnect()
RELEASE loImap
RELEASE loCertStore
RELEASE loJsonCN
RELEASE loCert
RELEASE loCert2
RELEASE loMessageSet
RELEASE loBundle
RELEASE loEmail