示例#1
0
        public void TestIMAPLogonFailure()
        {
            _settings.AutoBanOnLogonFailure = true;
             _settings.MaxInvalidLogonAttempts = 4;
             _settings.MaxInvalidLogonAttemptsWithin = 5;
             _settings.AutoBanMinutes = 3;

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

             var sim = new ImapClientSimulator();
             Assert.IsTrue(sim.ConnectAndLogon(account.Address, "test"));
             sim.Disconnect();

             // confirm that we can retrieve welcome message.
             Assert.IsTrue(sim.GetWelcomeMessage().StartsWith("* OK"));

             // fail to log on 3 times.
             for (int i = 0; i < 4; i++)
             {
            string errorMessage;

            Assert.IsFalse(sim.ConnectAndLogon(account.Address, "testA", out errorMessage));
            sim.Disconnect();

            if (i == 3)
            {
               Assert.IsTrue(errorMessage.Contains("Too many invalid logon attempts."));
            }
             }

             Assert.IsTrue(sim.GetWelcomeMessage().Length == 0);

             string logText = LogHandler.ReadCurrentDefaultLog();
             Assert.IsTrue(logText.Contains("Blocked either by IP range or by connection limit."), logText);
        }
示例#2
0
        public void TestChangeSeenFlag()
        {
            Account oAccount = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             SmtpClientSimulator.StaticSend("*****@*****.**", oAccount.Address, "Test", "test");
             Pop3ClientSimulator.AssertMessageCount(oAccount.Address, "test", 1);

             var simulator = new ImapClientSimulator();
             simulator.ConnectAndLogon(oAccount.Address, "test");
             simulator.ExamineFolder("Inbox");
             string flags = simulator.GetFlags(1);
             string body = simulator.Fetch("1 RFC822");
             string flagsAfter = simulator.GetFlags(1);
             simulator.Close();
             simulator.Disconnect();

             Assert.AreEqual(flags, flagsAfter);

             var secondSimulator = new ImapClientSimulator();
             secondSimulator.ConnectAndLogon(oAccount.Address, "test");
             secondSimulator.SelectFolder("Inbox");
             string secondFlags = secondSimulator.GetFlags(1);
             string secondBody = secondSimulator.Fetch("1 RFC822");
             string secondFlagsAfter = secondSimulator.GetFlags(1);
             secondSimulator.Close();
             secondSimulator.Disconnect();

             Assert.AreNotEqual(secondFlags, secondFlagsAfter);
        }
示例#3
0
        public void TestChangeRecentFlag()
        {
            Account oAccount = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             SmtpClientSimulator.StaticSend("*****@*****.**", oAccount.Address, "Test", "test");
             Pop3ClientSimulator.AssertMessageCount(oAccount.Address, "test", 1);

             var simulator = new ImapClientSimulator();
             simulator.ConnectAndLogon(oAccount.Address, "test");
             string result = simulator.ExamineFolder("Inbox");
             Assert.IsTrue(result.Contains("* 1 RECENT"), result);
             simulator.Close();
             simulator.Disconnect();

             simulator = new ImapClientSimulator();
             simulator.ConnectAndLogon(oAccount.Address, "test");
             Assert.IsTrue(simulator.SelectFolder("Inbox", out result));
             Assert.IsTrue(result.Contains("* 1 RECENT"), result);
             simulator.Close();
             simulator.Disconnect();

             simulator = new ImapClientSimulator();
             simulator.ConnectAndLogon(oAccount.Address, "test");
             result = simulator.ExamineFolder("Inbox");
             Assert.IsTrue(result.Contains("* 0 RECENT"), result);
             simulator.Close();
             simulator.Disconnect();
        }
        public void TestIMAPServer()
        {
            LogHandler.DeleteCurrentDefaultLog();

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

             for (int i = 0; i < 30; i++)
             {
            try
            {
               var imapSim = new ImapClientSimulator(true, 14301);
               imapSim.ConnectAndLogon(account.Address, "test");
               Assert.IsTrue(imapSim.SelectFolder("Inbox"), "SelectInbox");
               imapSim.CreateFolder("Test");
               Assert.IsTrue(imapSim.SelectFolder("Test"), "SelectTest");
               Assert.IsTrue(imapSim.Logout(), "Logout");

               imapSim.Disconnect();
               break;
            }
            catch (Exception)
            {
               if (i == 29)
                  throw;
            }
             }
        }
示例#5
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);
             }

             Assert.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();

             Assert.AreEqual(copy, uids);
        }
