Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Objective-C) Copy Email from one IMAP Account to AnotherDemonstrates how to copy the email in a mailbox from one account to another.
#import <CkoImap.h> #import <CkoMessageSet.h> #import <CkoFileAccess.h> #import <NSString.h> #import <CkoStringBuilder.h> CkoImap *imapSrc = [[CkoImap alloc] init]; // This example assumes Chilkat Imap to have been previously unlocked. // See Unlock Imap for sample code. // Connect to our source IMAP server. imapSrc.Ssl = YES; imapSrc.Port = [NSNumber numberWithInt:993]; BOOL success = [imapSrc Connect: @"MY-IMAP-DOMAIN"]; if (success != YES) { NSLog(@"%@",imapSrc.LastErrorText); return; } // Login to the source IMAP server success = [imapSrc Login: @"MY-IMAP-LOGIN" password: @"MY-IMAP-PASSWORD"]; if (success != YES) { NSLog(@"%@",imapSrc.LastErrorText); return; } CkoImap *imapDest = [[CkoImap alloc] init]; // Connect to our destination IMAP server. imapDest.Ssl = YES; imapDest.Port = [NSNumber numberWithInt:993]; success = [imapDest Connect: @"MY-IMAP-DOMAIN2"]; if (success != YES) { NSLog(@"%@",imapDest.LastErrorText); return; } // Login to the destination IMAP server success = [imapDest Login: @"MY-IMAP-LOGIN2" password: @"MY-IMAP-PASSWORD2"]; if (success != YES) { NSLog(@"%@",imapDest.LastErrorText); return; } // Select a source IMAP mailbox on the source IMAP server success = [imapSrc SelectMailbox: @"Inbox"]; if (success != YES) { NSLog(@"%@",imapSrc.LastErrorText); return; } BOOL fetchUids = YES; // Get the set of UIDs for all emails on the source server. CkoMessageSet *mset = [imapSrc Search: @"ALL" bUid: fetchUids]; if (imapSrc.LastMethodSuccess != YES) { NSLog(@"%@",imapSrc.LastErrorText); return; } // Load the complete set of UIDs that were previously copied. // We dont' want to copy any of these to the destination. CkoFileAccess *fac = [[CkoFileAccess alloc] init]; CkoMessageSet *msetAlreadyCopied = [[CkoMessageSet alloc] init]; NSString *strMsgSet = [fac ReadEntireTextFile: @"qa_cache/saAlreadyLoaded.txt" charset: @"utf-8"]; if (fac.LastMethodSuccess == YES) { [msetAlreadyCopied FromCompactString: strMsgSet]; } int numUids = [mset.Count intValue]; CkoStringBuilder *sbFlags = [[CkoStringBuilder alloc] init]; int i = 0; while (i < numUids) { // If this UID was not already copied... int uid = [[mset GetId: [NSNumber numberWithInt: i]] intValue]; if (![msetAlreadyCopied ContainsId: [NSNumber numberWithInt: uid]]) { NSLog(@"%@%d%@",@"copying ",uid,@"..."); // Get the flags. NSString *flags = [imapSrc FetchFlags: [NSNumber numberWithInt: uid] bUid: YES]; if (imapSrc.LastMethodSuccess == NO) { NSLog(@"%@",imapSrc.LastErrorText); return; } [sbFlags SetString: flags]; // Get the MIME of this email from the source. NSString *mimeStr = [imapSrc FetchSingleAsMime: [NSNumber numberWithInt: uid] bUid: YES]; if (imapSrc.LastMethodSuccess == NO) { NSLog(@"%@",imapSrc.LastErrorText); return; } BOOL seen = [sbFlags Contains: @"\\Seen" caseSensitive: NO]; BOOL flagged = [sbFlags Contains: @"\\Flagged" caseSensitive: NO]; BOOL answered = [sbFlags Contains: @"\\Answered" caseSensitive: NO]; BOOL draft = [sbFlags Contains: @"\\Draft" caseSensitive: NO]; success = [imapDest AppendMimeWithFlags: @"Inbox" mimeText: mimeStr seen: seen flagged: flagged answered: answered draft: draft]; if (success != YES) { NSLog(@"%@",imapDest.LastErrorText); return; } // Update msetAlreadyCopied with the uid just copied. [msetAlreadyCopied InsertId: [NSNumber numberWithInt: uid]]; // Save at every iteration just in case there's a failure.. strMsgSet = [msetAlreadyCopied ToCompactString]; [fac WriteEntireTextFile: @"qa_cache/saAlreadyLoaded.txt" fileData: strMsgSet charset: @"utf-8" includePreamble: NO]; } i = i + 1; } // Disconnect from the IMAP servers. success = [imapSrc Disconnect]; success = [imapDest Disconnect]; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.