Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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"));
     }
 }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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);
            }
        }