示例#1
0
        public bool TestConnect(int iPort)
        {
            bool bRetVal = _tcpConnection.Connect(iPort);

            _tcpConnection.Disconnect();
            return(bRetVal);
        }
        public void ConnectAndLogon(string base64Username, string base64Password, out string errorMessage)
        {
            _tcpConnection.Connect(_port);

            errorMessage = Receive();
            if (!errorMessage.StartsWith("220"))
            {
                throw new AuthenticationException("Error when connecting: " + errorMessage);
            }

            if (!Logon(base64Username, base64Password, out errorMessage))
            {
                throw new AuthenticationException("Logon failed: " + errorMessage);
            }
        }
示例#3
0
        public void Send100MBMessage()
        {
            long memoryUsage = Shared.GetCurrentMemoryUsage();

             _application.Settings.MaxMessageSize = 0;

             TcpConnection socket = new TcpConnection();
             socket.Connect(25);
             socket.Receive();

             socket.Send("HELO test.com\r\n");
             socket.Receive();

             // Build a large string...
             StringBuilder sb = new StringBuilder();
             sb.Append("A01");
             for (int i = 0; i < 10000; i++)
             {
            sb.Append("01234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890\r\n");
             }
             int length = sb.Length;

             sb.Append(Environment.NewLine);

             socket.Send("MAIL FROM: [email protected]\r\n");
             socket.Receive();
             socket.Send("RCPT TO: [email protected]\r\n");
             socket.Receive();
             socket.Send("DATA\r\n");
             socket.Receive();

             for (int i = 1; i <= 100; i++)
             {
            Shared.AssertLowMemoryUsage(memoryUsage + 30);

            try
            {
               socket.Send(sb.ToString());
            }
            catch (Exception)
            {
               return;
            }

            if ((i % 10) == 0)
            {
               TestTracer.WriteTraceInfo("{0}/{1}", i, 1000);
            }
             }

             socket.Send("\r\n.\r\n");
             string result = socket.Receive();
             Assert.IsTrue(result.StartsWith("250"));

             socket.Send("QUIT\r\n");
             result = socket.Receive();
             socket.Disconnect();

             Pop3ClientSimulator.AssertMessageCount(_domain.Accounts[0].Address, "test", 1);
        }
示例#4
0
        public void ConnectionCountShouldDecreaseWhenClientDisconnects()
        {
            var countBefore = _application.Status.get_SessionCount(eSessionType.eSTSMTP);

             using (var tcpConn = new TcpConnection(false))
             {
            tcpConn.Connect(25001);

            // Since there may be other connections lingering, we just check the increased count if
            // it was zero previous to this test. Otherwise we might end up with false positives.
            if (countBefore == 0)
            {
               RetryHelper.TryAction(TimeSpan.FromSeconds(10), () =>
               {
                  var countWhileConnected = _application.Status.get_SessionCount(eSessionType.eSTSMTP);

                  Assert.AreEqual(1, countWhileConnected);
               });

            }
             }

             RetryHelper.TryAction(TimeSpan.FromSeconds(10), () =>
             {
            var countAfter = _application.Status.get_SessionCount(eSessionType.eSTSMTP);

            Assert.GreaterOrEqual(countBefore, countAfter);
             });
        }
