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
(C) Copy Email from one IMAP Account to AnotherDemonstrates how to copy the email in a mailbox from one account to another.
#include <C_CkImap.h> #include <C_CkMessageSet.h> #include <C_CkFileAccess.h> #include <C_CkStringBuilder.h> void ChilkatSample(void) { HCkImap imapSrc; BOOL success; HCkImap imapDest; BOOL fetchUids; HCkMessageSet mset; HCkFileAccess fac; HCkMessageSet msetAlreadyCopied; const char *strMsgSet; int numUids; HCkStringBuilder sbFlags; int i; int uid; const char *flags; const char *mimeStr; BOOL seen; BOOL flagged; BOOL answered; BOOL draft; imapSrc = CkImap_Create(); // This example assumes Chilkat Imap to have been previously unlocked. // See Unlock Imap for sample code. // Connect to our source IMAP server. CkImap_putSsl(imapSrc,TRUE); CkImap_putPort(imapSrc,993); success = CkImap_Connect(imapSrc,"MY-IMAP-DOMAIN"); if (success != TRUE) { printf("%s\n",CkImap_lastErrorText(imapSrc)); CkImap_Dispose(imapSrc); return; } // Login to the source IMAP server success = CkImap_Login(imapSrc,"MY-IMAP-LOGIN","MY-IMAP-PASSWORD"); if (success != TRUE) { printf("%s\n",CkImap_lastErrorText(imapSrc)); CkImap_Dispose(imapSrc); return; } imapDest = CkImap_Create(); // Connect to our destination IMAP server. CkImap_putSsl(imapDest,TRUE); CkImap_putPort(imapDest,993); success = CkImap_Connect(imapDest,"MY-IMAP-DOMAIN2"); if (success != TRUE) { printf("%s\n",CkImap_lastErrorText(imapDest)); CkImap_Dispose(imapSrc); CkImap_Dispose(imapDest); return; } // Login to the destination IMAP server success = CkImap_Login(imapDest,"MY-IMAP-LOGIN2","MY-IMAP-PASSWORD2"); if (success != TRUE) { printf("%s\n",CkImap_lastErrorText(imapDest)); CkImap_Dispose(imapSrc); CkImap_Dispose(imapDest); return; } // Select a source IMAP mailbox on the source IMAP server success = CkImap_SelectMailbox(imapSrc,"Inbox"); if (success != TRUE) { printf("%s\n",CkImap_lastErrorText(imapSrc)); CkImap_Dispose(imapSrc); CkImap_Dispose(imapDest); return; } fetchUids = TRUE; // Get the set of UIDs for all emails on the source server. mset = CkImap_Search(imapSrc,"ALL",fetchUids); if (CkImap_getLastMethodSuccess(imapSrc) != TRUE) { printf("%s\n",CkImap_lastErrorText(imapSrc)); CkImap_Dispose(imapSrc); CkImap_Dispose(imapDest); return; } // Load the complete set of UIDs that were previously copied. // We dont' want to copy any of these to the destination. fac = CkFileAccess_Create(); msetAlreadyCopied = CkMessageSet_Create(); strMsgSet = CkFileAccess_readEntireTextFile(fac,"qa_cache/saAlreadyLoaded.txt","utf-8"); if (CkFileAccess_getLastMethodSuccess(fac) == TRUE) { CkMessageSet_FromCompactString(msetAlreadyCopied,strMsgSet); } numUids = CkMessageSet_getCount(mset); sbFlags = CkStringBuilder_Create(); i = 0; while (i < numUids) { // If this UID was not already copied... uid = CkMessageSet_GetId(mset,i); if (!CkMessageSet_ContainsId(msetAlreadyCopied,uid)) { printf("copying %d...\n",uid); // Get the flags. flags = CkImap_fetchFlags(imapSrc,uid,TRUE); if (CkImap_getLastMethodSuccess(imapSrc) == FALSE) { printf("%s\n",CkImap_lastErrorText(imapSrc)); CkImap_Dispose(imapSrc); CkImap_Dispose(imapDest); CkFileAccess_Dispose(fac); CkMessageSet_Dispose(msetAlreadyCopied); CkStringBuilder_Dispose(sbFlags); return; } CkStringBuilder_SetString(sbFlags,flags); // Get the MIME of this email from the source. mimeStr = CkImap_fetchSingleAsMime(imapSrc,uid,TRUE); if (CkImap_getLastMethodSuccess(imapSrc) == FALSE) { printf("%s\n",CkImap_lastErrorText(imapSrc)); CkImap_Dispose(imapSrc); CkImap_Dispose(imapDest); CkFileAccess_Dispose(fac); CkMessageSet_Dispose(msetAlreadyCopied); CkStringBuilder_Dispose(sbFlags); return; } seen = CkStringBuilder_Contains(sbFlags,"\\Seen",FALSE); flagged = CkStringBuilder_Contains(sbFlags,"\\Flagged",FALSE); answered = CkStringBuilder_Contains(sbFlags,"\\Answered",FALSE); draft = CkStringBuilder_Contains(sbFlags,"\\Draft",FALSE); success = CkImap_AppendMimeWithFlags(imapDest,"Inbox",mimeStr,seen,flagged,answered,draft); if (success != TRUE) { printf("%s\n",CkImap_lastErrorText(imapDest)); CkImap_Dispose(imapSrc); CkImap_Dispose(imapDest); CkFileAccess_Dispose(fac); CkMessageSet_Dispose(msetAlreadyCopied); CkStringBuilder_Dispose(sbFlags); return; } // Update msetAlreadyCopied with the uid just copied. CkMessageSet_InsertId(msetAlreadyCopied,uid); // Save at every iteration just in case there's a failure.. strMsgSet = CkMessageSet_toCompactString(msetAlreadyCopied); CkFileAccess_WriteEntireTextFile(fac,"qa_cache/saAlreadyLoaded.txt",strMsgSet,"utf-8",FALSE); } i = i + 1; } CkMessageSet_Dispose(mset); // Disconnect from the IMAP servers. success = CkImap_Disconnect(imapSrc); success = CkImap_Disconnect(imapDest); CkImap_Dispose(imapSrc); CkImap_Dispose(imapDest); CkFileAccess_Dispose(fac); CkMessageSet_Dispose(msetAlreadyCopied); CkStringBuilder_Dispose(sbFlags); } |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.