Sample code for 30+ languages & platforms
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

Visual FoxPro
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