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