예제 #1
0
        public void TestAntiVirusEnabled()
        {
            var messages = new List<string>();

             string messageText = "From: [email protected]\r\n" +
                              "To: [email protected]\r\n" +
                              "Subject: Test\r\n" +
                              "\r\n" +
                              "Should be blocked by SPF.";

             messages.Add(messageText);

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.StartListen();

            Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");
            FetchAccount fa = CreateFetchAccount(account, port, false, true);

            fa.DownloadNow();

            pop3Server.WaitForCompletion();

            fa.Delete();

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

            Message message = account.IMAPFolders.get_ItemByName("INBOX").Messages[0];
            CustomAssert.IsTrue(message.get_Flag(eMessageFlag.eMFVirusScan));
             }
        }
예제 #2
0
        public void TestOnExternalAccountDownload()
        {
            TestSetup.DeleteCurrentDefaultLog();

             var messages = new List<string>();

             messages.Add("From: [email protected]\r\n" +
                      "To: [email protected]\r\n" +
                      "Subject: Message 1\r\n" +
                      "\r\n" +
                      "Message 1!");

             messages.Add("From: [email protected]\r\n" +
                      "To: [email protected]\r\n" +
                      "Subject: Message 2\r\n" +
                      "\r\n" +
                      "Message 2!");

             messages.Add("From: [email protected]\r\n" +
                      "To: [email protected]\r\n" +
                      "Subject: Message 3\r\n" +
                      "\r\n" +
                      "Message 3!");

             // The second message should be deleted after 5 days.
             string script = "Sub OnExternalAccountDownload(oFetchAccount, oMessage, sRemoteUID)" + Environment.NewLine +
                         " EventLog.Write(\"UID: \" & sRemoteUID) " + Environment.NewLine +
                         " EventLog.Write(\"FetchAccount: \" & oFetchAccount.Name) " + Environment.NewLine +
                         " If Not oMessage Is Nothing Then " + Environment.NewLine +
                         "   EventLog.Write(\"From: \" & oMessage.FromAddress) " + Environment.NewLine +
                         "   EventLog.Write(\"Filename: \" & oMessage.FileName) " + Environment.NewLine +
                         " Else " + Environment.NewLine +
                         "   EventLog.Write(\"Message details missing\") " + Environment.NewLine +
                         " End If" + Environment.NewLine +
                         " if sRemoteUID = \"UniqueID-" + messages[1].GetHashCode() + "\" Then " +
                         Environment.NewLine +
                         "   Result.Value = 2  " + Environment.NewLine +
                         "   Result.Parameter = 5  " + Environment.NewLine +
                         " End If " + Environment.NewLine +
                         " End Sub";

             Scripting scripting = _settings.Scripting;
             string file = scripting.CurrentScriptFile;
             TestSetup.WriteFile(file, script);
             scripting.Enabled = true;
             scripting.Reload();

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

             FetchAccount fa;

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.StartListen();

            fa = account.FetchAccounts.Add();

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "TestFA";
            fa.Username = "******";
            fa.Password = "******";
            fa.UseSSL = false;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = false;
            fa.DaysToKeepMessages = -1;
            fa.Save();
            fa.DownloadNow();

            pop3Server.WaitForCompletion();

            string eventLogFile = _settings.Logging.CurrentEventLog;
            string logContents = TestSetup.ReadExistingTextFile(eventLogFile);

            CustomAssert.IsTrue(logContents.Contains("FetchAccount: " + fa.Name));

            CustomAssert.IsTrue(logContents.Contains("From: [email protected]"));
            CustomAssert.IsTrue(logContents.Contains("From: [email protected]"));
            CustomAssert.IsTrue(logContents.Contains("From: [email protected]"));

            string appLogContent = TestSetup.ReadCurrentDefaultLog();

            CustomAssert.IsTrue(pop3Server.DeletedMessages.Contains(1));
            CustomAssert.IsFalse(pop3Server.DeletedMessages.Contains(2));
            CustomAssert.IsTrue(pop3Server.DeletedMessages.Contains(3));

            CustomAssert.IsTrue(pop3Server.RetrievedMessages.Contains(1));
            CustomAssert.IsTrue(pop3Server.RetrievedMessages.Contains(2));
            CustomAssert.IsTrue(pop3Server.RetrievedMessages.Contains(3));

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

             }

             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.StartListen();

            // Download again...
            fa.DownloadNow();

            pop3Server.WaitForCompletion();

            // Make sure that no messages are deleted.
            CustomAssert.AreEqual(0, pop3Server.DeletedMessages.Count);
            CustomAssert.AreEqual(0, pop3Server.RetrievedMessages.Count);

            POP3ClientSimulator.AssertMessageCount(account.Address, "test", 3);
             }
        }
