Sample code for 30+ languages & platforms
Objective-C

Download an IMAP Message Set

Demonstrates how to read a set of IMAP emails.

Chilkat Objective-C Downloads

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

BOOL success = NO;

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

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

//  Connect using TLS.
imap.Ssl = YES;
imap.Port = [NSNumber numberWithInt:993];
success = [imap Connect: @"imap.example.com"];
if (success == NO) {
    NSLog(@"%@",imap.LastErrorText);
    return;
}

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

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

//  Search for messages with the word "test" in the subject.
BOOL fetchUids = YES;

CkoMessageSet *messageSet = [[CkoMessageSet alloc] init];
success = [imap QueryMbx: @"Subject test" bUid: fetchUids msgSet: messageSet];
if (success == NO) {
    NSLog(@"%@",imap.LastErrorText);
    return;
}

//  Download the messages in a single call to FetchMsgSet.
//  
//  This only makes sense if the number of emails to be downloaded is not too large.  
//  For example, you wouldn't want to download 10000 emails in a single call to FetchMsgSet.
//  Why? For two reasons:  (1) It could potentially cause an out-of-memory condition, and 
//  (2) it would take an extremely large amount of time.  The longer the amount of time,
//  the greater the likelihood of some kind of external networking or server problem occuring,
//  and if it happens, then you would need to re-download everything from the beginning again.
//  For large numbers of emails, it's better to loop over the emails in the message set
//  and download/process one at a time as shown here: Download IMAP Messages One at a Time
//  Downloading one message at a time makes it possible to resume the downloads rather than restart the entire operation all over again.

//  If the message set is reasonable in size, you can download all at once using FetchMsgSet:

NSLog(@"%@%d",@"Number of messages = ",[messageSet.Count intValue]);

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

//  Display the Subject and From of each email.
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 GetHeaderField: @"Date"]);
    NSLog(@"%@",email.Subject);
    NSLog(@"%@",email.From);
    NSLog(@"%@",@"--");
    i = i + 1;
}