Пример #1
0
        public void TestReplaceFullPathWithPartialPath()
        {
            Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test message", "Test body");

            IMAPFolder folder = account.IMAPFolders.get_ItemByName("Inbox");

            CustomAsserts.AssertFolderMessageCount(folder, 1);

            hMailServer.Message message = account.IMAPFolders.get_ItemByName("Inbox").Messages[0];

            // Now nothing should happen.
            Assert.IsTrue(_application.Utilities.ImportMessageFromFile(message.Filename, account.ID));

            // Move the message file to another folder.
            string domainPath  = Path.Combine(_application.Settings.Directories.DataDirectory, _domain.Name);
            string accountPath = Path.Combine(domainPath, "test");
            string fileName    = Path.Combine(accountPath, "randomMail.eml");

            File.Move(message.Filename, fileName);

            // Update the database with the 'invalid' path.
            string sql = string.Format("update hm_messages set messagefilename = '{0}' where messageid = {1}",
                                       TestSetup.Escape(fileName), message.ID);

            SingletonProvider <TestSetup> .Instance.GetApp().Database.ExecuteSQL(sql);

            Assert.IsTrue(File.Exists(fileName));
            // Now the file should be moved to the correct path.
            Assert.IsTrue(_application.Utilities.ImportMessageFromFile(fileName, account.ID));

            Assert.IsFalse(File.Exists(fileName));

            // Now nothing should happen because the file is no longer there.
            Assert.IsFalse(_application.Utilities.ImportMessageFromFile(fileName, account.ID));

            string content = Pop3ClientSimulator.AssertGetFirstMessageText(account.Address, "test");

            Assert.IsTrue(content.Contains("Test message"));
        }
Пример #2
0
        public static Message AssertRetrieveFirstMessage(IMAPFolder folder)
        {
            int timeout = 100;

            while (timeout > 0)
            {
                if (folder.Messages.Count > 0)
                {
                    return(folder.Messages[0]);
                }

                timeout--;
                Thread.Sleep(100);
            }

            string error = "Could not retrieve message from folder";

            CustomAssert.Fail(error);

            return(null);
        }
Пример #3
0
        public void TestOnErrorJScript()
        {
            Application app = SingletonProvider <TestSetup> .Instance.GetApp();

            Scripting scripting = app.Settings.Scripting;

            scripting.Language = "JScript";
            string script = "function OnError(iSeverity, iError, sSource, sDescription) {" + Environment.NewLine +
                            " EventLog.Write('Severity: ' + iSeverity) " + Environment.NewLine +
                            " EventLog.Write('Error: ' + iError) " + Environment.NewLine +
                            " EventLog.Write('Source: ' + sSource) " + Environment.NewLine +
                            " EventLog.Write('Description: ' + sDescription) " + Environment.NewLine +
                            "}" + Environment.NewLine + Environment.NewLine;

            File.WriteAllText(scripting.CurrentScriptFile, script);

            scripting.Enabled = true;
            scripting.Reload();

            Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            IMAPFolder inbox = account.IMAPFolders.get_ItemByName("Inbox");


            string deletedMessageText = app.Settings.ServerMessages.get_ItemByName("MESSAGE_FILE_MISSING").Text;

            SMTPClientSimulator.StaticSend(account.Address, account.Address, "Test", "SampleBody");

            TestSetup.AssertFolderMessageCount(inbox, 1);
            hMailServer.Message message = inbox.Messages[0];
            File.Delete(message.Filename);
            string text = POP3ClientSimulator.AssertGetFirstMessageText(account.Address, "test");

            CustomAssert.IsTrue(text.Contains(deletedMessageText.Replace("%MACRO_FILE%", message.Filename)));
            TestSetup.AssertReportedError();

            string eventLogText = TestSetup.ReadExistingTextFile(app.Settings.Logging.CurrentEventLog);

            CustomAssert.IsTrue(eventLogText.Contains("Description: Message retrieval failed"));
        }