예제 #3
0
        public void TestSpamProtectionPreTransmissionHELOPass()
        {
            _application.Settings.AntiSpam.SpamMarkThreshold = 1;
             _application.Settings.AntiSpam.SpamDeleteThreshold = 100;
             _application.Settings.AntiSpam.AddHeaderReason = true;
             _application.Settings.AntiSpam.AddHeaderSpam = true;
             _application.Settings.AntiSpam.PrependSubject = true;
             _application.Settings.AntiSpam.PrependSubjectText = "ThisIsSpam";

             _application.Settings.AntiSpam.CheckHostInHelo = true;
             _application.Settings.AntiSpam.CheckHostInHeloScore = 105;

             var messages = new List<string>();

             string message = "Received: from mail.hmailserver.com (mail.hmailserver.com [" +
                          TestSetup.GethMailServerCOMIPaddress() + "]) by mail.host.edu\r\n" +
                          "From: [email protected]\r\n" +
                          "To: [email protected]\r\n" +
                          "Subject: Test\r\n" +
                          "\r\n" +
                          "Should not be blocked.";

             messages.Add(message);

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.StartListen();

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

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "Test";
            fa.Username = "******";
            fa.Password = "******";
            fa.UseSSL = false;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = false;
            fa.DaysToKeepMessages = 0;
            fa.UseAntiSpam = true;
            fa.Save();

            fa.DownloadNow();

            pop3Server.WaitForCompletion();

            fa.Delete();

            POP3ClientSimulator.AssertMessageCount(account.Address, "test", 1);
             }
        }
예제 #4
0
        public void TestSpamProtectionPostTransmission()
        {
            _application.Settings.AntiSpam.SpamMarkThreshold = 1;
             _application.Settings.AntiSpam.SpamDeleteThreshold = 100;
             _application.Settings.AntiSpam.AddHeaderReason = true;
             _application.Settings.AntiSpam.AddHeaderSpam = true;
             _application.Settings.AntiSpam.PrependSubject = true;
             _application.Settings.AntiSpam.PrependSubjectText = "ThisIsSpam";

             SURBLServer oSURBLServer = _application.Settings.AntiSpam.SURBLServers[0];
             oSURBLServer.Active = true;
             oSURBLServer.Score = 5;
             oSURBLServer.Save();

             var messages = new List<string>();

             string message = "Received: from example.com (example.com [1.2.3.4]) by mail.host.edu\r\n" +
                          "From: [email protected]\r\n" +
                          "To: [email protected]\r\n" +
                          "Subject: Test\r\n" +
                          "\r\n" +
                          "http://surbl-org-permanent-test-point.com/";

             messages.Add(message);

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.StartListen();

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

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "Test";
            fa.Username = "******";
            fa.Password = "******";
            fa.UseSSL = false;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = false;
            fa.DaysToKeepMessages = -1;
            fa.UseAntiSpam = true;

            fa.Save();
            fa.DownloadNow();

            pop3Server.WaitForCompletion();

            fa.Delete();

            string downloadedMessage = POP3ClientSimulator.AssertGetFirstMessageText(account.Address, "test");

            CustomAssert.IsTrue(downloadedMessage.Contains("X-hMailServer-Spam: YES"));
             }
        }