示例#6
0
        public void TestChangeFlags()
        {
            Account oAccount = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             SmtpClientSimulator.StaticSend("*****@*****.**", oAccount.Address, "Test", "test");
             Pop3ClientSimulator.AssertMessageCount(oAccount.Address, "test", 1);

             var simulator = new ImapClientSimulator();
             simulator.ConnectAndLogon(oAccount.Address, "test");
             simulator.ExamineFolder("Inbox");
             Assert.IsFalse(simulator.SetFlagOnMessage(1, true, @"\Deleted"));
        }
        public void SetupEnvWith50MillionMessages()
        {
            const int accountCount = 1;
             const int folderCount = 1;
             const int messageCount = 100000;

             var accounts = new List<string>();
             for (int accountIdx = 0; accountIdx < accountCount; accountIdx++)
             {
            var account = string.Format("test-{0}@test.com", accountIdx);
            accounts.Add(account);

            TestTracer.WriteTraceInfo("Setting up {0}...", account);
            SingletonProvider<TestSetup>.Instance.AddAccount(_domain, account, "test");
             }

             var folders = new List<string>();
             for (int folderIdx = 0; folderIdx < folderCount; folderIdx++)
            folders.Add(string.Format("Folder-{0}", folderIdx));

             var parallelOptions = new ParallelOptions();
             parallelOptions.MaxDegreeOfParallelism = 10;

             var watch = new Stopwatch();
             watch.Start();

             Parallel.ForEach(accounts, parallelOptions, account =>
            {
               TestTracer.WriteTraceInfo("Processing messages for {0}...", account);

               var sim = new ImapClientSimulator();
               Assert.IsTrue(sim.ConnectAndLogon(account, "test"));

               foreach (var folder in folders)
               {
                  Assert.IsTrue(sim.CreateFolder(folder));

                  for (int i = 0; i < messageCount; i++)
                  {
                     string f = sim.SendSingleCommandWithLiteral("A01 APPEND " + folder + " {1}", "A");
                     Assert.IsTrue(f.Contains("A01 OK APPEND completed"), f);
                  }
               }

               sim.Disconnect();
            });

             watch.Stop();
             TestTracer.WriteTraceInfo(watch.ElapsedMilliseconds.ToString());
        }
示例#8
0
        public void TestEmptyPassword()
        {
            Account account1 = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "");

             string message;
             var sim = new Pop3ClientSimulator();
             Assert.IsFalse(sim.ConnectAndLogon(account1.Address, "", out message));

             var simIMAP = new ImapClientSimulator();
             Assert.IsFalse(simIMAP.ConnectAndLogon(account1.Address, "", out message));
             Assert.AreEqual("A01 NO Invalid user name or password.\r\n", message);

             var simSMTP = new SmtpClientSimulator();
             CustomAsserts.Throws<AuthenticationException>(() => simSMTP.ConnectAndLogon("dGVzdEB0ZXN0LmNvbQ==", "", out message));
             Assert.AreEqual("535 Authentication failed. Restarting authentication process.\r\n", message);
        }
