/// <summary> /// SentSince = Date = DateFrom /// SentBefore = Date + 1 = DateTO /// </summary> /// <returns></returns> public SearchCondition SetSearchConditions() { SearchCondition result = SearchCondition.All(); if (this.SearchByDateRange) { result = result.And(SearchCondition.SentBefore(new DateTime(DateTo.Year, DateTo.Month, DateTo.Day).AddDays(1)) .And(SearchCondition.SentSince(new DateTime(DateFrom.Year, DateFrom.Month, DateFrom.Day)))); } if (this.Unread) { result = result.And(SearchCondition.Unseen()); } if (!string.IsNullOrEmpty(this.Sender)) { result = result.And(SearchCondition.From(this.Sender)); } if (!string.IsNullOrEmpty(this.Subject)) { result = result.And(SearchCondition.Subject(this.Subject)); } return(result); }
public static List <MailMessage> SearchMessages(MailObj mObj, string searchFrom, string searchSubject, string searchText, string searchKeyword) { using (ImapClient Client = new ImapClient(mObj.ServerAddress, mObj.Port, mObj.MailAddress, mObj.MailAddressPassword, AuthMethod.Login, true)) { List <SearchCondition> scList = new List <SearchCondition>(); if (!string.IsNullOrWhiteSpace(searchFrom)) { scList.Add(SearchCondition.From(searchFrom)); } if (!string.IsNullOrWhiteSpace(searchSubject)) { scList.Add(SearchCondition.Subject(searchSubject)); } if (!string.IsNullOrWhiteSpace(searchText)) { scList.Add(SearchCondition.Text(searchText)); } if (!string.IsNullOrWhiteSpace(searchKeyword)) { scList.Add(SearchCondition.Keyword(searchKeyword)); } if (scList.Count > 0) { SearchCondition allConditions = scList[0]; for (int i = 1; i < scList.Count; i++) { allConditions.And(scList[i]); } IEnumerable <uint> uids = Client.Search(allConditions); return(Client.GetMessages(uids).ToList()); } return(new List <MailMessage>()); } }
/// <summary> /// Creates a <see cref="SearchCondition"/> object from a <see cref="EmailSearchCriteria"/> /// </summary> /// <param name="searchCriteria"></param> /// <returns></returns> private SearchCondition GetSearchCondition(EmailSearchCriteria searchCriteria) { var searchCondition = new SearchCondition(); if (!string.IsNullOrWhiteSpace(searchCriteria.From)) { searchCondition = searchCondition.And(SearchCondition.From(searchCriteria.From)); } if (searchCriteria.After.HasValue) { searchCondition = searchCondition.And(SearchCondition.SentBefore(searchCriteria.After.Value)); } if (searchCriteria.Since.HasValue) { searchCondition = searchCondition.And(SearchCondition.SentSince(searchCriteria.Since.Value)); } if (searchCriteria.Unread.HasValue) { searchCondition = searchCondition.And(searchCriteria.Unread.Value ? SearchCondition.Unseen() : SearchCondition.Seen()); } if (searchCriteria.SubjectKeywords != null && searchCriteria.SubjectKeywords.Any()) { searchCondition = searchCondition.And( searchCriteria.SubjectKeywords.Select(SearchCondition.Subject).Aggregate((sc1, sc2) => sc1.Or(sc2))); } if (searchCriteria.BodyKeywords != null && searchCriteria.BodyKeywords.Any()) { searchCondition = searchCondition.And( searchCriteria.BodyKeywords.Select(SearchCondition.Body).Aggregate((sc1, sc2) => sc1.Or(sc2))); } return(searchCondition); }
public void InitCredential() { _searchCondition = new SearchCondition(); SearchCondition condition = null; if (!string.IsNullOrEmpty(Senders)) { List <string> mSenders = Senders.Split(';').ToList(); condition = SearchCondition.From(mSenders[0]); for (int i = 1; i < mSenders.Count; i++) { string sender = mSenders[i]; if (string.IsNullOrEmpty(sender)) { continue; } condition = condition.Or(SearchCondition.From(sender)); } } SearchCondition conditionSubject = null; if (!string.IsNullOrEmpty(Subjects)) { List <string> mSubjects = Subjects.Split(';').ToList(); conditionSubject = SearchCondition.Subject(mSubjects[0]); for (int i = 1; i < mSubjects.Count; i++) { string sub = mSubjects[i]; if (string.IsNullOrEmpty(sub)) { continue; } conditionSubject = conditionSubject.Or(SearchCondition.Subject(sub)); } } _searchCondition = SearchCondition.Unseen(); if (condition != null) { _searchCondition = _searchCondition.And(condition); } if (conditionSubject != null) { _searchCondition = _searchCondition.And(conditionSubject); } try { if (_email != null) { _email.Logout(); } } catch { } try { if (!string.IsNullOrEmpty(Credential.UserName) && !string.IsNullOrEmpty(Credential.Host)) { _email = new ImapClient(Credential.Host, Credential.Port, Credential.UserName, Credential.Password, AuthMethod.Login, Credential.Ssl); } } catch (Exception ex) { Console.Write(ex.Message); throw ex; } }
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"); }