예제 #5
0
        public void TestSpamProtectionNoTagging()
        {
            TestSetup.AssertSpamAssassinIsRunning();

             _application.Settings.AntiSpam.SpamMarkThreshold = 5;
             _application.Settings.AntiSpam.SpamDeleteThreshold = 9999;
             _application.Settings.AntiSpam.MaximumMessageSize = 1024*1024;
             _application.Settings.AntiSpam.AddHeaderReason = false;
             _application.Settings.AntiSpam.AddHeaderSpam = false;
             _application.Settings.AntiSpam.PrependSubject = false;
             _application.Settings.AntiSpam.PrependSubjectText = "ThisIsSpam";

             // Enable SpamAssassin
             _application.Settings.AntiSpam.SpamAssassinEnabled = true;
             _application.Settings.AntiSpam.SpamAssassinHost = "localhost";
             _application.Settings.AntiSpam.SpamAssassinPort = 783;
             _application.Settings.AntiSpam.SpamAssassinMergeScore = true;
             _application.Settings.AntiSpam.SpamAssassinScore = 5;

             var messages = new List<string>();

             string message = "From: [email protected]\r\n" +
                          "To: [email protected]\r\n" +
                          "Subject: Test\r\n" +
                          "\r\n" +
                          "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X";

             messages.Add(message);

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.StartListen();

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

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "Test";
            fa.Username = "******";
            fa.Password = "******";
            fa.UseSSL = false;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = false;
            fa.DaysToKeepMessages = -1;
            fa.UseAntiSpam = true;

            fa.Save();
            fa.DownloadNow();

            pop3Server.WaitForCompletion();

            fa.Delete();

            POP3ClientSimulator.AssertMessageCount(account.Address, "test", 1);
             }
        }
예제 #6
0
        public void TestSpamProtectionDisabled()
        {
            _application.Settings.AntiSpam.SpamMarkThreshold = 1;
             _application.Settings.AntiSpam.SpamDeleteThreshold = 100;
             _application.Settings.AntiSpam.AddHeaderReason = true;
             _application.Settings.AntiSpam.AddHeaderSpam = true;
             _application.Settings.AntiSpam.PrependSubject = true;
             _application.Settings.AntiSpam.PrependSubjectText = "ThisIsSpam";

             _application.Settings.AntiSpam.UseSPF = true;
             _application.Settings.AntiSpam.UseSPFScore = 5;

             var messages = new List<string>();

             string message = "From: [email protected]\r\n" +
                          "To: [email protected]\r\n" +
                          "Subject: Test\r\n" +
                          "\r\n" +
                          "Should be blocked by SPF.";

             messages.Add(message);

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.StartListen();

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

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "Test";
            fa.Username = "******";
            fa.Password = "******";
            fa.UseSSL = false;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = false;
            fa.DaysToKeepMessages = -1;
            fa.UseAntiSpam = false;
            fa.Save();

            fa.DownloadNow();

            pop3Server.WaitForCompletion();

            fa.Delete();

            string downloadedMessage = POP3ClientSimulator.AssertGetFirstMessageText(account.Address, "test");

            CustomAssert.IsFalse(downloadedMessage.Contains("X-hMailServer-Spam: YES"));
             }
        }
예제 #7
0
        public void TestServerNotSupportingUIDL()
        {
            var messages = new List<string>();

             string message = "Received: from example.com (example.com [1.2.3.4]) by mail.host.edu\r\n" +
                          "From: [email protected]\r\n" +
                          "To: [email protected]\r\n" +
                          "Subject: Test\r\n" +
                          "\r\n" +
                          "Hello!";

             messages.Add(message);

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.SupportsUIDL = false;
            pop3Server.StartListen();

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

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "Test";
            fa.Username = "******";
            fa.Password = "******";
            fa.UseSSL = false;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = false;
            fa.Save();
            fa.DownloadNow();

            pop3Server.WaitForCompletion();

            fa.Delete();

            string error = TestSetup.ReadAndDeleteErrorLog();

            CustomAssert.IsTrue(error.Contains("-ERR unhandled command"));
             }
        }
        public void POP3ServerNOTSupportingStartTLS_StartTLSOptional()
        {
            var messages = new List<string>();

             string message = "From: [email protected]\r\n" +
                          "To: [email protected]\r\n" +
                          "Subject: Test\r\n" +
                          "\r\n" +
                          "Hello!";

             messages.Add(message);

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages, eConnectionSecurity.eCSNone))
             {
            pop3Server.SetCertificate(SslSetup.GetCertificate());
            pop3Server.StartListen();

            TestSetup.DeleteCurrentDefaultLog();

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

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "Test";
            fa.Username = "******";
            fa.Password = "******";
            fa.ConnectionSecurity = eConnectionSecurity.eCSSTARTTLSOptional;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = false;
            fa.Save();

            fa.DownloadNow();
            pop3Server.WaitForCompletion();

            POP3ClientSimulator.AssertMessageCount("*****@*****.**", "test", 1);

            fa.Delete();
             }
        }