示例#9
0
        public static void AssertMessageCount(string accountName, string accountPassword, string folderName,
                                              int expectedCount)
        {
            if (expectedCount == 0)
            {
                // make sure that we aren't currently delivering messages.
                CustomAsserts.AssertRecipientsInDeliveryQueue(0);
            }

            var imap = new ImapClientSimulator();

            Assert.IsTrue(imap.ConnectAndLogon(accountName, accountPassword));

            if (expectedCount != 0)
            {
                imap.AssertFolderExists(folderName);
            }

            int currentCount = 0;
            int timeout      = 1000; // 1000 * 25 = 25 seconds.

            while (timeout > 0)
            {
                currentCount = imap.GetMessageCount(folderName);

                if (currentCount > expectedCount)
                {
                    break;
                }

                if (currentCount == expectedCount)
                {
                    imap.Disconnect();
                    return;
                }

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

            imap.Disconnect();

            string error = "Wrong number of messages in mailbox " + folderName + " in account " + accountName +
                           " Actual: " + currentCount.ToString() + " Expected: " + expectedCount.ToString();

            Assert.Fail(error);
        }
示例#10
0
        public static void AssertMessageCount(string accountName, string accountPassword, string folderName,
                                            int expectedCount)
        {
            if (expectedCount == 0)
             {
            // make sure that we aren't currently delivering messages.
            CustomAsserts.AssertRecipientsInDeliveryQueue(0);
             }

             var oIMAP = new ImapClientSimulator();
             Assert.IsTrue(oIMAP.ConnectAndLogon(accountName, accountPassword));

             if (expectedCount != 0)
            oIMAP.AssertFolderExists(folderName);

             int currentCount = 0;
             int timeout = 1000; // 1000 * 25 = 25 seconds.
             while (timeout > 0)
             {
            currentCount = oIMAP.GetMessageCount(folderName);

            if (currentCount > expectedCount)
               break;

            if (currentCount == expectedCount)
            {
               oIMAP.Disconnect();
               return;
            }

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

             oIMAP.Disconnect();

             string error = "Wrong number of messages in mailbox " + folderName + " in account " + accountName +
                        " Actual: " + currentCount.ToString() + " Expected: " + expectedCount.ToString();
             Assert.Fail(error);
        }
        public void ChangingFlagShouldAffectAllConnections()
        {
            var account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");
             SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test", "Test");

             Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 1);

             var sim1 = new ImapClientSimulator();
             Assert.IsTrue(sim1.ConnectAndLogon(account.Address, "test"));
             Assert.IsTrue(sim1.SelectFolder("Inbox"));

             var sim2 = new ImapClientSimulator();
             Assert.IsTrue(sim2.ConnectAndLogon(account.Address, "test"));
             Assert.IsTrue(sim2.SelectFolder("Inbox"));

             sim1.SetFlagOnMessage(1, true, "\\Deleted");

             var flags1 = sim1.GetFlags(1);
             var flags2 = sim2.GetFlags(1);

             Assert.IsTrue(flags2.Contains(@"* 1 FETCH (FLAGS (\Deleted))"), flags2);
             Assert.IsTrue(flags2.Contains(@"* 1 FETCH (FLAGS (\Deleted) UID 1)"), flags2);
        }
示例#12
0
        public void TestDeleteIMAPFolderNotifications()
        {
            _settings.IMAPIdleEnabled = true;

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

             var imapClientSimulator = new ImapClientSimulator();
             var oSimulator2 = new ImapClientSimulator();
             imapClientSimulator.ConnectAndLogon(oAccount.Address, "test");
             oSimulator2.ConnectAndLogon(oAccount.Address, "test");

             imapClientSimulator.SelectFolder("Inbox");
             oSimulator2.CreateFolder("Mailbox");
             oSimulator2.DeleteFolder("Mailbox");

             SmtpClientSimulator.StaticSend("*****@*****.**", oAccount.Address, "Test", "test");

             Pop3ClientSimulator.AssertMessageCount(oAccount.Address, "test", 1);

             string noopResponse = imapClientSimulator.NOOP() + imapClientSimulator.NOOP();

             // confirm that the client is notified about this message even though another
             // folder has been dropped by another client.
             Assert.IsTrue(noopResponse.Contains(@"* 1 EXISTS"), noopResponse);
        }
示例#13
0
        public void TestBodyStructureWithNonLatinCharacterTest3()
        {
            string @messageText =
            "To: [email protected]\r\n" +
            "Content-Type: multipart/mixed;\r\n" +
            " boundary=\"------------000008080307000003010005\"\r\n" +
            "\r\n" +
            "This is a multi-part message in MIME format.\r\n" +
            "--------------000008080307000003010005\r\n" +
            "Content-Type: text/plain; charset=ISO-8859-1; format=flowed\r\n" +
            "Content-Transfer-Encoding: 7bit\r\n" +
            "\r\n" +
            "Test\r\n" +
            "\r\n" +
            "--------------000008080307000003010005\r\n" +
            "Content-Type: image/png;\r\n" +
            " name=\"=?ISO-8859-1?Q?=F6=50=C4=C9=CD=C1=D6=60=F6=F6=E4=27=2E=70=6E=67?=\"\r\n" +
            "Content-Transfer-Encoding: base64\r\n" +
            "Content-Disposition: inline;\r\n" +
            " filename*=ISO-8859-1''%F6%50%C4%C9%CD%C1%D6%60%F6%F6%E4%27%2E%70%6E%67\r\n" +
            "\r\n" +
            "iVBORw0KGgoAAAANSUhEUgAAAqgAAAH4CAIAAAAJvIhhAAAAAXNSR0IArs4c6QAAAARnQU1B\r\n" +
            "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA\r\n" +
            "--------------000008080307000003010005--\r\n";

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

             SmtpClientSimulator.StaticSendRaw(account.Address, account.Address, messageText);

             CustomAsserts.AssertFolderMessageCount(account.IMAPFolders[0], 1);

             var oSimulator = new ImapClientSimulator();
             oSimulator.ConnectAndLogon(account.Address, "test");
             oSimulator.SelectFolder("INBOX");
             string result = oSimulator.Fetch("1 BODYSTRUCTURE");
             oSimulator.Disconnect();

             Assert.IsTrue(
            result.Contains("\"FILENAME\" \"=?ISO-8859-1?Q?=F6=50=C4=C9=CD=C1=D6=60=F6=F6=E4=27=2E=70=6E=67?=\""));
             Assert.IsTrue(
            result.Contains("\"NAME\" \"=?ISO-8859-1?Q?=F6=50=C4=C9=CD=C1=D6=60=F6=F6=E4=27=2E=70=6E=67?=\""));
        }
示例#14
0
        public void TestBodyStructureWithNonLatinCharacterSingleLineWithSpace()
        {
            string @messageText =
            "Return-Path: [email protected]\r\n" +
            "Delivered-To: [email protected]\r\n" +
            "Received: from www.hmailserver.com ([127.0.0.1])\r\n" +
            "	by mail.hmailserver.com\r\n" +
            "	; Tue, 16 Jun 2009 21:39:18 +0200\r\n" +
            "MIME-Version: 1.0\r\n" +
            "Date: Tue, 16 Jun 2009 21:39:18 +0200\r\n" +
            "From: <*****@*****.**>\r\n" +
            "To: <*****@*****.**>\r\n" +
            "Subject: sdafsda\r\n" +
            "Message-ID: <96aee740f2abe8450648c1752a9a987b@localhost>\r\n" +
            "X-Sender: [email protected]\r\n" +
            "User-Agent: RoundCube Webmail/0.2.2\r\n" +
            "Content-Type: multipart/mixed;\r\n" +
            "	boundary=\"=_b63968892a76b1a5be17f4d37b085f54\"\r\n" +
            "\r\n" +
            "--=_b63968892a76b1a5be17f4d37b085f54\r\n" +
            "Content-Transfer-Encoding: 8bit\r\n" +
            "Content-Type: text/plain; charset=\"UTF-8\"\r\n" +
            "\r\n" +
            "--=_b63968892a76b1a5be17f4d37b085f54\r\n" +
            "Content-Transfer-Encoding: base64\r\n" +
            "Content-Type: application/x-zip; charset=\"UTF-8\";\r\n" +
            " name*=\"UTF-8''m%C3%A4%C3%B6 m%C3%A4%C3%B6.zip\"; \r\n" +
            "Content-Disposition: attachment;\r\n" +
            " filename*=\"UTF-8''m%C3%A4%C3%B6 m%C3%A4%C3%B6.zip\"; \r\n" +
            "\r\n" +
            "iVBORw0KGgoAAAANSUhEUgAAAqgAAAH4CAIAAAAJvIhhAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\r\n" +
            "jwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAIr1JREFU\r\n" +
            "eF7t29GSYzluBND1/3/0ejb6wY6emK2WrpQEkaefdQvAAcn02OH/+fe///0v/wgQIECAAIESgb+C\r\n" +
            "3z8CBAgQIECgROBfJXMakwABAgQIEPjP/5qfAgECBAgQINAjIPh7dm1SAgQIECDgv/idAQIECBAg\r\n" +
            "--=_b63968892a76b1a5be17f4d37b085f54--\r\n" +
            "";

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

             SmtpClientSimulator.StaticSendRaw(account.Address, account.Address, messageText);

             CustomAsserts.AssertFolderMessageCount(account.IMAPFolders[0], 1);

             var oSimulator = new ImapClientSimulator();
             oSimulator.ConnectAndLogon(account.Address, "test");
             oSimulator.SelectFolder("INBOX");
             string result = oSimulator.Fetch("1 BODYSTRUCTURE");
             oSimulator.Disconnect();

             Assert.IsFalse(result.Contains("''"), result);
             Assert.IsTrue(result.Contains("\"FILENAME\" \"=?UTF-8?Q?m=C3=A4=C3=B6 m=C3=A4=C3=B6.zip?=\""), result);
             Assert.IsTrue(result.Contains("\"NAME\" \"=?UTF-8?Q?m=C3=A4=C3=B6 m=C3=A4=C3=B6.zip?=\""), result);
        }
示例#15
0
        public void TestBodyStructureWithNonLatinCharacterSingleLineEncoded()
        {
            string @messageText =
            "Message-ID: <1d11306c5648497247447e1073c3b0e2.squirrel@www.*******.**>\r\n" +
            "Date: Fri, 29 May 2009 11:53:03 +0200\r\n" +
            "Subject: attachment's name test\r\n" +
            "From: [email protected]\r\n" +
            "To: [email protected]\r\n" +
            "User-Agent: SquirrelMail/1.4.19\r\n" +
            "MIME-Version: 1.0\r\n" +
            "Content-Type: multipart/mixed;boundary=\"----=_20090529115303_60479\"\r\n" +
            "X-Priority: 3 (Normal)\r\n" +
            "Importance: Normal\r\n" +
            "\r\n" +
            "------=_20090529115303_60479\r\n" +
            "Content-Type: text/plain; charset=\"iso-8859-2\"\r\n" +
            "Content-Transfer-Encoding: 8bit\r\n" +
            "\r\n" +
            "test.±æê³ñ󶼿.txt\r\n" +
            "------=_20090529115303_60479\r\n" +
            "Content-Type: text/plain; name=\r\n" +
            "    =?iso-8859-2?Q?test.=B1=E6=EA=B3=F1=F3=B6=BC=BF.txt?=\r\n" +
            "Content-Transfer-Encoding: 8bit\r\n" +
            "Content-Disposition: attachment; filename=\"\r\n" +
            "    =?iso-8859-2?Q?test.=B1=E6=EA=B3=F1=F3=B6=BC=BF.txt?=\"\r\n" +
            "\r\n" +
            "1234\r\n" +
            "------=_20090529115303_60479--\r\n";

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

             SmtpClientSimulator.StaticSendRaw(account.Address, account.Address, messageText);

             CustomAsserts.AssertFolderMessageCount(account.IMAPFolders[0], 1);

             var oSimulator = new ImapClientSimulator();
             oSimulator.ConnectAndLogon(account.Address, "test");
             oSimulator.SelectFolder("INBOX");
             string result = oSimulator.Fetch("1 BODYSTRUCTURE");
             oSimulator.Disconnect();

             Assert.IsTrue(result.Contains("(\"NAME\" \"=?iso-8859-2?Q?test.=B1=E6=EA=B3=F1=F3=B6=BC=BF.txt?=\")"));
             Assert.IsTrue(result.Contains("(\"FILENAME\" \"=?iso-8859-2?Q?test.=B1=E6=EA=B3=F1=F3=B6=BC=BF.txt?=\")"));
        }
示例#16
0
        public void TestBodyStructureWithNonLatinCharacterInAttachmentHeader()
        {
            string @messageText =
            "From: \"Test\" <*****@*****.**>" + "\r\n" +
            "To: \"Test\" <*****@*****.**>" + "\r\n" +
            "Subject: test" + "\r\n" +
            "MIME-Version: 1.0" + "\r\n" +
            "Content-Type: multipart/mixed;" + "\r\n" +
            "   boundary=\"----=_NextPart_000_000C_01C9EEB2.08D2EC80\"" + "\r\n" +
            "X-Priority: 3" + "\r\n" +
            "" + "\r\n" +
            "This is a multi-part message in MIME format." + "\r\n" +
            "" + "\r\n" +
            "------=_NextPart_000_000C_01C9EEB2.08D2EC80" + "\r\n" +
            "Content-Type: text/plain;" + "\r\n" +
            "  format=flowed;" + "\r\n" +
            "	charset=\"iso-8859-1\";" + "\r\n" +
            "	reply-type=original" + "\r\n" +
            "Content-Transfer-Encoding: 7bit" + "\r\n" +
            "" + "\r\n" +
            "" + "\r\n" +
            "------=_NextPart_000_000C_01C9EEB2.08D2EC80" + "\r\n" +
            "Content-Type: application/octet-stream;" + "\r\n" +
            "	name=\"=?iso-8859-1?B?beT2LnppcA==?=\"" + "\r\n" +
            "Content-Transfer-Encoding: base64" + "\r\n" +
            "Content-Disposition: attachment;" + "\r\n" +
            "	filename=\"=?iso-8859-1?B?beT2LnppcA==?=\"" + "\r\n" +
            "" + "\r\n" +
            "iVBORw0KGgoAAAANSUhEUgAAAqgAAAH4CAIAAAAJvIhhAAAAAXNSR0IArs4c6QAAAARnQU1BAACx" + "\r\n" +
            "uIDgj5MrSIAAAQIEzgkI/nP2KhMgQIAAgbiA4I+TK0iAAAECBM4JCP5z9ioTIECAAIG4wP8ChvJS" + "\r\n" +
            "wXUaKVoAAAAASUVORK5CYII=" + "\r\n" +
            "" + "\r\n" +
            "------=_NextPart_000_000C_01C9EEB2.08D2EC80--" + "\r\n";

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

             SmtpClientSimulator.StaticSendRaw(account.Address, account.Address, messageText);

             CustomAsserts.AssertFolderMessageCount(account.IMAPFolders[0], 1);

             var oSimulator = new ImapClientSimulator();
             oSimulator.ConnectAndLogon(account.Address, "test");
             oSimulator.SelectFolder("INBOX");
             string result = oSimulator.Fetch("1 BODYSTRUCTURE");
             oSimulator.Disconnect();

             Assert.IsTrue(result.Contains("(\"NAME\" \"=?iso-8859-1?B?beT2LnppcA==?=\")"));
             Assert.IsTrue(result.Contains("(\"FILENAME\" \"=?iso-8859-1?B?beT2LnppcA==?=\")"));

             string fileName = account.IMAPFolders.get_ItemByName("INBOX").Messages[0].Attachments[0].Filename;
             Assert.AreEqual("mäö.zip", fileName);
        }
示例#17
0
        public void TestUnseenResponseInSelect()
        {
            Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test", "TestMessage");

             ImapClientSimulator.AssertMessageCount(account.Address, "test", "Inbox", 1);

             var sim = new ImapClientSimulator();
             Assert.IsTrue(sim.ConnectAndLogon(account.Address, "test"));
             Assert.IsTrue(sim.SelectFolder("Inbox"));
             Assert.IsTrue(sim.CreateFolder("Dummy"));
             Assert.IsTrue(sim.Copy(1, "Dummy"));

             string result = sim.SendSingleCommand("a01 select Dummy");
             Assert.IsTrue(result.Contains("* 1 EXISTS\r\n* 1 RECENT"), result);

             string searchResponse = sim.SendSingleCommand("srch1 SEARCH ALL UNSEEN");

             // We should have at least one message here.
             Assert.IsTrue(searchResponse.Contains("* SEARCH 1\r\n"), searchResponse);

             // Now fetch the body.
             string bodyText = sim.Fetch("1 BODY[TEXT]");

             // Now the message is no longer unseen. Confirm this.
             searchResponse = sim.SendSingleCommand("srch1 SEARCH ALL UNSEEN");
             Assert.IsTrue(searchResponse.Contains("* SEARCH\r\n"), searchResponse);

             // Close the messages to mark them as no longer recent.
             Assert.IsTrue(sim.Close());

             result = sim.SendSingleCommand("a01 select Dummy");
             Assert.IsTrue(result.Contains("* 1 EXISTS\r\n* 0 RECENT"), result);
        }
示例#18
0
        public void TestRecentRemovedOnMailboxClose()
        {
            Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test", "TestMessage");
             ImapClientSimulator.AssertMessageCount(account.Address, "test", "Inbox", 1);

             var sim = new ImapClientSimulator();
             Assert.IsTrue(sim.ConnectAndLogon(account.Address, "test"));
             Assert.IsTrue(sim.SelectFolder("Inbox"));
             Assert.IsTrue(sim.CreateFolder("Dummy"));
             Assert.IsTrue(sim.Copy(1, "Dummy"));
             string result = sim.SendSingleCommand("a01 select Dummy");
             Assert.IsTrue(result.Contains("* 1 EXISTS\r\n* 1 RECENT"), result);
             Assert.IsTrue(sim.Logout());

             sim = new ImapClientSimulator();
             Assert.IsTrue(sim.ConnectAndLogon(account.Address, "test"));
             result = sim.SendSingleCommand("a01 select Dummy");
             Assert.IsFalse(result.Contains("* 1 EXISTS\r\n* 1 RECENT"), result);
             Assert.IsTrue(sim.Logout());
        }
示例#19
0
        public void TestPublicFolderUpdateNotification()
        {
            IMAPFolders folders = _application.Settings.PublicFolders;
             IMAPFolder folder = folders.Add("Share");
             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.ePermissionWriteOthers, true);
             permission.set_Permission(eACLPermission.ePermissionWriteSeen, true);
             permission.set_Permission(eACLPermission.ePermissionWriteDeleted, true);
             permission.set_Permission(eACLPermission.ePermissionInsert, true);
             permission.Save();

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

             SmtpClientSimulator.StaticSend(account.Address, account.Address, "TestSubject", "TestBody");
             ImapClientSimulator.AssertMessageCount(account.Address, "test", "Inbox", 1);

             var simulator1 = new ImapClientSimulator();
             var simulator2 = new ImapClientSimulator();

             simulator1.ConnectAndLogon(account.Address, "test");
             simulator2.ConnectAndLogon(account.Address, "test");

             simulator1.SelectFolder("Inbox");
             simulator2.SelectFolder("Inbox");

             Assert.IsTrue(simulator1.Copy(1, "#Public.Share"));

             simulator1.SelectFolder("#Public.Share");
             simulator2.SelectFolder("#Public.Share");

             string result = simulator2.NOOP() + simulator2.NOOP();
             Assert.IsFalse(result.Contains("Deleted"));
             Assert.IsFalse(result.Contains("Seen"));

             simulator1.SetDeletedFlag(1);
             simulator1.SetSeenFlag(1);

             result = simulator2.NOOP() + simulator2.NOOP();
             Assert.IsTrue(result.Contains("Deleted"));
             Assert.IsTrue(result.Contains("Seen"));

             simulator1.Disconnect();
             simulator2.Disconnect();
        }