示例#5
0
        public void SetupSSLPort()
        {
            _application.Settings.Logging.Enabled = true;
             _application.Settings.Logging.LogTCPIP = true;
             _application.Settings.Logging.EnableLiveLogging(true);

             var cs = new TcpConnection();
             if (!cs.Connect(250))
            CustomAssert.Fail("Could not connect to SSL server.");

             cs.Disconnect();

             for (int i = 0; i <= 40; i++)
             {
            CustomAssert.IsTrue(i != 40);

            string liveLog = _application.Settings.Logging.LiveLog;
            if (liveLog.Contains("SSL handshake with client failed."))
               break;

            Thread.Sleep(250);
             }

             _application.Settings.Logging.EnableLiveLogging(false);
        }
        public void TestExcessiveDataInPOP3Conversation()
        {
            var sb = new StringBuilder();
             for (int i = 0; i < 100000; i++)
             {
            sb.Append("1234567890");
             }

             string command = "HELP " + sb;

             var socket = new TcpConnection();
             CustomAssert.IsTrue(socket.Connect(110));
             socket.Receive();
             socket.Send(command + "\r\n");

             try
             {
            string response = socket.Receive();
            CustomAssert.IsTrue(response.StartsWith("-ERR"));

            socket.Disconnect();
             }
             catch (IOException ex)
             {
            AssertIsConnectionTerminatedException(ex);
             }
        }
        public void TestExcessiveDataInIMAPConversation()
        {
            var sb = new StringBuilder();
             for (int i = 0; i < 100000; i++)
             {
            sb.Append("1234567890");
             }

             sb.Append(".com\r\n");

             string command = "A03 NOOP " + sb;

             var socket = new TcpConnection();
             CustomAssert.IsTrue(socket.Connect(143));
             socket.Receive();
             socket.Send(command);

             try
             {
            string response = socket.Receive();
            CustomAssert.IsTrue(response.StartsWith("* BYE"));
             }
             catch (System.IO.IOException ex)
             {
            AssertIsConnectionTerminatedException(ex);
             }

             socket.Disconnect();
        }
        public bool ConnectAndLogon(string base64Username, string base64Password, out string errorMessage)
        {
            _tcpConnection.Connect(_port);

            errorMessage = Receive();
            if (!errorMessage.StartsWith("220"))
            {
                return(false);
            }

            if (!Logon(base64Username, base64Password, out errorMessage))
            {
                return(false);
            }

            return(true);
        }
        public void IfStartTlsNotEnabledStartTlsShouldNotBeShownInEhloResponse()
        {
            var smtpClientSimulator = new TcpConnection();
             smtpClientSimulator.Connect(25);
             var data1 = smtpClientSimulator.Receive();
             var data = smtpClientSimulator.SendAndReceive("EHLO example.com\r\n");

             Assert.IsFalse(data.Contains("STARTTLS"));
        }
示例#10
0
        public void IfStlsRequiredLogonShouldFailIfNoStls()
        {
            var smtpClientSimulator = new TcpConnection();
             smtpClientSimulator.Connect(25003);
             var banner = smtpClientSimulator.Receive();
             var capabilities1 = smtpClientSimulator.SendAndReceive("EHLO example.com\r\n");
             Assert.IsTrue(capabilities1.Contains("STARTTLS"));

             var loginResult = smtpClientSimulator.SendAndReceive("AUTH LOGIN\r\n");
             Assert.IsTrue(loginResult.StartsWith("530 Must issue STARTTLS first."));
        }
        public void TestConnectingToPop3ServerIncreasesPop3SessionCount()
        {
            var app = SingletonProvider<TestSetup>.Instance.GetApp();
             var status = app.Status;
             int countBefore = status.get_SessionCount(eSessionType.eSTPOP3);

             using (var conn1 = new TcpConnection())
             {
            CustomAssert.IsTrue(conn1.Connect(110));
            TestSetup.AssertSessionCount(eSessionType.eSTPOP3, countBefore + 1);
             }
        }
        public void TestConnectingToImapServerIncreasesImapSessionCount()
        {
            var app = SingletonProvider<TestSetup>.Instance.GetApp();
             var status = app.Status;
             int countBefore = status.get_SessionCount(eSessionType.eSTIMAP);

             using (var conn1 = new TcpConnection())
             {
            Assert.IsTrue(conn1.Connect(143));
            CustomAsserts.AssertSessionCount(eSessionType.eSTIMAP, countBefore + 1);
             }
        }
示例#13
0
        public void IfStlsOptionalButSslRequiredByIpRangeForAuthThenAuthShouldFail()
        {
            var range = SingletonProvider<TestSetup>.Instance.GetApp().Settings.SecurityRanges.get_ItemByName("My computer");
             range.RequireSSLTLSForAuth = true;
             range.Save();

             var smtpClientSimulator = new TcpConnection();
             smtpClientSimulator.Connect(25002);
             var banner = smtpClientSimulator.Receive();
             var capabilities1 = smtpClientSimulator.SendAndReceive("EHLO example.com\r\n");
             Assert.IsTrue(capabilities1.Contains("STARTTLS"));

             var loginResult = smtpClientSimulator.SendAndReceive("AUTH LOGIN\r\n");
             Assert.IsTrue(loginResult.StartsWith("530 A SSL/TLS-connection is required for authentication.")); // must run starttls first.
        }