예제 #9
0
        public void TestFetchMessagesWithVeryLongHeader()
        {
            var messages = new List<string>();

              var toHeaderBuilder = new StringBuilder();
              for (int i = 0; i < 10000; i++)
              {
             if (i > 0)
                toHeaderBuilder.Append("; ");

             toHeaderBuilder.AppendFormat("to-{0}@example.com", i);
              }

             for (int i = 0; i < 5; i++)
             {
            string message = string.Format("To: {1}\r\n" +
                                           "X-Dummy: {0}\r\n" +
                                           "Subject: Test\r\n" +
                                           "\r\n" +
                                           "Hello!", i, toHeaderBuilder);

            messages.Add(message);
             }

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.SendBufferMode = POP3Server.BufferMode.SingleBuffer;
            pop3Server.StartListen();

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

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "Test";
            fa.Username = "******";
            fa.Password = "******";
            fa.UseSSL = false;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = false;
            fa.Save();

            fa.DownloadNow();

            pop3Server.WaitForCompletion();

            LockHelper.WaitForUnlock(fa);

            fa.Delete();

            POP3ClientSimulator.AssertMessageCount(account.Address, "test", 5);
            string downloadedMessage = POP3ClientSimulator.AssertGetFirstMessageText(account.Address, "test");

            for (int i = 0; i < 5; i++)
            {
               if (downloadedMessage.Contains(messages[i]))
                  return;
            }

            CustomAssert.Fail("Downloaded messages did not match uploaded messages.");
             }
        }
예제 #10
0
        public void TestDeliverToExternalMimeRecipientsEnabledRouteAsExternal()
        {
            var messages = new List<string>();

             string message = "From: [email protected]\r\n" +
                          "To: \"Test\" <*****@*****.**>, \"ExternalGuy\" <*****@*****.**>\r\n" +
                          "Subject: Test\r\n" +
                          "\r\n" +
                          "Hello!";

             messages.Add(message);

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.StartListen();

            // Add a route so we can connect to localhost.
            //Route route = SMTPClientTests.AddRoutePointingAtLocalhost(5, 250, false);
            //route.TreatSecurityAsLocalDomain = false;
            //route.Save();

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

            _domain.Postmaster = catchallAccount.Address;
            _domain.Save();

            FetchAccount fa = userAccount.FetchAccounts.Add();

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "Test";
            fa.Username = "******";
            fa.Password = "******";
            fa.UseSSL = false;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = true;
            fa.EnableRouteRecipients = true;
            fa.Save();

            fa.DownloadNow();

            pop3Server.WaitForCompletion();

            fa.Delete();

            string downloadedMessage1 = POP3ClientSimulator.AssertGetFirstMessageText(recipientAccount1.Address, "test");
            CustomAssert.IsTrue(downloadedMessage1.Contains(message), downloadedMessage1);

            TestSetup.AssertRecipientsInDeliveryQueue(0, false);
             }
        }
예제 #11
0
        public void TestDeliverToMIMERecipients()
        {
            var messages = new List<string>();

             string message = "From: [email protected]\r\n" +
                          "To: \"Test\" <*****@*****.**>, \"Test 2\" <*****@*****.**>\r\n" +
                          "Subject: Test\r\n" +
                          "\r\n" +
                          "Hello!";

             messages.Add(message);

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.StartListen();

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

            _domain.Postmaster = catchallAccount.Address;
            _domain.Save();

            FetchAccount fa = account1.FetchAccounts.Add();

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "Test";
            fa.Username = "******";
            fa.Password = "******";
            fa.UseSSL = false;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = true;
            fa.Save();

            fa.DownloadNow();

            pop3Server.WaitForCompletion();

            fa.Delete();

            string downloadedMessage1 = POP3ClientSimulator.AssertGetFirstMessageText(account2.Address, "test");
            string downloadedMessage2 = POP3ClientSimulator.AssertGetFirstMessageText(account3.Address, "test");
            POP3ClientSimulator.AssertMessageCount(account1.Address, "test", 0);
            POP3ClientSimulator.AssertMessageCount(catchallAccount.Address, "test", 0);

            CustomAssert.IsTrue(downloadedMessage1.Contains(message), downloadedMessage1);
            CustomAssert.IsTrue(downloadedMessage2.Contains(message), downloadedMessage2);
             }
        }