示例#20
0
        public void TestRenameSubFolderToMatchingName()
        {
            Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             var oSimulator = new ImapClientSimulator();
             Assert.IsTrue(oSimulator.ConnectAndLogon(account.Address, "test"));
             Assert.IsTrue(oSimulator.CreateFolder("Folder1"));
             Assert.IsTrue(oSimulator.SelectFolder("Folder1"));

             string result = string.Empty;
             Assert.IsFalse(oSimulator.RenameFolder("Folder1", "Folder1.Sub1", out result));
             Assert.IsTrue(result.Contains("A folder cannot be moved into one of its subfolders."));
             Assert.IsTrue(oSimulator.SelectFolder("Folder1"));

             result = string.Empty;
             Assert.IsTrue(oSimulator.RenameFolder("Folder1", "Folder1Test", out result));
             Assert.IsTrue(oSimulator.SelectFolder("Folder1Test"));

             oSimulator.Disconnect();
        }
示例#21
0
        public static bool ValidatePassword(string username, string password)
        {
            var client = new ImapClientSimulator();

            return(client.ConnectAndLogon(username, password));
        }
示例#22
0
        public void TestFolderExpungeNotification()
        {
            Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             SmtpClientSimulator.StaticSend(account.Address, account.Address, "TestSubject", "TestBody");
             ImapClientSimulator.AssertMessageCount(account.Address, "test", "Inbox", 1);

             var simulator1 = new ImapClientSimulator();
             var simulator2 = new ImapClientSimulator();

             simulator1.ConnectAndLogon(account.Address, "test");
             simulator2.ConnectAndLogon(account.Address, "test");

             simulator1.SelectFolder("Inbox");
             simulator2.SelectFolder("Inbox");

             string result = simulator2.NOOP();
             Assert.IsFalse(result.Contains("Deleted"));
             Assert.IsFalse(result.Contains("Seen"));

             simulator1.SetDeletedFlag(1);
             simulator1.Expunge();

             // the result may (should) come after the first NOOP response stream so do noop twice.
             result = simulator2.NOOP() + simulator2.NOOP();
             Assert.IsTrue(result.Contains("* 1 EXPUNGE"));

             simulator1.Disconnect();
             simulator2.Disconnect();
        }