示例#14
0
        public void HandshakeCompletionShouldBeLoggedWithCipherDetails()
        {
            var smtpClientSimulator = new TcpConnection();
             smtpClientSimulator.Connect(25002);
             var banner = smtpClientSimulator.Receive();
             var capabilities1 = smtpClientSimulator.SendAndReceive("EHLO example.com\r\n");
             Assert.IsTrue(capabilities1.Contains("STARTTLS"));

             smtpClientSimulator.SendAndReceive("STARTTLS\r\n");
             smtpClientSimulator.HandshakeAsClient();

             var capabilities2 = smtpClientSimulator.SendAndReceive("EHLO example.com\r\n");

             var default_log = LogHandler.ReadCurrentDefaultLog();

             Assert.IsTrue(default_log.Contains("Version: TLS"));
             Assert.IsTrue(default_log.Contains("Cipher: "));
             Assert.IsTrue(default_log.Contains("Bits: "));
        }
示例#15
0
        public void TestManyTCPIPConnections()
        {
            LogHandler.DeleteCurrentDefaultLog();

             const int count = 1000;

             List<TcpConnection> sockets = new List<TcpConnection>();

             for (int i = 1; i <= count; i++)
             {
            TcpConnection socket = new TcpConnection();
            Assert.IsTrue(socket.Connect(25));

            if ((i % 10) == 0)
            {
               TestTracer.WriteTraceInfo("{0}/{1}", i, 1000);
            }

            sockets.Add(socket);
             }

             foreach (TcpConnection socket in sockets)
             {
            socket.Disconnect();
             }

             RetryHelper.TryAction(() =>
            {
               string log = LogHandler.ReadCurrentDefaultLog();

               string connectionCreated = "TCP - 127.0.0.1 connected to 127.0.0.1:25.";
               string connectionEnded = "Ending session ";

               var created = Regex.Matches(log, connectionCreated);
               var ended = Regex.Matches(log, connectionEnded);

               Assert.AreEqual(count, created.Count);
               Assert.AreEqual(count, ended.Count);

            }, TimeSpan.FromSeconds(1),TimeSpan.FromSeconds(30));
        }
示例#16
0
        public static void AssertClamDRunning()
        {
            Process[] processlist = Process.GetProcesses();

            foreach (Process theprocess in processlist)
            {
                if (theprocess.ProcessName == "clamd")
                {
                    return;
                }
            }

            // Check if we can launch it...
            var startInfo = new ProcessStartInfo();

            startInfo.FileName         = @"C:\clamav\clamd.exe";
            startInfo.WorkingDirectory = @"C:\Clamav";
            startInfo.Arguments        = "--daemon";

            try
            {
                Process.Start(startInfo);

                // Wait for clamav to start up.
                for (int i = 0; i < 10; i++)
                {
                    var sock = new TcpConnection();
                    if (sock.Connect(3310))
                    {
                        return;
                    }
                    Thread.Sleep(1000);
                }

                CustomAssert.Fail("ClamD process not starting up.");
            }
            catch (Exception)
            {
                CustomAssert.Inconclusive("Unable to start ClamD process. Is ClamAV installed?");
            }
        }
示例#17
0
        public void AuthShouldUpdateLastLogonTime()
        {
            Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");
             DateTime lastLogonTimeBefore = Convert.ToDateTime(account.LastLogonTime);

             Thread.Sleep(1000);
             var sock = new TcpConnection();
             sock.Connect(25);
             CustomAssert.IsTrue(sock.Receive().StartsWith("220"));
             sock.Send("EHLO test.com\r\n");
             CustomAssert.IsTrue(sock.Receive().StartsWith("250"));

             string base64EncodedUsername = EncodeBase64("*****@*****.**");
             sock.Send("AUTH LOGIN " + base64EncodedUsername + "\r\n");
             CustomAssert.IsTrue(sock.Receive().StartsWith("334"));

             sock.Send(EncodeBase64("test") + "\r\n");
             CustomAssert.IsTrue(sock.Receive().StartsWith("235"));

             DateTime lastLogonTimeAfter =
            Convert.ToDateTime(SingletonProvider<TestSetup>.Instance.GetApp().Domains[0].Accounts[0].LastLogonTime);
             CustomAssert.AreNotEqual(lastLogonTimeBefore, lastLogonTimeAfter);
        }