예제 #12
0
        public void TestDeliverToExternalMimeRecipientsEnabled()
        {
            var messages = new List<string>();

             string message = "From: [email protected]\r\n" +
                          "To: \"Test\" <*****@*****.**>, \"ExternalGuy\" <*****@*****.**>\r\n" +
                          "Subject: Test\r\n" +
                          "\r\n" +
                          "Hello!";

             messages.Add(message);

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.StartListen();

            var deliveryResults = new Dictionary<string, int>();
            deliveryResults["*****@*****.**"] = 250;

            int smtpServerPort = TestSetup.GetNextFreePort();
            using (var smtpServer = new SMTPServerSimulator(1, smtpServerPort))
            {
               smtpServer.AddRecipientResult(deliveryResults);
               smtpServer.StartListen();

               // Add a route so we can connect to localhost.
               Route route = SMTPClientTests.AddRoutePointingAtLocalhost(1, smtpServerPort, false);
               route.TreatSecurityAsLocalDomain = true;
               route.Save();

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

               _domain.Postmaster = catchallAccount.Address;
               _domain.Save();

               FetchAccount fa = account1.FetchAccounts.Add();

               fa.Enabled = true;
               fa.MinutesBetweenFetch = 10;
               fa.Name = "Test";
               fa.Username = "******";
               fa.Password = "******";
               fa.UseSSL = false;
               fa.ServerAddress = "localhost";
               fa.Port = port;
               fa.ProcessMIMERecipients = true;
               fa.EnableRouteRecipients = true;
               fa.Save();

               fa.DownloadNow();

               pop3Server.WaitForCompletion();

               fa.Delete();

               string downloadedMessage1 = POP3ClientSimulator.AssertGetFirstMessageText(account2.Address, "test");
               POP3ClientSimulator.AssertMessageCount(account1.Address, "test", 0);
               POP3ClientSimulator.AssertMessageCount(catchallAccount.Address, "test", 0);
               CustomAssert.IsTrue(downloadedMessage1.Contains(message), downloadedMessage1);

               // Make sure the exernal recipient has received his copy.
               smtpServer.WaitForCompletion();
               string messageData = smtpServer.MessageData;
               CustomAssert.IsTrue(messageData.Contains(messageData), messageData);

               TestSetup.AssertRecipientsInDeliveryQueue(0, false);
            }
             }
        }
예제 #13
0
        public void TestDeleteMutliple()
        {
            var messages = new List<string>();

             string message = "From: [email protected]\r\n" +
                          "To: [email protected]\r\n" +
                          "Subject: Test\r\n" +
                          "\r\n" +
                          "Hello!";

             messages.Add(message);
             messages.Add(message);
             messages.Add(message);

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.StartListen();

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

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "Test";
            fa.Username = "******";
            fa.Password = "******";
            fa.UseSSL = false;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = false;
            fa.DaysToKeepMessages = -1;
            fa.Save();

            fa.DownloadNow();

            pop3Server.WaitForCompletion();

            fa.Delete();

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

            Assert.AreEqual(3, pop3Server.DeletedMessages.Count);
             }
        }
예제 #14
0
        public void TestBasicExternalAccountSSLEvenThoughNotSupported()
        {
            var messages = new List<string>();

             string message = "From: [email protected]\r\n" +
                          "To: [email protected]\r\n" +
                          "Subject: Test\r\n" +
                          "\r\n" +
                          "Hello!";

             messages.Add(message);

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(2, port, messages))
             {
            pop3Server.DisconnectImmediate = true;
            pop3Server.StartListen();

            TestSetup.DeleteCurrentDefaultLog();

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

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "Test";
            fa.Username = "******";
            fa.Password = "******";
            fa.UseSSL = true;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = false;
            fa.Save();

            fa.DownloadNow();
            string contentSoFar = "";
            for (int i = 0; i <= 10; i++)
            {
               if (i == 5)
                  Assert.Fail("No connection: " + contentSoFar);

               contentSoFar = TestSetup.ReadCurrentDefaultLog();
               if (contentSoFar.Contains("SSL handshake with client failed."))
                  break;

               Thread.Sleep(1000);
            }

            TestSetup.DeleteCurrentDefaultLog();

            // try again.
            fa.DownloadNow();

            contentSoFar = "";

            for (int i = 0; i <= 10; i++)
            {
               if (i == 5)
                  Assert.Fail("No connection: " + contentSoFar);

               contentSoFar = TestSetup.ReadCurrentDefaultLog();
               if (contentSoFar.Contains("SSL handshake with client failed."))
                  break;

               Thread.Sleep(1000);
            }

            pop3Server.WaitForCompletion();

            fa.Delete();
             }
        }