示例#23
0
        public void TestExpunge()
        {
            Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**",
                                                                            "test");

             for (int i = 0; i < 3; i++)
            SmtpClientSimulator.StaticSend("*****@*****.**", account.Address, "Test", "test");

             Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 3);

             var simulator = new ImapClientSimulator();
             Assert.IsTrue(simulator.ConnectAndLogon(account.Address, "test"));
             Assert.IsTrue(simulator.SelectFolder("Inbox"));

             Assert.IsTrue(simulator.SetFlagOnMessage(1, true, @"\Deleted"));
             Assert.IsTrue(simulator.SetFlagOnMessage(3, true, @"\Deleted"));

             string result;
             Assert.IsTrue(simulator.Expunge(out result));

             // Messages 1 and 2 should be deleted. 2, because when the first message
             // is deleted, the index of the message which was originally 3, is now 2.
             Assert.IsTrue(result.Contains("* 1 EXPUNGE\r\n* 2 EXPUNGE"));
        }
示例#24
0
        public void TestFetchBody()
        {
            Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             string attachmentName = "本本本.zip";

             string filename = Path.Combine(Path.GetTempPath(), attachmentName);
             File.WriteAllText(filename, "tjena moss");

             var message = new Message();
             message.Charset = "utf-8";
             message.AddRecipient("test", account.Address);
             message.From = "Test";
             message.FromAddress = account.Address;
             message.Body = "hejsan";
             message.Attachments.Add(filename);
             message.Save();

             CustomAsserts.AssertFolderMessageCount(account.IMAPFolders[0], 1);

             var oSimulator = new ImapClientSimulator();
             oSimulator.ConnectAndLogon(account.Address, "test");
             oSimulator.SelectFolder("INBOX");
             string bodyStructureResponse = oSimulator.Fetch("1 BODYSTRUCTURE");
             string bodyResponse = oSimulator.Fetch("1 BODY");
             oSimulator.Disconnect();

             Assert.IsTrue(bodyStructureResponse.Contains("BOUNDARY"));
             Assert.IsFalse(bodyResponse.Contains("BOUNDARY"));
        }
