Sample code for 30+ languages & platforms
Objective-C

How to Download Messages in MessageSet One at a Time

See more IMAP Examples

If a message set contains a huge number of emails, it's NOT a good idea to try to download all at once into an email bundle using a method such as FetchBundle. It's better to iterate over the messages in the set to download one by one.

Chilkat Objective-C Downloads

Objective-C
#import <CkoImap.h>
#import <CkoMessageSet.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 and return a set of matching messages.
// (This example will simply search for ALL messages.)
BOOL fetchUids = YES;

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

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

CkoEmail *email = [[CkoEmail alloc] init];
int i = 0;
while (i < [messageSet.Count intValue]) {
    success = [imap FetchEmail: NO msgId: [messageSet GetId: [NSNumber numberWithInt: i]] bUid: fetchUids email: email];
    if (success == NO) {
        NSLog(@"%@",imap.LastErrorText);
        return;
    }

    NSLog(@"%@%@%@",email.From,@"; ",email.Subject);

    i = i + 1;
}

NSLog(@"%@",@"OK");