Пример #4
0
        public void TestRenameRootPublicFolder()
        {
            IMAPFolders folders = _application.Settings.PublicFolders;
            IMAPFolder  folder  = folders.Add("ShareA");

            folder.Save();

            IMAPFolderPermission permission = folder.Permissions.Add();

            permission.PermissionType = eACLPermissionType.ePermissionTypeAnyone;
            permission.set_Permission(eACLPermission.ePermissionLookup, true);
            permission.set_Permission(eACLPermission.ePermissionRead, true);
            permission.set_Permission(eACLPermission.ePermissionDeleteMailbox, true);
            permission.Save();

            IMAPFolder folder2 = folders.Add("ShareB");

            folder2.Save();

            IMAPFolderPermission permission2 = folder2.Permissions.Add();

            permission2.PermissionType = eACLPermissionType.ePermissionTypeAnyone;
            permission2.set_Permission(eACLPermission.ePermissionLookup, true);
            permission2.set_Permission(eACLPermission.ePermissionRead, true);
            permission2.set_Permission(eACLPermission.ePermissionDeleteMailbox, true);
            permission2.Save();

            Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            var simulator1 = new IMAPClientSimulator();

            simulator1.ConnectAndLogon(account.Address, "test");
            CustomAssert.IsTrue(simulator1.SelectFolder("#Public.ShareA"));
            CustomAssert.IsTrue(simulator1.SelectFolder("#Public.ShareB"));
            CustomAssert.IsTrue(simulator1.RenameFolder("#Public.ShareA", "#Public.ShareB.ShareA"));
            CustomAssert.IsFalse(simulator1.SelectFolder("#Public.ShareA"));
            CustomAssert.IsTrue(simulator1.SelectFolder("#Public.ShareB"));
            CustomAssert.IsTrue(simulator1.SelectFolder("#Public.ShareB.ShareA"));
        }
Пример #5
0
        public bool MoveMessageToTrashBin(string address, string fromFolderName, long messageId)
        {
            bool isSucceed = true;

            try
            {
                Account    account     = this.GetAccountFromAddress(address);
                IMAPFolder trashFolder = account.IMAPFolders.get_ItemByName("TRASHBIN");
                IMAPFolder fromFolder  = account.IMAPFolders.get_ItemByName(fromFolderName);
                Message    msg         = fromFolder.Messages.get_ItemByDBID(messageId);

                msg.Copy(trashFolder.ID);
                fromFolder.Messages.DeleteByDBID(msg.ID);
                account.Save();
            }
            catch (Exception ex)
            {
                isSucceed = false;
                throw ex;
            }
            return(isSucceed);
        }
Пример #6
0
        public void TestSaveMessageInPublicIMAPFolder()
        {
            Settings settings = SingletonProvider <TestSetup> .Instance.GetApp().Settings;

            IMAPFolders publicFolders = settings.PublicFolders;

            IMAPFolder testFolder = publicFolders.Add("TestFolder");

            testFolder.Save();

            // Send a message to the account.
            hMailServer.Message oMessage = testFolder.Messages.Add();

            CustomAssert.AreEqual(0, oMessage.State);

            oMessage.Body    = "Välkommen till verkligheten";
            oMessage.Subject = "Hej";
            oMessage.Save();

            CustomAssert.AreEqual(2, oMessage.State);
            CustomAssert.IsTrue(oMessage.Filename.Contains(settings.PublicFolderDiskName));
            CustomAssert.IsFalse(oMessage.Filename.Contains(_domain.Name));
        }
Пример #7
0
        public void TestReplaceFullPathInPublicFolderWithPartialPath()
        {
            Application application = SingletonProvider <TestSetup> .Instance.GetApp();

            Account account1 = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            IMAPFolders publicFolders = _settings.PublicFolders;
            IMAPFolder  folder        = publicFolders.Add("Share1");

            folder.Save();

            hMailServer.Message message = folder.Messages.Add();
            message.Subject = "Test";
            message.Save();

            // Move the message file to another folder.
            string publicFolderPath = Path.Combine(_application.Settings.Directories.DataDirectory, "#Public");
            string fileName         = Path.Combine(publicFolderPath, "randomMail.eml");

            File.Move(message.Filename, fileName);

            // Update the database with the 'invalid' path.
            string sql = string.Format("update hm_messages set messagefilename = '{0}' where messageid = {1}",
                                       TestSetup.Escape(fileName), message.ID);

            SingletonProvider <TestSetup> .Instance.GetApp().Database.ExecuteSQL(sql);

            // Now try to insert the message.
            CustomAssert.IsTrue(_application.Utilities.ImportMessageFromFile(fileName, 0));

            _application.Reinitialize();

            string newMessgaeFilename = _settings.PublicFolders[0].Messages[0].Filename;

            CustomAssert.AreNotEqual(fileName, newMessgaeFilename);
            CustomAssert.IsTrue(File.Exists(newMessgaeFilename));
        }