示例#25
0
        public void TestBodyStructureWithNonLatinCharacter()
        {
            Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             string attachmentName = "本本本.zip";

             string filename = Path.Combine(Path.GetTempPath(), attachmentName);
             File.WriteAllText(filename, "tjena moss");

             var message = new Message();
             message.Charset = "utf-8";
             message.AddRecipient("test", account.Address);
             message.From = "Test";
             message.FromAddress = account.Address;
             message.Body = "hejsan";
             message.Attachments.Add(filename);
             message.Save();

             CustomAsserts.AssertFolderMessageCount(account.IMAPFolders[0], 1);

             var oSimulator = new ImapClientSimulator();
             oSimulator.ConnectAndLogon(account.Address, "test");
             oSimulator.SelectFolder("INBOX");
             string result = oSimulator.Fetch("1 BODYSTRUCTURE");
             oSimulator.Disconnect();

             // utf-8 representation of 本本本.zip:
             Assert.IsTrue(result.Contains("=?utf-8?B?5pys5pys5pys?=.zip"));
        }
示例#26
0
        public void TestFetchInvalid()
        {
            Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");
             SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test", "SampleBody1");
             SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test", "SampleBody2");
             SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test", "SampleBody3");

             ImapClientSimulator.AssertMessageCount(account.Address, "test", "Inbox", 3);

             var sim = new ImapClientSimulator();
             sim.ConnectAndLogon(account.Address, "test");
             sim.SelectFolder("INBOX");
             string result = sim.Fetch("0 BODY[1]");
             Assert.IsTrue(result.StartsWith("A17 OK FETCH completed"));
             result = sim.Fetch("-1 BODY[1]");
             Assert.IsTrue(result.StartsWith("A17 BAD"));
             result = sim.Fetch("-100 BODY[1]");
             Assert.IsTrue(result.StartsWith("A17 BAD"));
        }