示例#18
0
        public void TestLongSMTPCommand()
        {
            var socket = new TcpConnection();
             socket.Connect(25);

             // Build a large string...
             var sb = new StringBuilder();
             sb.Append("A01");
             for (int i = 0; i < 1000000; i++)
             {
            sb.Append("01234567890");
             }

             sb.Append(Environment.NewLine);

             for (int i = 0; i < 100; i++)
             {
            try
            {
               socket.Send(sb.ToString());
            }
            catch (Exception)
            {
               return;
            }

            if ((i % 10) == 0)
            {
               TestTracer.WriteTraceInfo("{0}/{1}", i, 100);
            }
             }

             socket.Send("\r\n");
             socket.Receive();

             socket.Disconnect();
        }
示例#19
0
        public static void AssertClamDRunning()
        {
            Process[] processlist = Process.GetProcesses();

             foreach (Process theprocess in processlist)
             {
            if (theprocess.ProcessName == "clamd")
               return;
             }

             // Check if we can launch it...
             var startInfo = new ProcessStartInfo();
             startInfo.FileName = @"C:\clamav\clamd.exe";
             startInfo.WorkingDirectory = @"C:\Clamav";
             startInfo.Arguments = "--daemon";

             try
             {
            Process.Start(startInfo);

            // Wait for clamav to start up.
            for (int i = 0; i < 10; i++)
            {
               var sock = new TcpConnection();
               if (sock.Connect(3310))
                  return;
               Thread.Sleep(1000);
            }

            CustomAssert.Fail("ClamD process not starting up.");
             }
             catch (Exception)
             {
            CustomAssert.Inconclusive("Unable to start ClamD process. Is ClamAV installed?");
             }
        }
示例#20
0
        public void TestMailFromSyntaxValidation()
        {
            Account account1 = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             var oSMTP = new TcpConnection();
             oSMTP.Connect(25);

             CustomAssert.IsTrue(oSMTP.Receive().StartsWith("220"));
             oSMTP.Send("HELO test\r\n");
             CustomAssert.IsTrue(oSMTP.Receive().StartsWith("250"));

             // A few tests of invalid syntax.
             CustomAssert.IsFalse(oSMTP.SendAndReceive("MAIL FROM: <[email protected]\r\n").StartsWith("250"));
             CustomAssert.IsFalse(oSMTP.SendAndReceive("MAIL FROM: [email protected]>\r\n").StartsWith("250"));
             CustomAssert.IsFalse(oSMTP.SendAndReceive("MAIL FROM: <    [email protected]    \r\n").StartsWith("250"));
             CustomAssert.IsFalse(oSMTP.SendAndReceive("MAIL FROM: <        \r\n").StartsWith("250"));
             CustomAssert.IsFalse(oSMTP.SendAndReceive("MAIL FROM: >        \r\n").StartsWith("250"));
             CustomAssert.IsFalse(oSMTP.SendAndReceive("MAIL FROM: <[email protected]\r\n").StartsWith("250"));
             CustomAssert.IsFalse(oSMTP.SendAndReceive("MAIL FROM <*****@*****.**>\r\n").StartsWith("250"));
             CustomAssert.IsFalse(oSMTP.SendAndReceive("MAIL FROM  [email protected]\r\n").StartsWith("250"));

             // Valid syntax, < and >
             CustomAssert.IsTrue(oSMTP.SendAndReceive("MAIL FROM: <*****@*****.**>\r\n").StartsWith("250"));
             CustomAssert.IsTrue(oSMTP.SendAndReceive("RSET\r\n").StartsWith("250"));

             CustomAssert.IsTrue(oSMTP.SendAndReceive("MAIL FROM: [email protected]\r\n").StartsWith("250"));
             CustomAssert.IsTrue(oSMTP.SendAndReceive("RSET\r\n").StartsWith("250"));

             CustomAssert.IsTrue(oSMTP.SendAndReceive("MAIL FROM:    [email protected]   \r\n").StartsWith("250"));
             CustomAssert.IsTrue(oSMTP.SendAndReceive("RSET\r\n").StartsWith("250"));

             CustomAssert.IsTrue(oSMTP.SendAndReceive("MAIL FROM:[email protected]\r\n").StartsWith("250"));
             CustomAssert.IsTrue(oSMTP.SendAndReceive("RSET\r\n").StartsWith("250"));

             CustomAssert.IsTrue(oSMTP.SendAndReceive("MAIL FROM:<*****@*****.**>\r\n").StartsWith("250"));
             CustomAssert.IsTrue(oSMTP.SendAndReceive("RSET\r\n").StartsWith("250"));

             oSMTP.Disconnect();
        }
