Sample code for 30+ languages & platforms
Objective-C

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 Objective-C Downloads

Objective-C
#import <CkoImap.h>
#import <CkoCertStore.h>
#import <CkoJsonObject.h>
#import <CkoCert.h>
#import <CkoMessageSet.h>
#import <CkoEmailBundle.h>
#import <CkoEmail.h>

BOOL success = NO;

//  This example assumes the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

CkoImap *imap = [[CkoImap alloc] init];

//  To use a secure SSL connection, set SSL and the port:
imap.Ssl = YES;
//  The typical port for IMAP SSL is 993
imap.Port = [NSNumber numberWithInt: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.)
CkoCertStore *certStore = [[CkoCertStore alloc] init];
//  The 1st argument is the filename, the 2nd arg is the 
//  PFX file's password:
success = [certStore LoadPfxFile: @"myCertWithPrivateKey.pfx" password: @"secret"];
if (success == NO) {
    NSLog(@"%@",certStore.LastErrorText);
    return;
}

//  Find the certificate by the subject common name:
CkoJsonObject *jsonCN = [[CkoJsonObject alloc] init];
[jsonCN UpdateString: @"CN" value: @"cert common name"];

CkoCert *cert = [[CkoCert alloc] init];
success = [certStore FindCert: jsonCN cert: cert];
if (success == NO) {
    NSLog(@"%@",certStore.LastErrorText);
    return;
}

//  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:
CkoCert *cert2 = [[CkoCert alloc] init];
//  The 1st argument is the filename, the 2nd arg is the 
//  PFX file's password:
success = [cert2 LoadPfxFile: @"myClientCert.pfx" password: @"secret"];
if (success == NO) {
    NSLog(@"%@",cert.LastErrorText);
    return;
}

//  Use the cert:
success = [imap SetSslClientCert: cert];

//  Connect to an IMAP server.
success = [imap Connect: @"imap.example.com"];
if (success == NO) {
    NSLog(@"%@",imap.LastErrorText);
    return;
}

//  Login
success = [imap Login: @"myLogin" password: @"myPassword"];
if (success == NO) {
    NSLog(@"%@",imap.LastErrorText);
    return;
}

//  Select an IMAP mailbox
success = [imap SelectMailbox: @"Inbox"];
if (success == NO) {
    NSLog(@"%@",imap.LastErrorText);
    return;
}

//  Get the message IDs of all the emails in the mailbox
BOOL fetchUids = YES;
CkoMessageSet *messageSet = [[CkoMessageSet alloc] init];
success = [imap QueryMbx: @"ALL" bUid: fetchUids msgSet: messageSet];
if (success == NO) {
    NSLog(@"%@",imap.LastErrorText);
    return;
}

//  Fetch the emails into a bundle object:
CkoEmailBundle *bundle = [[CkoEmailBundle alloc] init];
BOOL headersOnly = NO;
success = [imap FetchMsgSet: headersOnly msgSet: messageSet bundle: bundle];
if (success == NO) {
    NSLog(@"%@",imap.LastErrorText);
    return;
}

//  Loop over the bundle and display the FROM and SUBJECT of each.
CkoEmail *email = [[CkoEmail alloc] init];
int i = 0;
int numEmails = [bundle.MessageCount intValue];
while (i < numEmails) {
    [bundle EmailAt: [NSNumber numberWithInt: i] email: email];

    NSLog(@"%@",email.From);
    NSLog(@"%@",email.Subject);
    NSLog(@"%@",@"--");
    i = i + 1;
}

//  Disconnect from the IMAP server.
success = [imap Disconnect];