Objective-C
Objective-C
Process New Email by Scanning for Senders
Scan email and save application-selected emails to EML files with unique filenames.Chilkat Objective-C Downloads
#import <CkoImap.h>
#import <CkoMessageSet.h>
#import <CkoEmailBundle.h>
#import <CkoEmail.h>
#import <NSString.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];
// 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: @"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;
}
// We can choose to fetch UIDs or sequence numbers.
BOOL fetchUids = YES;
// Fetch messages from the mailbox using a search criteria.
// This example finds NEW emails: these are emails that have the RECENT flag set, but not the SEEN flag:
CkoMessageSet *messageSet = [[CkoMessageSet alloc] init];
success = [imap QueryMbx: @"NEW" bUid: fetchUids msgSet: messageSet];
if (success == NO) {
NSLog(@"%@",imap.LastErrorText);
return;
}
// This example will download headers, and then download
// the full email for those emails sent from a contact
// in our database.
// When downloading headers, each email object contains
// (obviously) the headers, but the body will be missing.
// Also, attachments will not be included. However, it is
// possible to get information about the attachments
// as well as the complete size of the email.
CkoEmailBundle *bundle = [[CkoEmailBundle alloc] init];
BOOL headersOnly = YES;
success = [imap FetchMsgSet: headersOnly msgSet: messageSet bundle: bundle];
if (success == NO) {
NSLog(@"%@",imap.LastErrorText);
return;
}
// Loop over the email objects...
CkoEmail *emailHeader = [[CkoEmail alloc] init];
CkoEmail *fullEmail = [[CkoEmail alloc] init];
int i = 0;
int numEmails = [bundle.MessageCount intValue];
while (i < numEmails) {
[bundle EmailAt: [NSNumber numberWithInt: i] email: emailHeader];
// The sender's email address and name are available
// in the From, FromAddress, and FromName properties.
// If the sender is "Chilkat Support <support@chilkatsoft.com",
// then the From property will hold the entire string.
// the FromName property contains"Chilkat Support",
// and the FromAddress property contains "support@chilkatsoft.com";
NSLog(@"%@",emailHeader.From);
NSLog(@"%@",emailHeader.FromAddress);
NSLog(@"%@",emailHeader.FromName);
// Assume at this point your code checks to see if the sender
// is one in your contacts database. If so, this is
// the code you would write to download the entire
// email and save it to a file.
// The ckx-imap-uid header field is added when
// headers are downloaded. This makes it possible
// to get the UID from the email object.
NSString *uidStr = [emailHeader GetHeaderField: @"ckx-imap-uid"];
int uid = [uidStr intValue];
success = [imap FetchEmail: NO msgId: uid bUid: YES email: fullEmail];
if (success == NO) {
NSLog(@"%@",imap.LastErrorText);
return;
}
// You can use the GenerateFilename method to
// generate a unique filename...
NSString *filename = [fullEmail GenerateFilename];
// SaveEml saves the entire email, including attachments.
success = [fullEmail SaveEml: filename];
NSLog(@"%@",@"--");
i = i + 1;
}
// Disconnect from the IMAP server.
success = [imap Disconnect];