public MailRepositoryResult <RepositoryMessage> Search(SearchQuery searchQuery, int take, int skip) { MailRepositoryResult <RepositoryMessage> MailRepositoryResult = new MailRepositoryResult <RepositoryMessage>(); try { // The Inbox folder is always available on all IMAP servers... var inbox = imapClient.Inbox; inbox.Open(FolderAccess.ReadOnly); MailRepositoryResult.TotalCount = inbox.Count; MailRepositoryResult.RecentCount = inbox.Recent; IList <UniqueId> UniqueIds = inbox.Search(searchQuery).Reverse().Skip(skip).Take(take).ToList(); foreach (UniqueId item in UniqueIds) { var messageInfo = inbox.Fetch(new[] { item }, MessageSummaryItems.Flags | MessageSummaryItems.GMailLabels); MailRepositoryResult.Obj.Add(new RepositoryMessage() { MimeMessage = inbox.GetMessage(item), Read = messageInfo[0].Flags.Value.HasFlag(MessageFlags.Seen) }); } MailRepositoryResult.IsErr = false; return(MailRepositoryResult); } catch (Exception ex) { MailRepositoryResult.IsErr = true; return(MailRepositoryResult); } }
public MailRepositoryResult <RepositoryMessage> Search(SearchQuery searchQuery, int take, int skip, SpecialFolder specialFolder) { MailRepositoryResult <RepositoryMessage> MailRepositoryResult = new MailRepositoryResult <RepositoryMessage>(); try { IMailFolder inbox; if (specialFolder == SpecialFolder.All) { inbox = imapClient.Inbox; } else { inbox = imapClient.GetFolder(specialFolder); } inbox.Open(FolderAccess.ReadOnly); MailRepositoryResult.TotalCount = inbox.Count; MailRepositoryResult.RecentCount = inbox.Recent; IList <UniqueId> UniqueIds = inbox.Search(searchQuery).Reverse().Skip(skip).Take(take).ToList(); var orderBy = new[] { OrderBy.Date }; //IList<UniqueId> UniqueIds = inbox.Sort(searchQuery, orderBy); foreach (UniqueId item in UniqueIds) { var messageInfo = inbox.Fetch(new[] { item }, MessageSummaryItems.Flags | MessageSummaryItems.GMailLabels); MailRepositoryResult.Obj.Add(new RepositoryMessage() { MimeMessage = inbox.GetMessage(item), Read = messageInfo[0].Flags.Value.HasFlag(MessageFlags.Seen), Flagged = messageInfo[0].Flags.Value.HasFlag(MessageFlags.Flagged) }); } //foreach (var summary in inbox.Fetch(0, -1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId)) //{ // Console.WriteLine("[summary] {0:D2}: {1}", summary.Index, summary.Envelope.Subject); //} /* * for (int i = 0; i < 10; i++) * { * MailRepositoryResult.Obj.Add(new RepositoryMessage() { mimeMessage = new MimeMessage(), Read = true, Flagged = true }); * }*/ MailRepositoryResult.IsErr = false; return(MailRepositoryResult); } catch (Exception ex) { MailRepositoryResult.IsErr = true; return(MailRepositoryResult); } }
public ActionResult MailList(int skip = 0, int take = 50, SpecialFolder specialFolder = SpecialFolder.All) { try { MailRepository mailRepository = Session["MailRepository"] as MailRepository; MailRepositoryResult <EnvelopeEmail> response = mailRepository.SearchAdvanced(skip, take, specialFolder); return(View(response.Obj)); } catch (Exception) { return(View("null")); } }
public MailRepositoryResult <MimeMessage> UnSetFlagged(string Id, MessageFlags messageFlags, SpecialFolder specialFolder) { MailRepositoryResult <MimeMessage> MailRepositoryResult = new MailRepositoryResult <MimeMessage>(); try { // The Inbox folder is always available on all IMAP servers... var inbox = imapClient.Inbox; if (specialFolder != SpecialFolder.All) { inbox = imapClient.GetFolder(specialFolder); } if (inbox != null) { inbox.Open(FolderAccess.ReadWrite); var uid = inbox.Search(SearchQuery.HeaderContains("Message-Id", Id)); MailRepositoryResult.TotalCount = inbox.Count; MailRepositoryResult.RecentCount = inbox.Recent; var moveFolder = imapClient.GetFolder(specialFolder); if (moveFolder != null) { inbox.RemoveFlags(uid, messageFlags, silent: false); } MailRepositoryResult.IsErr = false; } else { MailRepositoryResult.IsErr = true; } return(MailRepositoryResult); } catch (Exception ex) { MailRepositoryResult.IsErr = true; return(MailRepositoryResult); } }
public MailRepositoryResult <EnvelopeEmail> SearchAdvanced(int skip = 0, int take = 50, SpecialFolder specialFolder = SpecialFolder.All) { MailRepositoryResult <EnvelopeEmail> MailRepositoryResult = new MailRepositoryResult <EnvelopeEmail>(); try { if (specialFolder != SpecialFolder.All) { var inbox = imapClient.GetFolder(specialFolder); inbox.Open(FolderAccess.ReadOnly); if (inbox.Count > 0) { MailRepositoryResult.TotalCount = inbox.Count; MailRepositoryResult.RecentCount = inbox.Recent; MailRepositoryResult.StartIndex = skip; var uids = inbox.Search(SearchQuery.All).Reverse().Skip(skip).Take(take).ToList(); var messages = inbox.Fetch(uids, MessageSummaryItems.Envelope | MessageSummaryItems.Flags | MessageSummaryItems.PreviewText | MessageSummaryItems.UniqueId); messages = messages.OrderByDescending(message => message.Envelope.Date.Value.DateTime).ToList(); MailRepositoryResult.DataCount = messages.Count; MailRepositoryResult.LastIndex = skip + messages.Count; foreach (var message in messages) { MailRepositoryResult.Obj.Add(new EnvelopeEmail() { Uid = message.UniqueId, FromDisplayName = message.Envelope.From.First().Name, FromEmail = message.Envelope.From.First().ToString(), To = message.Envelope.To.ToString(), Subject = message.NormalizedSubject, PreviewText = message.PreviewText, TimeReceived = message.Envelope.Date.Value.DateTime, MessageFlags = message.Flags, HasAttachment = message.Attachments.Count() > 0 ? true : false }); } } } else { var inbox = imapClient.Inbox; inbox.Open(FolderAccess.ReadOnly); if (inbox.Count > 0) { MailRepositoryResult.TotalCount = inbox.Count; MailRepositoryResult.RecentCount = inbox.Recent; MailRepositoryResult.StartIndex = skip; var uids = inbox.Search(SearchQuery.All).Reverse().Skip(skip).Take(take).ToList(); var messages = inbox.Fetch(uids, MessageSummaryItems.Envelope | MessageSummaryItems.Flags | MessageSummaryItems.PreviewText | MessageSummaryItems.UniqueId); messages = messages.OrderByDescending(message => message.Envelope.Date.Value.DateTime).ToList(); MailRepositoryResult.DataCount = messages.Count; MailRepositoryResult.LastIndex = skip + messages.Count; foreach (var message in messages) { MailRepositoryResult.Obj.Add(new EnvelopeEmail() { Uid = message.UniqueId, FromDisplayName = message.Envelope.From.First().Name, FromEmail = message.Envelope.From.First().ToString(), To = message.Envelope.To.ToString(), Subject = message.NormalizedSubject, PreviewText = message.PreviewText, TimeReceived = message.Envelope.Date.Value.DateTime, MessageFlags = message.Flags, HasAttachment = message.Attachments.Count() > 0 ? true : false }); } } } return(MailRepositoryResult); } catch (Exception ex) { MailRepositoryResult.IsErr = true; MailRepositoryResult.Obj = new List <EnvelopeEmail>() { }; return(MailRepositoryResult); } }