示例#21
0
        public void TestHelo()
        {
            var oSimulator = new TcpConnection();

             oSimulator.Connect(25);

             string sWelcome = oSimulator.Receive();

             oSimulator.Send("HELO\r\n");
             string sResponse = oSimulator.Receive();

             if (!sResponse.StartsWith("501"))
            throw new Exception("Invalid response to HELO");

             oSimulator.Send("HELO   \r\n");
             sResponse = oSimulator.Receive();

             if (!sResponse.StartsWith("501"))
            throw new Exception("Invalid response to HELO");

             oSimulator.Send("HELO TEST.COM\r\n");
             sResponse = oSimulator.Receive();

             if (!sResponse.StartsWith("250"))
            throw new Exception("Invalid response to HELO");

             oSimulator.Send("HELO   TEST.COM\r\n");
             sResponse = oSimulator.Receive();

             if (!sResponse.StartsWith("250"))
            throw new Exception("Invalid response to HELO");

             oSimulator.Send("EHLO TEST.COM\r\n");
             sResponse = oSimulator.Receive();

             if (!sResponse.StartsWith("250"))
            throw new Exception("Invalid response to HELO");

             oSimulator.Send("EHLO    TEST.COM\r\n");
             sResponse = oSimulator.Receive();

             if (!sResponse.StartsWith("250"))
            throw new Exception("Invalid response to HELO");

             oSimulator.Disconnect();
        }
示例#22
0
        public void TestEHLOKeywords()
        {
            Application application = SingletonProvider<TestSetup>.Instance.GetApp();
             Settings settings = _settings;
             settings.HostName = "examplify.com";

             var socket = new TcpConnection();
             CustomAssert.IsTrue(socket.Connect(25));
             string result = socket.Receive();
             socket.Send("EHLO example.com\r\n");
             result = socket.Receive();
             socket.Disconnect();
             CustomAssert.IsTrue(result.Contains("250-" + settings.HostName));
        }
示例#23
0
        public void IfStlsRequiredLogonShouldSucceedIfStls()
        {
            var smtpClientSimulator = new TcpConnection();
             smtpClientSimulator.Connect(25003);
             var banner = smtpClientSimulator.Receive();
             var capabilities1 = smtpClientSimulator.SendAndReceive("EHLO example.com\r\n");
             Assert.IsTrue(capabilities1.Contains("STARTTLS"));

             smtpClientSimulator.SendAndReceive("STARTTLS\r\n");
             smtpClientSimulator.HandshakeAsClient();

             var loginResult = smtpClientSimulator.SendAndReceive("AUTH LOGIN\r\n");
             Assert.IsTrue(loginResult.StartsWith("334"));
        }
        public void TestLimitSMTPSessionCount()
        {
            _settings.MaxSMTPConnections = 2;

             using (var conn1 = new TcpConnection())
             using (var conn2 = new TcpConnection())
             using (var conn3 = new TcpConnection())
             {
            CustomAssert.IsTrue(conn1.Connect(25));
            string s1 = conn1.Receive();
            CustomAssert.IsNotEmpty(s1, s1);

            CustomAssert.IsTrue(conn2.Connect(25));
            string s2 = conn2.Receive();
            CustomAssert.IsNotEmpty(s2, s2);
            CustomAssert.IsTrue(conn3.Connect(25));
            string s3 = conn3.Receive();
            CustomAssert.IsEmpty(s3, s3);
             }
        }
示例#25
0
 public bool Connect()
 {
     return(_tcpConnection.Connect(_ipaddress, _port));
 }
        public void TestDisconnectingFromSmtpServerDecreasesPSmtpSessionCount()
        {
            var app = SingletonProvider<TestSetup>.Instance.GetApp();
             var status = app.Status;

             int countBefore;
             using (var conn1 = new TcpConnection())
             {
            CustomAssert.IsTrue(conn1.Connect(25));
            countBefore = status.get_SessionCount(eSessionType.eSTSMTP);
             }

             TestSetup.AssertSessionCount(eSessionType.eSTSMTP, countBefore -1);
        }