示例#27
0
        public void TestExpungeNotification()
        {
            _settings.IMAPIdleEnabled = true;

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

             for (int i = 0; i < 5; i++)
            SmtpClientSimulator.StaticSend("*****@*****.**", oAccount.Address, "Test", "test");

             Pop3ClientSimulator.AssertMessageCount(oAccount.Address, "test", 5);

             var imapClientSimulator = new ImapClientSimulator();
             var oSimulator2 = new ImapClientSimulator();
             imapClientSimulator.ConnectAndLogon(oAccount.Address, "test");
             oSimulator2.ConnectAndLogon(oAccount.Address, "test");

             imapClientSimulator.SelectFolder("Inbox");
             oSimulator2.SelectFolder("Inbox");

             for (int i = 1; i <= 5; i++)
             {
            Assert.IsTrue(imapClientSimulator.SetFlagOnMessage(i, true, @"\Deleted"));
             }

             string noopResponse = oSimulator2.NOOP() + oSimulator2.NOOP();

             Assert.IsTrue(noopResponse.Contains(@"* 1 FETCH (FLAGS (\Deleted)") &&
                       noopResponse.Contains(@"* 1 FETCH (FLAGS (\Deleted)") &&
                       noopResponse.Contains(@"* 1 FETCH (FLAGS (\Deleted)") &&
                       noopResponse.Contains(@"* 1 FETCH (FLAGS (\Deleted)") &&
                       noopResponse.Contains(@"* 1 FETCH (FLAGS (\Deleted)"), noopResponse);

             bool result = imapClientSimulator.Expunge();

             string expungeResult = oSimulator2.NOOP() + oSimulator2.NOOP();

             Assert.IsTrue(
            expungeResult.Contains("* 1 EXPUNGE\r\n* 1 EXPUNGE\r\n* 1 EXPUNGE\r\n* 1 EXPUNGE\r\n* 1 EXPUNGE"),
            expungeResult);
        }
示例#28
0
        public void TestListWithReference()
        {
            Account oAccount = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             var oSimulator = new ImapClientSimulator();
             oSimulator.ConnectAndLogon(oAccount.Address, "test");
             oSimulator.CreateFolder("Main.Sub1.Sub2.Sub3");
             oSimulator.CreateFolder("SomeOtherFolder");

             oSimulator.Subscribe("Main");
             oSimulator.Subscribe("Main.Sub1");
             oSimulator.Subscribe("Main.Sub1.Sub2");
             oSimulator.Subscribe("Main.Sub1.Sub2.Sub3");
             oSimulator.Subscribe("SomeOtherFolder");

             string response = oSimulator.List("Main", "*", true);
             Assert.IsFalse(response.Contains("INBOX"));
             Assert.IsFalse(response.Contains("SomeOtherFolder"));
             Assert.IsTrue(response.Contains("* LIST (\\HasChildren) \".\" \"Main.Sub1\""));
             Assert.IsTrue(response.Contains("* LIST (\\HasChildren) \".\" \"Main.Sub1.Sub2\""));
             Assert.IsTrue(response.Contains("* LIST (\\HasNoChildren) \".\" \"Main.Sub1.Sub2.Sub3\""));

             response = oSimulator.List("Main.Sub1", "*", true);
             Assert.IsFalse(response.Contains("INBOX"));
             Assert.IsFalse(response.Contains("SomeOtherFolder"));
             Assert.IsTrue(response.Contains("* LIST (\\HasChildren) \".\" \"Main.Sub1.Sub2\""));
             Assert.IsTrue(response.Contains("* LIST (\\HasNoChildren) \".\" \"Main.Sub1.Sub2.Sub3\""));

             response = oSimulator.LSUB("Main", "*");
             Assert.IsFalse(response.Contains("INBOX"));
             Assert.IsFalse(response.Contains("SomeOtherFolder"));
             Assert.IsTrue(response.Contains("* LSUB (\\HasChildren) \".\" \"Main.Sub1\""));
             Assert.IsTrue(response.Contains("* LSUB (\\HasChildren) \".\" \"Main.Sub1.Sub2\""));
             Assert.IsTrue(response.Contains("* LSUB (\\HasNoChildren) \".\" \"Main.Sub1.Sub2.Sub3\""));

             response = oSimulator.LSUB("Main.Sub1", "*");
             Assert.IsFalse(response.Contains("INBOX"));
             Assert.IsFalse(response.Contains("SomeOtherFolder"));
             Assert.IsTrue(response.Contains("* LSUB (\\HasChildren) \".\" \"Main.Sub1.Sub2\""));
             Assert.IsTrue(response.Contains("* LSUB (\\HasNoChildren) \".\" \"Main.Sub1.Sub2.Sub3\""));

             oSimulator.Disconnect();
        }