Пример #8
0
        public async void Update(List <string> groupIDs)
        {
            try
            {
                IMAPClient client = new IMAPClient(imapConfig, null, 5);
                client.Logon();
                IMAPFolder folder = client.Folders[folderName];
                for (int i = 0; i < subFolderNames.Count; i++)
                {
                    folder = folder.SubFolders[i];
                    if (folder.FolderName == "Build_System")
                    {
                        break;
                    }
                }

                List <IMAPMessage> messages     = folder.Messages.OrderByDescending(msg => msg.Date).ToList();
                DateTime           lastPostDate = ReadLastPostedDateTime(cConfigurationFolderPath + cLastPostedBuildDateTimeFilePath);
                List <IMAPMessage> newMessages  = messages.TakeWhile((msg) => msg.Date > lastPostDate).ToList();

                if (newMessages.Count > 0)
                {
                    DateTime newestMessageDate = newMessages.Max((msg) => msg.Date);
                    bool     buildPosted       = await PostBuilds(newMessages, groupIDs);

                    if (buildPosted)
                    {
                        WriteLastPostedDateTime(cConfigurationFolderPath + cLastPostedBuildDateTimeFilePath, newestMessageDate);
                    }
                }
                client.Logoff();
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Exception in BSLogic.Update(): " + ex.Message);
            }
        }
