public override void Initialise(List <MailFolder> folderList) { Status = MessageProcessorStatus.Initialising; _folders = new List <ImapFolder>(); try { _imapClient = new ImapClient(_server, _useSsl ? 993 : 143, _username, _password, AuthMethod.Login, _useSsl, delegate { return(true); }); Logger.Debug("Logged into " + _server + " as " + _username); var folders = _imapClient.ListMailboxes(); if (_startDate != null || _endDate != null) { // ok we need to do a search if (_startDate != null) { _searchCondition = SearchCondition.Since((DateTime)_startDate); } if (_endDate != null) { _searchCondition = _searchCondition == null ? SearchCondition.Before((DateTime)_endDate) : _searchCondition.And(SearchCondition.Before((DateTime)_endDate)); } Logger.Debug("Only getting messages " + _searchCondition); } // Are we limiting the folder list? if (_limitFolderList != null) { var newFolders = new List <String>(); foreach (var mailbox in _limitFolderList) { var mailboxMatch = mailbox.ToLower().Replace('\\', '/');; newFolders.AddRange(folders.Where(folder => folder.ToLower().Equals(mailboxMatch))); } folders = newFolders; } foreach (var folderPath in folders) { bool isPublicFolder = false; var destinationFolder = FolderMapping.ApplyMappings(folderPath, Provider); if (IncludePublicFolders && (String.Equals(destinationFolder, PublicFolderRoot) || destinationFolder.StartsWith(PublicFolderRoot + @"\"))) { isPublicFolder = true; var start = PublicFolderRoot.Length + (destinationFolder.StartsWith(PublicFolderRoot + @"\") ? 1 : 0); destinationFolder = destinationFolder.Substring(start, destinationFolder.Length - start); } if (!String.IsNullOrWhiteSpace(destinationFolder)) { try { var folder = _imapClient.GetMailboxInfo(folderPath); if (folder.Messages == 0) { Logger.Debug("Skipping folder " + folderPath + ", no messages at all."); continue; } int messageCount = 0; if (_searchCondition != null) { var uids = _imapClient.Search(_searchCondition, folderPath); messageCount = uids.Count(); } else { messageCount = folder.Messages; } // Add it to our main folder list _mainFolderList.Add(new MailFolder() { DestinationFolder = destinationFolder, MessageCount = FailedMessageCount, SourceFolder = folderPath }); if (messageCount == 0) { Logger.Debug("Skipping folder " + folderPath + ", no messages within criteria."); continue; } _folders.Add(new ImapFolder() { MappedDestination = destinationFolder, FolderPath = folder, IsPublicFolder = isPublicFolder }); TotalMessages += !_testOnly ? messageCount : (messageCount > 20 ? 20 : messageCount); Logger.Debug("Will process " + folderPath + " => " + (isPublicFolder ? "[PUBLIC FOLDER]/" : "") + destinationFolder + ", " + messageCount + " messages, " + TotalMessages + " messages total so far."); } catch (Exception ex) { Logger.Error("Failed to get Mailbox " + folderPath + ", skipping.", ex); } } else { Logger.Info("Ignoring folder " + folderPath + ", no destination specified."); } } } catch (InvalidCredentialsException ex) { Logger.Error("Imap Runner for " + _username + " [********] to " + _server + " failed : " + ex.Message, ex); throw new MessageProcessorException("Imap Runner for " + _username + " [********] to " + _server + " failed : " + ex.Message) { Status = MessageProcessorStatus.SourceAuthFailure }; } catch (SocketException ex) { Logger.Error("Imap Runner for " + _username + " [********] to " + _server + " failed : " + ex.Message, ex); throw new MessageProcessorException("Imap Runner for " + _username + " [********] to " + _server + " failed : " + ex.Message) { Status = MessageProcessorStatus.ConnectionError }; } NextReader.Initialise(_mainFolderList); Status = MessageProcessorStatus.Initialised; Logger.Info("ExchangeExporter Initialised"); }