Sample code for 30+ languages & platforms
Objective-C

Fetch Single Email by UID or Sequence Number

Assuming the UID is known, download a single email by UID from an IMAP mail server.

Chilkat Objective-C Downloads

Objective-C
#import <CkoImap.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 to an IMAP server.
//  Use TLS
imap.Ssl = YES;
imap.Port = [NSNumber numberWithInt:993];
success = [imap Connect: @"imap.example.com"];
if (success == NO) {
    NSLog(@"%@",imap.LastErrorText);
    return;
}

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

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

CkoEmail *email = [[CkoEmail alloc] init];

int uid = 2014;
BOOL isUid = YES;

success = [imap FetchEmail: NO msgId: uid bUid: isUid email: email];
if (success == NO) {
    NSLog(@"%@",imap.LastErrorText);
    return;
}

//  Display the From and Subject
NSLog(@"%@",email.FromAddress);
NSLog(@"%@",email.Subject);

//  Display the Body property, which is the default body.
//  If an email has an HTML body, the Body property contains
//  the HTML source.  Otherwise it contains the plain-text
//  body.
NSLog(@"%@",@"---- EMAIL BODY ----");
NSLog(@"%@",email.Body);
NSLog(@"%@",@"--------------------");

//  Display the recipients:
int j;
for (j = 0; j <= [email.NumTo intValue] - 1; j++) {
    NSLog(@"%@%@%@",[email GetToName: [NSNumber numberWithInt: j]],@", ",[email GetToAddr: [NSNumber numberWithInt: j]]);
}

for (j = 0; j <= [email.NumCC intValue] - 1; j++) {
    NSLog(@"%@%@%@",[email GetCcName: [NSNumber numberWithInt: j]],@", ",[email GetCcAddr: [NSNumber numberWithInt: j]]);
}

//  Show the total size of the email, including body and attachments:
NSLog(@"%d",[email.Size intValue]);

//  When a full email is downloaded, we would use the
//  email.NumAttachments property in conjunction with the
//  email.GetMailAttach* methods.
//  However, when an email object contains only the header,
//  we need to access the attachment info differently:
int numAttach = [[imap GetMailNumAttach: email] intValue];
NSLog(@"%d",numAttach);

for (j = 0; j <= numAttach - 1; j++) {
    NSLog(@"%@",[imap GetMailAttachFilename: email attachIndex: [NSNumber numberWithInt: j]]);
    int attachSize = [[imap GetMailAttachSize: email attachIndex: [NSNumber numberWithInt: j]] intValue];
    NSLog(@"%@%d%@",@"    size = ",attachSize,@" bytes");
}

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

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