Objective-C
Objective-C
IMAP Download and Verify Signed (S/MIME) Email
See more IMAP Examples
Demonstrates how to download and verify digitally signed S/MIME email.Chilkat Objective-C Downloads
#import <CkoImap.h>
#import <CkoMessageSet.h>
#import <CkoEmail.h>
#import <CkoCert.h>
#import <NSString.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;
}
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;
// Get the message IDs of all the emails in the mailbox
CkoMessageSet *messageSet = [[CkoMessageSet alloc] init];
success = [imap QueryMbx: @"ALL" bUid: fetchUids msgSet: messageSet];
if (success == NO) {
NSLog(@"%@",imap.LastErrorText);
return;
}
CkoEmail *email = [[CkoEmail alloc] init];
CkoCert *cert = [[CkoCert alloc] init];
int i = 0;
while (i < [messageSet.Count intValue]) {
NSString *uid = [messageSet GetId: [NSNumber numberWithInt: i]];
NSLog(@"%@%@",@"uid: ",uid);
success = [imap FetchEmail: NO msgId: uid bUid: YES email: email];
if (success == NO) {
NSLog(@"%@",imap.LastErrorText);
return;
}
// The security layers of signed and/or encrypted emails
// are automatically "unwrapped" when loaded into
// a Chilkat email object.
// An application only needs to check to see if an email
// was received signed or encrypted, and then examine
// the success/failure. For example:
if (email.ReceivedSigned == YES) {
NSLog(@"%@",@"This email was signed.");
// Check to see if the signatures were verified.
if (email.SignaturesValid == YES) {
NSLog(@"%@",@"Digital signature(s) verified.");
NSLog(@"%@%@",@"Signer: ",email.SignedBy);
// Get the certificate used for signing.
success = [email LastSignerCert: [NSNumber numberWithInt: 0] cert: cert];
if (success == NO) {
NSLog(@"%@",@"Failed to get signing certificate object.");
}
else {
NSLog(@"%@%@",@"Signing cert: ",cert.SubjectCN);
}
}
else {
NSLog(@"%@",@"Digital signature verification failed.");
}
}
i = i + 1;
}
// Disconnect from the IMAP server.
success = [imap Disconnect];