示例#27
0
        public void TestTooManyInvalidCommandsTempError()
        {
            Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             for (int i = 0; i < 10; i++)
            SingletonProvider<TestSetup>.Instance.AddAccount(_domain, string.Format("test{0}@test.com", i), "test");

             Application application = SingletonProvider<TestSetup>.Instance.GetApp();
             Settings settings = _settings;

             settings.DisconnectInvalidClients = true;
             settings.MaxNumberOfInvalidCommands = 5;

             settings.AntiSpam.GreyListingEnabled = true;

             var sim = new TcpConnection();
             sim.Connect(25);
             string res = sim.Receive();
             sim.Send("EHLO test.com\r\n");
             res = sim.Receive();
             sim.Send("MAIL FROM: <*****@*****.**>\r\n");
             res = sim.Receive();
             for (int i = 1; i < 10; i++)
             {
            string address = string.Format("test{0}@test.com", i);

            sim.Send("RCPT TO: " + address + "\r\n");

            res = sim.Receive();

            CustomAssert.AreEqual("451 Please try again later.\r\n", res);
             }

             sim.Disconnect();
        }
示例#28
0
        public void TestTooManyInvalidCommandsAUTH()
        {
            Application application = SingletonProvider<TestSetup>.Instance.GetApp();
             Settings settings = _settings;

             settings.DisconnectInvalidClients = true;
             settings.MaxNumberOfInvalidCommands = 3;

             var sim = new TcpConnection();
             sim.Connect(25);
             sim.Send("EHLO test.com\r\n");

             for (int i = 1; i <= 6; i++)
             {
            try
            {
               sim.Send("AUTH LOGIN\r\n");

               string result = sim.Receive();

               if (result.Contains("Too many invalid commands"))
                  return;

               if (i > 5)
                  break;

               sim.Send("YWNhZGVtaWE=\r\n");
               sim.Receive();
               sim.Send("abc\r\n");
               sim.Receive();
            }
            catch (Exception)
            {
               if (i < 5)
               {
                  CustomAssert.Fail("Was disconnected prematurely.");
               }

               return;
            }
             }

             CustomAssert.Fail("Wasn't disconnected");
        }
示例#29
0
        public void TestRcptToSyntax()
        {
            Account account1 = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test");

             var oSMTP = new TcpConnection();
             oSMTP.Connect(25);

             CustomAssert.IsTrue(oSMTP.Receive().StartsWith("220"));
             oSMTP.Send("HELO test\r\n");
             CustomAssert.IsTrue(oSMTP.Receive().StartsWith("250"));

             // A few tests of invalid syntax.
             CustomAssert.IsTrue(oSMTP.SendAndReceive("MAIL FROM: <*****@*****.**>\r\n").StartsWith("250"));
             CustomAssert.IsFalse(oSMTP.SendAndReceive("RCPT TO: [email protected]>\r\n").StartsWith("250"));
             CustomAssert.IsFalse(oSMTP.SendAndReceive("RCPT TO: <[email protected]\r\n").StartsWith("250"));
             CustomAssert.IsFalse(oSMTP.SendAndReceive("RCPT TO <[email protected]\r\n").StartsWith("250"));
             CustomAssert.IsFalse(oSMTP.SendAndReceive("RCPT TO<[email protected]\r\n").StartsWith("250"));

             CustomAssert.IsTrue(oSMTP.SendAndReceive("RCPT TO: <*****@*****.**>\r\n").StartsWith("250"));
             CustomAssert.IsTrue(oSMTP.SendAndReceive("RCPT TO: [email protected]\r\n").StartsWith("250"));

             oSMTP.Disconnect();
        }
示例#30
0
        public void TestSameRecipientMultipleTimes()
        {
            Logging logging = SingletonProvider<TestSetup>.Instance.GetApp().Settings.Logging;
             logging.AWStatsEnabled = true;
             logging.Enabled = true;

             if (File.Exists(logging.CurrentAwstatsLog))
            File.Delete(logging.CurrentAwstatsLog);

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

             var oSMTP = new TcpConnection();
             oSMTP.Connect(25);
             CustomAssert.IsTrue(oSMTP.Receive().StartsWith("220"));
             oSMTP.Send("HELO test\r\n");
             CustomAssert.IsTrue(oSMTP.Receive().StartsWith("250"));
             oSMTP.Send("MAIL FROM: [email protected]\r\n");
             CustomAssert.IsTrue(oSMTP.Receive().StartsWith("250"));
             oSMTP.Send("RCPT TO: [email protected]\r\n");
             CustomAssert.IsTrue(oSMTP.Receive().StartsWith("250"));
             oSMTP.Send("RCPT TO: [email protected]\r\n");
             CustomAssert.IsTrue(oSMTP.Receive().StartsWith("250"));

             oSMTP.Disconnect();
        }