示例#29
0
        public void TestFolderUpdateNotification()
        {
            Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             SmtpClientSimulator.StaticSend(account.Address, account.Address, "TestSubject", "TestBody");

             ImapClientSimulator.AssertMessageCount(account.Address, "test", "Inbox", 1);

             var simulator1 = new ImapClientSimulator();
             var simulator2 = new ImapClientSimulator();

             simulator1.ConnectAndLogon(account.Address, "test");
             simulator2.ConnectAndLogon(account.Address, "test");

             simulator1.SelectFolder("Inbox");
             simulator2.SelectFolder("Inbox");

             string result = simulator2.NOOP() + simulator2.NOOP();
             Assert.IsFalse(result.Contains("Deleted"));
             Assert.IsFalse(result.Contains("Seen"));

             simulator1.SetDeletedFlag(1);
             simulator1.SetSeenFlag(1);

             result = simulator2.NOOP() + simulator2.NOOP();
             Assert.IsTrue(result.Contains("Deleted"));
             Assert.IsTrue(result.Contains("Seen"));

             simulator1.Disconnect();
             simulator2.Disconnect();
        }
示例#30
0
        public void TestListWithReferenceTestCase2()
        {
            Account oAccount = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             var oSimulator = new ImapClientSimulator();
             oSimulator.ConnectAndLogon(oAccount.Address, "test");
             oSimulator.CreateFolder("INBOX.MyApp.SubFolder1");
             oSimulator.CreateFolder("INBOX.MyApp.SubFolder2");
             oSimulator.CreateFolder("INBOX.SomeOtherFolder");

             string response = oSimulator.List("INBOX.MyApp", "%.%", true);
             Assert.IsFalse(response.Contains("\"INBOX.MyApp\""));
             Assert.IsFalse(response.Contains("\"INBOX.SomeOtherFolder\""));
             Assert.IsTrue(response.Contains("* LIST (\\HasNoChildren) \".\" \"INBOX.MyApp.SubFolder1\""));
             Assert.IsTrue(response.Contains("* LIST (\\HasNoChildren) \".\" \"INBOX.MyApp.SubFolder2\""));

             oSimulator.Disconnect();
        }
示例#31
0
        public void TestDeleteSubFolderCheckAPI()
        {
            Application application = SingletonProvider<TestSetup>.Instance.GetApp();

             IMAPFolders publicFolders = _settings.PublicFolders;

             Assert.AreEqual(0, publicFolders.Count);

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

             IMAPFolder folder = publicFolders.Add("Share1");
             folder.Save();

             Assert.AreEqual(1, publicFolders.Count);

             IMAPFolders mySubFolders = folder.SubFolders;
             Assert.AreEqual(0, mySubFolders.Count);

             IMAPFolderPermission permission = folder.Permissions.Add();
             permission.PermissionAccountID = account1.ID;
             permission.PermissionType = eACLPermissionType.ePermissionTypeUser;
             permission.set_Permission(eACLPermission.ePermissionCreate, true);
             permission.set_Permission(eACLPermission.ePermissionRead, true);
             permission.set_Permission(eACLPermission.ePermissionLookup, true);
             permission.Save();

             var imapClientSimulator = new ImapClientSimulator();
             imapClientSimulator.ConnectAndLogon("*****@*****.**", "test");
             Assert.IsTrue(imapClientSimulator.CreateFolder("#public.Share1.MySub"));
             Assert.AreEqual(1, mySubFolders.Count);

             permission.set_Permission(eACLPermission.ePermissionDeleteMailbox, true);
             permission.Save();

             Assert.IsTrue(imapClientSimulator.DeleteFolder("#public.Share1.MySub"));
             Assert.IsFalse(imapClientSimulator.SelectFolder("#public.Share1.MySub"));

             Assert.AreEqual(0, mySubFolders.Count);
             Assert.AreEqual(1, publicFolders.Count);

             imapClientSimulator.Disconnect();
        }
示例#32
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");
             Assert.IsTrue(simulator1.SelectFolder("#Public.ShareA"));
             Assert.IsTrue(simulator1.SelectFolder("#Public.ShareB"));
             Assert.IsTrue(simulator1.RenameFolder("#Public.ShareA", "#Public.ShareB.ShareA"));
             Assert.IsFalse(simulator1.SelectFolder("#Public.ShareA"));
             Assert.IsTrue(simulator1.SelectFolder("#Public.ShareB"));
             Assert.IsTrue(simulator1.SelectFolder("#Public.ShareB.ShareA"));
        }