Пример #9
0
        //Since I manage messages by IMAP folders, I specify a folder name to get messages in it.
        public IEnumerable <Message> GetAllMessages(string address, string folder)
        {
            Account    account = this.GetAccountFromAddress(address);
            IMAPFolder iFolder = account.IMAPFolders.get_ItemByName(folder.ToUpper());
            Messages   msgs    = iFolder.Messages;

            List <Message> result = new List <Message>();

            try
            {
                for (int i = 0; i < msgs.Count; i++)
                {
                    if (msgs[i].get_Flag(eMessageFlag.eMFDeleted) == false)
                    {
                        result.Add(msgs[i]);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(result);
        }
Пример #10
0
        public void TestRenameAccountOrDomainWithMessagesWithFullPath()
        {
            Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test message", "Test body");

            IMAPFolder folder = account.IMAPFolders.get_ItemByName("Inbox");

            CustomAsserts.AssertFolderMessageCount(folder, 1);
            Message message = account.IMAPFolders.get_ItemByName("Inbox").Messages[0];

            // Move the message file to another folder.
            string domainPath  = Path.Combine(_application.Settings.Directories.DataDirectory, _domain.Name);
            string accountPath = Path.Combine(domainPath, "test");
            string fileName    = Path.Combine(accountPath, "randomMail.eml");

            File.Move(message.Filename, fileName);

            // Update the database with the full path.
            string sql = string.Format("update hm_messages set messagefilename = '{0}' where messageid = {1}",
                                       TestSetup.Escape(fileName), message.ID);

            SingletonProvider <TestSetup> .Instance.GetApp().Database.ExecuteSQL(sql);

            SingletonProvider <TestSetup> .Instance.GetApp().Settings.Cache.Clear();

            // Now try to change the name of the domain or account. Should fail.
            account.Address = "*****@*****.**";
            bool thrown = false;

            try
            {
                account.Save();
            }
            catch (Exception)
            {
                thrown = true;
            }

            Assert.IsTrue(thrown);

            // Saving account is OK, unless its address is changed.
            account.Address = "*****@*****.**";
            account.Save();

            thrown = false;

            _domain.Name = "example.com";

            try
            {
                _domain.Save();
            }
            catch (Exception)
            {
                thrown = true;
            }

            Assert.IsTrue(thrown);

            // Saving domain is OK, unless its address is changed.
            _domain.Name = "test.com";
            _domain.Save();

            _domain.Delete();
        }
Пример #11
0
        private void ConfirmAccountObject()
        {
            Account account = _application.Domains[0].Accounts.get_ItemByAddress("*****@*****.**");


            Assert.IsTrue(account.Active);
            Assert.AreEqual("AD", account.ADDomain);
            Assert.AreEqual(eAdminLevel.hAdminLevelDomainAdmin, account.AdminLevel);
            Assert.AreEqual("AU", account.ADUsername);
            Assert.AreEqual("FA", account.ForwardAddress);
            Assert.IsFalse(account.ForwardEnabled);
            Assert.IsTrue(account.ForwardKeepOriginal);
            Assert.IsFalse(account.IsAD);
            Assert.AreEqual(1250, account.MaxSize);
            Assert.AreEqual("First", account.PersonFirstName);
            Assert.AreEqual("Last", account.PersonLastName);
            Assert.IsTrue(account.SignatureEnabled);
            Assert.AreEqual("HTML", account.SignatureHTML);
            Assert.AreEqual("PLAIN", account.SignaturePlainText);
            Assert.AreEqual("VAC", account.VacationMessage);
            Assert.IsTrue(account.VacationMessageExpires);
            Assert.AreEqual("2020-01-01", account.VacationMessageExpiresDate.Substring(0, 10));
            Assert.IsTrue(account.VacationMessageIsOn);
            Assert.AreEqual("SUBJ", account.VacationSubject);

            // Confirm fetch account
            FetchAccount fa = account.FetchAccounts.get_Item(0);

            Assert.AreEqual(5, fa.DaysToKeepMessages);
            Assert.IsTrue(fa.Enabled);
            Assert.AreEqual(10, fa.MinutesBetweenFetch);
            Assert.AreEqual("test", fa.Name);
            Assert.AreEqual(_fetchAccountPort, fa.Port);
            Assert.AreEqual(true, fa.ProcessMIMEDate);
            Assert.IsTrue(fa.ProcessMIMERecipients);
            Assert.AreEqual("test", fa.Username);
            Assert.IsFalse(fa.UseSSL);
            Assert.AreEqual("127.0.0.1", fa.ServerAddress);
            Assert.IsTrue(fa.UseAntiSpam);
            Assert.IsTrue(fa.UseAntiVirus);

            // Make sur no additional mail is downloaded. We have already downloaded it.
            DownloadFromExternalAccount(account, fa);

            Rule rule = account.Rules[0];

            Assert.AreEqual("MyRule", rule.Name);

            RuleCriteria criteria = rule.Criterias[0];

            Assert.AreEqual(eRuleMatchType.eMTGreaterThan, criteria.MatchType);
            Assert.AreEqual(eRulePredefinedField.eFTMessageSize, criteria.PredefinedField);
            Assert.AreEqual("0", criteria.MatchValue);

            RuleAction action = rule.Actions[0];

            Assert.AreEqual(eRuleActionType.eRAForwardEmail, action.Type);
            Assert.AreEqual("*****@*****.**", action.To);
            Assert.AreEqual("Test", action.Body);
            Assert.AreEqual("File", action.Filename);
            Assert.AreEqual("T", action.FromAddress);
            Assert.AreEqual("N", action.FromName);
            Assert.AreEqual("H", action.HeaderName);
            Assert.AreEqual("Folder", action.IMAPFolder);
            Assert.AreEqual("Script", action.ScriptFunction);
            Assert.AreEqual("Subj", action.Subject);
            Assert.AreEqual("Value", action.Value);

            IMAPFolder inbox = account.IMAPFolders.get_ItemByName("INBOX");

            Messages messages = inbox.Messages;

            if (_backupMessages)
            {
                Assert.AreEqual(6, inbox.CurrentUID);
                Assert.AreEqual(_folderCreationTime, inbox.CreationTime);

                Assert.AreEqual(5, messages.Count);
                Assert.AreEqual("Message 1 Subject", messages[0].Subject);
                Assert.IsTrue(messages[1].Body.Contains("Message 3 Body"));

                Assert.AreEqual(1, messages[0].UID);
                Assert.AreEqual(3, messages[1].UID);
            }
            else
            {
                Assert.AreEqual(0, messages.Count);
            }
        }
        public async void Update(Dictionary <string, HashSet <string> > channelIDsForRepositories)
        {
            try
            {
                IMAPClient client = new IMAPClient(imapConfig, null, 5);
                client.Logon();
                IMAPFolder folder = client.Folders[folderName];
                for (int i = 0; i < folder.SubFolders.Count; i++)
                {
                    folder = folder.SubFolders[i];
                    if (folder.FolderName == "Commit_Notifications")
                    {
                        break;
                    }
                }

                List <IMAPMessage> messages        = folder.Messages.OrderByDescending(msg => msg.Date).ToList();
                DateTime           lastPostDate    = ReadLastPostedDateTime(cConfigurationFolderPath + cLastPostedCommitDateTimeFilePath);
                List <IMAPMessage> newImapMessages = messages.TakeWhile((msg) => msg.Date > lastPostDate).ToList();

                if (newImapMessages.Count > 0)
                {
                    newImapMessages.OrderBy(msg => msg.Date).Reverse();
                    HashSet <string> channelIDs = new HashSet <string>(channelIDsForRepositories.Values.SelectMany(c => c).ToList());
                    Dictionary <string, HashSet <string> > commitUidsPostedInChannel = new Dictionary <string, HashSet <string> >();
                    foreach (string channelID in channelIDs)
                    {
                        HashSet <string> commitUids = await getCommitUidsForChannel(channelID);

                        commitUidsPostedInChannel.Add(channelID, commitUids);
                    }

                    foreach (IMAPMessage imapMsg in newImapMessages)
                    {
                        string[] parts          = imapMsg.Subject.Split(':');
                        string   commitToPrefix = "Commit to ";
                        string   repositoryName = "";
                        if (parts[0].Length > commitToPrefix.Length)
                        {
                            repositoryName = parts[0].Substring(commitToPrefix.Length, parts[0].Length - commitToPrefix.Length);
                        }

                        bool             repositoryFound         = false;
                        HashSet <string> channelIDsForRepository = channelIDsForRepositories.TryGetValue(repositoryName, out repositoryFound);
                        if (repositoryFound)
                        {
                            bool postResult = await PostCommitToChannels(imapMsg, channelIDsForRepository, commitUidsPostedInChannel);

                            if (!postResult)
                            {
                                return;
                            }
                        }
                    }
                    DateTime newestMessageDate = newImapMessages.Max((msg) => msg.Date);
                    WriteLastPostedDateTime(cConfigurationFolderPath + cLastPostedCommitDateTimeFilePath, newestMessageDate);
                }
                client.Logoff();
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Exception in CommitLogic.Update(): " + ex.Message);
            }
        }
Пример #13
0
        public static Message AssertRetrieveFirstMessage(IMAPFolder folder)
        {
            int timeout = 100;
             while (timeout > 0)
             {
            if (folder.Messages.Count > 0)
            {
               return folder.Messages[0];
            }

            timeout--;
            Thread.Sleep(100);
             }

             string error = "Could not retrieve message from folder";
             CustomAssert.Fail(error);

             return null;
        }
Пример #14
0
        public static void AssertFolderMessageCount(IMAPFolder folder, int expectedCount)
        {
            if (expectedCount == 0)
             {
            // just in case.
            AssertRecipientsInDeliveryQueue(0);
             }

             int currentCount = 0;
             int timeout = 100;
             while (timeout > 0)
             {
            currentCount = folder.Messages.Count;

            if (currentCount == expectedCount)
               return;

            timeout--;
            Thread.Sleep(100);
             }

             string error = "Wrong number of messages in mailbox " + folder.Name;
             CustomAssert.Fail(error);
        }
Пример #15
0
        public void TestAddMessage()
        {
            Application app = SingletonProvider <TestSetup> .Instance.GetApp();

            Utilities utilities = app.Utilities;

            Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            // Create a new folder.
            IMAPFolder folder = account.IMAPFolders.get_ItemByName("INBOX");

            folder.Save();

            for (int i = 0; i < 3; i++)
            {
                hMailServer.Message message = folder.Messages.Add();
                message.set_Flag(eMessageFlag.eMFSeen, true);
                message.Save();

                POP3ClientSimulator.AssertMessageCount(account.Address, "test", ((i + 1) * 2) - 1);

                SMTPClientSimulator.StaticSend("*****@*****.**", account.Address, "Test", "Test");
                POP3ClientSimulator.AssertMessageCount(account.Address, "test", (i + 1) * 2);
            }

            POP3ClientSimulator.AssertMessageCount(account.Address, "test", 6);

            var sim = new IMAPClientSimulator();

            sim.ConnectAndLogon(account.Address, "test");
            sim.SelectFolder("Inbox");

            string response = sim.Fetch("1:6 UID");

            string[] lines = Strings.Split(response, Environment.NewLine, -1, CompareMethod.Text);

            var uids = new List <string>();

            foreach (string line in lines)
            {
                int paraPos    = line.IndexOf("(");
                int paraEndPos = line.IndexOf(")");

                if (paraPos < 0 || paraEndPos < 0)
                {
                    continue;
                }

                string paraContent = line.Substring(paraPos + 1, paraEndPos - paraPos - 1);

                if (!uids.Contains(paraContent))
                {
                    uids.Add(paraContent);
                }
            }

            CustomAssert.AreEqual(6, uids.Count);

            // Make sure the UIDS are sorted properly by creating a copy, sort the copy
            // and then compare to original.
            var copy = new List <string>();

            copy.InsertRange(0, uids);
            copy.Sort();

            CustomAssert.AreEqual(copy, uids);
        }
Пример #16
0
        static void Main(string[] args)
        {
            //IMAPConfig config = new IMAPConfig("<host>", "<username>", "<password>", false, true, "");
            //config.SaveConfig("settings.cfg");
            IMAPConfig config = new IMAPConfig(@"c:\test1.cfg");

            config.CacheFile = "";

            IMAPClient client = null;

            try
            {
                client = new IMAPClient(config, null, 5);
            }
            catch (IMAPException e)
            {
                Console.WriteLine(e.Message);
                return;
            }


            //IMAPFolder drafts = client.Folders["Drafts"];

            //IMAPMessage newMessage = new IMAPMessage();
            //newMessage.From.Add(new IMAPMailAddress("Jason Miesionczek", "*****@*****.**"));
            //newMessage.To.Add(new IMAPMailAddress("Jason Miesionczek", "*****@*****.**"));
            //newMessage.Date = DateTime.Now;
            //newMessage.Subject = "this is a new message";
            //drafts.AppendMessage(newMessage, "this is the content of the new message");
            //IMAPFolder f = client.Folders["INBOX"];
            //Console.WriteLine(f.Messages.Count);
            //IMAPMessage msg = f.GetMessageByID(21967);
            //Console.WriteLine(msg.TextData.Data);
            //foreach (IMAPFileAttachment attachment in msg.Attachments)
            //{
            //    attachment.SaveFile("C:\\");
            //}
            //Console.ReadLine();

            IMAPFolder f = client.Folders["INBOX"];

            int[] msgCount = null;

            while (msgCount.Length == 0)
            {
                msgCount = f.CheckForNewMessages();
                Thread.Sleep(1000);
            }

            foreach (int id in msgCount)
            {
                IMAPMessage msg = f.GetMessageByID(id);
                // do some logic here
                msg.MarkAsRead();
            }

            //IMAPFolder f = client.Folders["Deleted Items"];
            //IMAPMessage m = f.GetMessageByID(707);
            //IMAPFolder d = client.Folders["Deleted Items"];
            //IMAPMessage m = d.Messages[0];
            //IMAPMessage m = f.GetMessageByID(375);
            //IMAPMessage m = f.Messages[0];
            //m.RefreshData(true, true);

            //client._imap.ProcessMessageHeader(m, 0); // 2893
            //client._imap.ProcessBodyStructure(m);
            //client._imap.ProcessMessageHeader(m, 0);
            //client._imap.ProcessBodyStructure(m);
            //client._imap.ProcessBodyParts(m);
            //client._imap.ProcessAttachments(m);
            //IMAPSearchQuery query = new IMAPSearchQuery();
            //query.Range = new DateRange(DateTime.Now.AddDays(-6), DateTime.Now);
            //IMAPSearchResult sResult = f.Search(query);

            //IMAPSearchResult sResult = f.Search(IMAPSearchQuery.QuickSearchDateRange(DateTime.Now.AddDays(-6), DateTime.Now));
            //IMAPSearchResult sResult = f.Search(IMAPSearchQuery.QuickSearchFrom("Christine Fade", "*****@*****.**"));
            //IMAPSearchResult sResult = f.Search(IMAPSearchQuery.QuickSearchNew());

            //IMAPFolder test = f.SubFolders["Test"];
            //IMAPFolder del = client.Folders["Deleted Items"];
            //f.CopyMessageToFolder(f.Messages[0], test);
            //test.DeleteMessage(test.Messages[0]);
            //f.MoveMessageToFolder(f.Messages[0], test);

            //test.EmptyFolder();
            //Console.WriteLine("{0} - {1}", sResult.Query.Range.StartDate, sResult.Query.Range.EndDate);
            //foreach (IMAPMessage msg in sResult.Messages)
            //{
            //    msg.RefreshData(true, true, false);
            //    Console.WriteLine("{0}: {1}", msg.Date, msg.Subject);
            //    Console.WriteLine(msg.TextData.Data);
            //}
            //m.Attachments[1].SaveFile("C:\\");
            Console.ReadLine();
            foreach (IMAPMessage msg in client.Folders["INBOX"].Messages)
            {
                if (msg.BodyParts.Count == 0)
                {
                    Console.WriteLine(msg.Uid);
                }
            }
            client.Logoff();
        }