示例#31
0
        private void AssertValidMailRcptToCommand(string comamnd)
        {
            var smtpClientSimulator = new TcpConnection();
             smtpClientSimulator.Connect(25);
             Assert.IsTrue(smtpClientSimulator.Receive().StartsWith("220"));
             smtpClientSimulator.Send("HELO test\r\n");
             Assert.IsTrue(smtpClientSimulator.Receive().StartsWith("250"));
             smtpClientSimulator.Send("MAIL FROM: <*****@*****.**>\r\n");
             Assert.IsTrue(smtpClientSimulator.Receive().StartsWith("250"));

             string result = smtpClientSimulator.SendAndReceive(comamnd + "\r\n");

             smtpClientSimulator.Disconnect();

             Assert.AreEqual("250 OK\r\n", result);
        }
示例#32
0
        public void TestTooManyInvalidCommandsHELO()
        {
            Settings settings = _settings;
             settings.DisconnectInvalidClients = true;
             settings.MaxNumberOfInvalidCommands = 3;

             var sim = new TcpConnection();
             sim.Connect(25);
             sim.Receive(); // banner

             sim.SendAndReceive("HELO\r\n");
             sim.SendAndReceive("HELO\r\n");
             sim.SendAndReceive("HELO\r\n");
             sim.SendAndReceive("HELO\r\n");
             var result = sim.SendAndReceive("HELO\r\n");
             CustomAssert.IsTrue(result.Contains("Too many invalid commands"), result);
        }
示例#33
0
        public void TestSMTPServerAuthLoginUsernameAsThirdParameter()
        {
            _settings.AllowSMTPAuthPlain = true;

             var sock = new TcpConnection();
             sock.Connect(25);
             CustomAssert.IsTrue(sock.Receive().StartsWith("220"));
             sock.Send("EHLO test.com\r\n");
             CustomAssert.IsTrue(sock.Receive().StartsWith("250"));

             string base64EncodedUsername = EncodeBase64(GetUsername());
             sock.Send("AUTH LOGIN " + base64EncodedUsername + "\r\n");
             CustomAssert.IsTrue(sock.Receive().StartsWith("334"));

             sock.Send(EncodeBase64(GetPassword()) + "\r\n");
             CustomAssert.IsTrue(sock.Receive().StartsWith("535"));
             EnsureNoPassword();
        }
示例#34
0
        public void TestPOP3DownloadOfLargeMessage()
        {
            Send100MBMessage();

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

             TcpConnection socket = new TcpConnection();
             socket.Connect(110);

             // Receive welcome message.
             socket.Receive();

             socket.Send("USER " + "*****@*****.**" + "\r\n");
             socket.ReadUntil("+OK");

             socket.Send("PASS " + "test" + "\r\n");
             socket.ReadUntil("+OK");

             socket.Send("RETR 1\r\n");

             var endOfResponseSB = new StringBuilder();

             string endOfResponse = "";
             while (endOfResponse.IndexOf("\r\n.\r\n") < 0)
             {
            if (endOfResponse.IndexOf("-ERR no such message") >= 0)
            {
               socket.Disconnect();
               Assert.Fail("Nope");
            }

            endOfResponseSB.Append(socket.Receive());

            if (endOfResponseSB.Length > 100)
               endOfResponseSB.Remove(0, endOfResponseSB.Length - 100);

            endOfResponse = endOfResponseSB.ToString();
             }

             socket.Send("DELE 1\r\n");
             socket.ReadUntil("+OK");

             socket.Send("QUIT\r\n");
             socket.ReadUntil("+OK");

             socket.Disconnect();
        }
示例#35
0
        public void TestSMTPServerAuthPlain()
        {
            _settings.AllowSMTPAuthPlain = true;

             var sock = new TcpConnection();
             sock.Connect(25);
             CustomAssert.IsTrue(sock.Receive().StartsWith("220"));
             sock.Send("EHLO test.com\r\n");
             CustomAssert.IsTrue(sock.Receive().StartsWith("250"));
             sock.Send("AUTH PLAIN\r\n");
             CustomAssert.IsTrue(sock.Receive().StartsWith("334"));

             string str = "\t" + GetUsername() + "\t" + GetPassword();

             sock.Send(EncodeBase64(str) + "\r\n");
             CustomAssert.IsTrue(sock.Receive().StartsWith("535"));
             EnsureNoPassword();
        }