예제 #15
0
        public void TestPOP3Client()
        {
            var messages = new List<string>();

             string message = "From: [email protected]\r\n" +
                          "To: [email protected]\r\n" +
                          "Subject: Test\r\n" +
                          "\r\n" +
                          "Hello!";

             messages.Add(message);

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.StartListen();

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

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "Test";
            fa.Username = GetUsername();
            fa.Password = GetPassword();
            fa.UseSSL = false;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = false;
            fa.Save();

            fa.DownloadNow();

            pop3Server.WaitForCompletion();

            fa.Delete();

            string downloadedMessage = POP3ClientSimulator.AssertGetFirstMessageText(account.Address, "test");
            CustomAssert.IsTrue(downloadedMessage.Contains(message));

            EnsureNoPassword();
             }
        }
예제 #16
0
        public void TestFetchMessageWithValidFromAddress()
        {
            string message = string.Format("From: [email protected]\r\n" +
                                        "To: [email protected]\r\n" +
                                        "Subject: Test\r\n" +
                                        "\r\n" +
                                        "Hello!");

             var messages = new List<string>() { message };

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages))
             {
            pop3Server.SendBufferMode = POP3Server.BufferMode.SingleBuffer;
            pop3Server.StartListen();

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

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "Test";
            fa.Username = "******";
            fa.Password = "******";
            fa.UseSSL = false;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = false;
            fa.Save();

            fa.DownloadNow();

            pop3Server.WaitForCompletion();

            LockHelper.WaitForUnlock(fa);

            fa.Delete();

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

            var log = TestSetup.ReadCurrentDefaultLog();
            CustomAssert.IsTrue(log.Contains("Delivering message from [email protected] to [email protected]."));
             }
        }
예제 #17
0
        private void DownloadFromExternalAccount(Account account, FetchAccount fa)
        {
            if (!_backupMessages)
            return;

             // Download messages from the external account.
             var messages = new List<string>();

             messages.Add("Subject: Message 1\r\n");
             messages.Add("Subject: Message 2\r\n");
             messages.Add("Subject: Message 3\r\n");

             using (var pop3Server = new POP3Server(1, fa.Port, messages))
             {
            pop3Server.StartListen();
            fa.DownloadNow();
            pop3Server.WaitForCompletion();
             }

             TestSetup.AssertRecipientsInDeliveryQueue(0);
             POP3Simulator.AssertMessageCount(account.Address, "test", 5);
        }
        public void POP3ServerNOTSupportingStartTLS_StartTLSRequired()
        {
            var messages = new List<string>();

             string message = "From: [email protected]\r\n" +
                          "To: [email protected]\r\n" +
                          "Subject: Test\r\n" +
                          "\r\n" +
                          "Hello!";

             messages.Add(message);

             int port = TestSetup.GetNextFreePort();
             using (var pop3Server = new POP3Server(1, port, messages, eConnectionSecurity.eCSNone))
             {
            pop3Server.SetCertificate(SslSetup.GetCertificate());
            pop3Server.StartListen();

            TestSetup.DeleteCurrentDefaultLog();

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

            fa.Enabled = true;
            fa.MinutesBetweenFetch = 10;
            fa.Name = "Test";
            fa.Username = "******";
            fa.Password = "******";
            fa.ConnectionSecurity = eConnectionSecurity.eCSSTARTTLSRequired;
            fa.ServerAddress = "localhost";
            fa.Port = port;
            fa.ProcessMIMERecipients = false;
            fa.Save();

            fa.DownloadNow();

            string expectedMessage =
               string.Format(
                  "The download of messages from external account {0} failed. The external aAccount is configured to use STARTTLS connection security, but the POP3 server does not support it.", fa.Name);

            string contentSoFar = "";

            for (int i = 0; i <= 10; i++)
            {
               if (i == 5)
                  CustomAssert.Fail("No connection: " + contentSoFar);

               contentSoFar = TestSetup.ReadCurrentDefaultLog();
               if (contentSoFar.Contains(expectedMessage))
                  break;

               Thread.Sleep(1000);
            }

            pop3Server.WaitForCompletion();

            fa.Delete();
             }
        }