/// <summary> /// Get the list of emails for a search /// </summary> /// <param name="args">The search condition followed by the header only and set as seen booleans</param> /// <returns>The list of mail message that match the search</returns> private List <MimeMessage> GetSearchResults(params object[] args) { List <MimeMessage> messageList = new List <MimeMessage>(); IMailFolder folder = this.GetCurrentFolder(); foreach (UniqueId uid in folder.Search((SearchQuery)args[0], default(CancellationToken))) { if ((bool)args[2]) { folder.AddFlags(uid, MessageFlags.Seen, true); } MimeMessage message = null; if ((bool)args[1]) { HeaderList headers = folder.GetHeaders(uid); message = new MimeMessage(headers); } else { message = folder.GetMessage(uid); } messageList.Add(message); } return(messageList); }
/// <summary> /// Get the list of emails for a search /// </summary> /// <param name="condition">The search condition</param> /// <param name="headersOnly">True if you only want header information</param> /// <param name="markRead">True if you want the emails marked as read</param> /// <returns>The list of mail message that match the search</returns> private List <MimeMessage> GetSearchResults(SearchQuery condition, bool headersOnly, bool markRead) { List <MimeMessage> messageList = new List <MimeMessage>(); IMailFolder folder = this.GetCurrentFolder(); foreach (UniqueId uid in folder.Search(condition, default)) { if (markRead) { folder.AddFlags(uid, MessageFlags.Seen, true); } MimeMessage message; if (headersOnly) { HeaderList headers = folder.GetHeaders(uid); var messageId = headers[HeaderId.MessageId]; message = new MimeMessage(headers) { MessageId = messageId }; } else { message = folder.GetMessage(uid); } messageList.Add(message); } return(messageList); }
private int mailsOnPage = 15; //number of mails on page for one AJAX public async Task <ActionResult> MailList(int page = 0) { IMailFolder folder = (IMailFolder)Session["folder"]; List <IMessageSummary> fetch = (List <IMessageSummary>)Session["messages"]; if (page == 0) { folder.Open(FolderAccess.ReadWrite); fetch = new List <IMessageSummary>(await folder.FetchAsync(0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.Flags)); fetch.Reverse(); Session["messages"] = fetch; } int start = page * mailsOnPage; int end = ((fetch.Count - mailsOnPage) > start) ? start + mailsOnPage - 1 : fetch.Count - 1; List <Mail> mails = new List <Mail>(); for (int i = start; i <= end; i++) { var headers = folder.GetHeaders(fetch[i].UniqueId); await Task.Run(() => mails.Add(new Mail(fetch[i], headers))); } return(PartialView(mails)); }
public override XmlDocument LoadStr(string strToLoad, XmlDocument xDoc = null) { if (!String.IsNullOrWhiteSpace(strToLoad)) { Query = strToLoad; } ConnectToEMailServer(); if (mailStore == null) { return(null); } #region setup the rootNode XmlNode rootNode; if (xDoc == null) { xDoc = new XmlDocument(); } if (xDoc.DocumentElement == null) { rootNode = xDoc.CreateElement(RootNodeName); xDoc.AppendChild(rootNode); } rootNode = xDoc.DocumentElement; #endregion SearchQuery searchQuery = UnreadMailsOnly ? SearchQuery.NotSeen : SearchQuery.All; if (!String.IsNullOrWhiteSpace(Query)) { searchQuery = SearchQuery.MessageContains(Query); } IMailFolder mailFolder = mailStore.GetFolder(MailboxName); mailFolder.Open(FolderAccess.ReadOnly); IList <UniqueId> mailIDs = mailFolder.Search(searchQuery); int lineNumber = 0; int rowCount = 0; if (mailIDs.Count > MaxRecords) { mailIDs = mailIDs.Take((int)MaxRecords).ToList(); } foreach (UniqueId mailID in mailIDs) { HeaderList messageHeader = mailFolder.GetHeaders(mailID); lineNumber++; UpdateProgress(lineNumber); XmlElement rowNode = xDoc.CreateElement(RowNodeName); AddXmlNodeChild(rowNode, "UniqueID", mailID.Id.ToString()); foreach (Header msgHeader in messageHeader) { AddXmlNodeChild(rowNode, msgHeader.Field, msgHeader.Value); } AddRow(xDoc, rowNode); if ((rowNode != null) && (rowNode.HasChildNodes)) { rootNode.AppendChild(rowNode); rowCount++; } if (rowCount >= MaxRecords) { break; } } UpdateProgress(lineNumber, true); return(xDoc); }
internal IEnumerable <Message> GetMessages() { _imapFolder.Open(FolderAccess.ReadOnly); var messages = _imapFolder.Search(SearchQuery.All).Select(u => new Message(u, _imapFolder.GetHeaders(u))).ToArray(); _imapFolder.Close(); return(messages); }