예제 #1
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();
        }
예제 #2
0
        public void TestMirror()
        {
            // Create a test account
            // Fetch the default domain
            Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

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

            _settings.MirrorEMailAddress   = "*****@*****.**";
            _settings.AddDeliveredToHeader = true;

            // Send 5 messages to this account.
            var smtpClientSimulator = new SmtpClientSimulator();

            for (int i = 0; i < 5; i++)
            {
                smtpClientSimulator.Send("*****@*****.**", "*****@*****.**", "INBOX", "Mirror test message");
            }

            // Check using POP3 that 5 messages exists.
            Pop3ClientSimulator.AssertMessageCount("*****@*****.**", "test", 5);

            string message = Pop3ClientSimulator.AssertGetFirstMessageText(account2.Address, "test");

            Assert.IsTrue(message.Contains("Delivered-To: [email protected]"));
        }
예제 #3
0
        public void TestUpdateSubjectOnMessageWithNoMessageWideCharacterSet()
        {
            Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            string script = "Sub OnAcceptMessage(oClient, oMessage) " + Environment.NewLine +
                            " oMessage.Subject = \"[ov]\" + oMessage.Subject " + Environment.NewLine +
                            " oMessage.Save() " + Environment.NewLine +
                            "End Sub" + Environment.NewLine + Environment.NewLine;

            Scripting scripting = _settings.Scripting;

            File.WriteAllText(scripting.CurrentScriptFile, script);
            scripting.Enabled = true;
            scripting.Reload();
            Assert.IsEmpty(scripting.CheckSyntax());

            string body = @"From: <*****@*****.**>" + Environment.NewLine +
                          "Subject: =?windows-1251?B?yuDr7Pvq7uLzIMji4O3zIC0g7/Do7OXwICLy5fXt6Pfl8eru4+4g8OX4?=" +
                          Environment.NewLine +
                          "   =?windows-1251?B?5e3o/yIgW0Z3ZDog0tAg4uXw8ejoIDEuMl0=?=" + Environment.NewLine +
                          Environment.NewLine +
                          "Hej!" + Environment.NewLine;


            SmtpClientSimulator.StaticSendRaw("*****@*****.**", "*****@*****.**", body);

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

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

            string subject = account.IMAPFolders[0].Messages[0].Subject;
        }
예제 #4
0
        public void TestRETR()
        {
            Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test", "TestBody1");
            Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 1);

            SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test", "TestBody2");
            Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 2);

            SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test", "TestBody3");
            Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 3);

            var sim = new Pop3ClientSimulator();

            sim.ConnectAndLogon(account.Address, "test");
            string result = sim.RETR(1);

            Assert.IsTrue(result.Contains("TestBody1"), result);
            result = sim.RETR(2);
            Assert.IsTrue(result.Contains("TestBody2"), result);
            result = sim.RETR(3);
            Assert.IsTrue(result.Contains("TestBody3"), result);

            Assert.IsFalse(result.Contains(".\r\n."));
        }
예제 #5
0
        public void TestSearchUTF8TEXT()
        {
            Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            string body = TestSetup.GetResource("Messages.MessageContainingGreekSubject.txt");

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

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

            var oSimulator = new ImapClientSimulator();

            Assert.IsTrue(oSimulator.ConnectAndLogon(account.Address, "test"));
            Assert.IsTrue(oSimulator.SelectFolder("INBOX"));

            string result = oSimulator.Search("CHARSET UTF-8 ALL TEXT GRΣΣK");

            Assert.AreEqual("1", result);

            result = oSimulator.Search("CHARSET UTF-8 ALL TEXT 標準語");
            Assert.AreEqual("1", result);

            result = oSimulator.Search("CHARSET UTF-8 ALL TEXT GRΣΣK標準語");
            Assert.AreEqual("1", result);

            result = oSimulator.Search("CHARSET UTF-8 ALL TEXT GRΣΣKWHAT標準語");
            Assert.AreEqual("", result);
        }
예제 #6
0
        public void TestSendToAddressWithQuote()
        {
            Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "us'*****@*****.**", "test");

            SmtpClientSimulator.StaticSend("*****@*****.**", "us'*****@*****.**", "Test", "Test");
            Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 1);
        }
예제 #7
0
        public void TestIncorrectLineEndings()
        {
            // Create a test account
            // Fetch the default domain
            Account oAccount1 = SingletonProvider <TestSetup> .Instance.AddAccount(_domain,
                                                                                   "*****@*****.**",
                                                                                   "test");

            // Disallow incorrect line endings.
            SingletonProvider <TestSetup> .Instance.GetApp().Settings.AllowIncorrectLineEndings = false;

            // Send a messages to this account.

            var smtpClientSimulator = new SmtpClientSimulator();

            smtpClientSimulator.Send("*****@*****.**", "*****@*****.**", "INBOX",
                                     "This is a test message\r\n consisting of correct lines");

            CustomAsserts.Throws <DeliveryFailedException>(() => smtpClientSimulator.Send("*****@*****.**",
                                                                                          "*****@*****.**", "INBOX",
                                                                                          "This is a test message\r consisting of incorrect lines"));



            CustomAsserts.Throws <DeliveryFailedException>(
                () => smtpClientSimulator.Send("*****@*****.**", "*****@*****.**", "INBOX",
                                               "This is a test message\n consisting of incorrect lines"));


            CustomAsserts.Throws <DeliveryFailedException>(() => smtpClientSimulator.Send("*****@*****.**",
                                                                                          "*****@*****.**", "INBOX",
                                                                                          "This is a test message\n\r consisting of incorrect lines"));

            Pop3ClientSimulator.AssertMessageCount(oAccount1.Address, "test", 1);
        }
예제 #8
0
        public void RecipientNotInListButDomainHasCatchAll_EmailShouldEndUpInCatchAll()
        {
            SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            // Add a route pointing at localhost
            Route route = _settings.Routes.Add();

            route.DomainName                  = "test.com";
            route.TargetSMTPHost              = "localhost";
            route.TargetSMTPPort              = 255;
            route.NumberOfTries               = 1;
            route.MinutesBetweenTry           = 5;
            route.TreatRecipientAsLocalDomain = true;
            route.TreatSenderAsLocalDomain    = true;
            route.AllAddresses                = false;
            route.Save();

            var routeAddress = route.Addresses.Add();

            routeAddress.Address = "*****@*****.**";
            routeAddress.Save();
            route.Save();

            _domain.Postmaster = "*****@*****.**";
            _domain.Save();

            SmtpClientSimulator.StaticSend("*****@*****.**", "*****@*****.**", "A", "B");
            Pop3ClientSimulator.AssertMessageCount("*****@*****.**", "test", 1);
        }
예제 #9
0
        public void CacheShouldHaveMaxSize()
        {
            _settings.Cache.DomainCacheMaxSizeKb  = 40;
            _settings.Cache.AccountCacheMaxSizeKb = 20;


            for (int i = 0; i < 41; i++)
            {
                var domain = _application.Domains.Add();
                domain.Name   = string.Format("{0}.example.com", i);
                domain.Active = true;
                domain.Save();

                var account = domain.Accounts.Add();
                account.Address  = "test@" + domain.Name;
                account.Password = "******";
                account.Active   = true;
                account.Save();

                Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 0);
            }

            // Before the 41 domain is placed in cache, 10% of the items should be removed,
            // so at this point we should have 40-10%+1 = 37 items in cache
            Assert.AreEqual(37, _settings.Cache.DomainCacheSizeKb);

            // Account max size is set to 20 above, so 10% removal leaves 18, plus the one we just added.
            Assert.AreEqual(19, _settings.Cache.AccountCacheSizeKb);
        }
예제 #10
0
        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);
        }
예제 #11
0
        public void TestImportOfMessageIntoOtherFolder()
        {
            string @messageText =
                "From: [email protected]\r\n" +
                "\r\n" +
                "Test\r\n";

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

            account.IMAPFolders.Add("Woho");

            string domainPath  = Path.Combine(_application.Settings.Directories.DataDirectory, "test.com");
            string accountPath = Path.Combine(domainPath, "test");

            Directory.CreateDirectory(accountPath);
            string fileName = Path.Combine(accountPath, "something.eml");

            File.WriteAllText(fileName, messageText);

            Assert.IsTrue(_application.Utilities.ImportMessageFromFileToIMAPFolder(fileName, account.ID, "Woho"));

            Pop3ClientSimulator.AssertMessageCount("*****@*****.**", "test", 0);
            var sim = new ImapClientSimulator();

            sim.ConnectAndLogon("*****@*****.**", "test");
            Assert.AreEqual(1, sim.GetMessageCount("Woho"));
            sim.Disconnect();
        }
예제 #12
0
파일: Basics.cs 프로젝트: x3650/hmailserver
        public void TestSaveMessageInExistingIMAPFolder()
        {
            Settings settings = SingletonProvider <TestSetup> .Instance.GetApp().Settings;

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

            // Check that the message does not exist
            Pop3ClientSimulator.AssertMessageCount(oAccount1.Address, "test", 0);

            // Send a message to the account.
            IMAPFolder folder = oAccount1.IMAPFolders.get_ItemByName("INBOX");

            hMailServer.Message oMessage = folder.Messages.Add();

            Assert.AreEqual(0, oMessage.State);

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

            Assert.AreEqual(2, oMessage.State);
            Assert.IsFalse(oMessage.Filename.Contains(settings.PublicFolderDiskName));
            Assert.IsTrue(oMessage.Filename.Contains(_domain.Name));

            // Check that the message exists
            string message = Pop3ClientSimulator.AssertGetFirstMessageText(oAccount1.Address, "test");

            Assert.IsNotEmpty(message);
            Assert.Less(0, message.IndexOf("Hej"));
        }
예제 #13
0
파일: Basics.cs 프로젝트: x3650/hmailserver
        public void TestLiveLog()
        {
            Application app = SingletonProvider <TestSetup> .Instance.GetApp();

            Utilities utilities = app.Utilities;

            Logging logging = app.Settings.Logging;

            logging.EnableLiveLogging(true);

            // Add an account and send a message to it.
            Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test", "SampleBody");
            Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 1);

            string liveLog = logging.LiveLog;

            Assert.IsTrue(liveLog.Length > 0, liveLog);

            SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test", "SampleBody");
            Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 2);

            logging.EnableLiveLogging(true);

            liveLog = logging.LiveLog;
            Assert.IsFalse(liveLog.Contains("SMTPDeliverer - Message"));
        }
예제 #14
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);
        }
예제 #15
0
        public void WhenForwardingFromAddressShouldBeSetToForwardingAccount()
        {
            var sender = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

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

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

            forwarder.ForwardEnabled      = true;
            forwarder.ForwardAddress      = recipient.Address;
            forwarder.ForwardKeepOriginal = true;
            forwarder.Save();

            var smtpClientSimulator = new SmtpClientSimulator();

            smtpClientSimulator.Send(sender.Address, forwarder.Address, "INBOX", "POP3 test message");

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


            // Tell hMailServer to deliver now, so that the forward takes effect.
            SingletonProvider <TestSetup> .Instance.GetApp().SubmitEMail();

            var message = Pop3ClientSimulator.AssertGetFirstMessageText(recipient.Address, "test");


            Assert.IsTrue(message.Contains("Return-Path: [email protected]"));
        }
예제 #16
0
        public void TestPOP3Server()
        {
            Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            var smtpSim = new SmtpClientSimulator();

            smtpSim.Send("*****@*****.**", account.Address, "Test", "MyBody");

            for (int i = 0; i < 10; i++)
            {
                try
                {
                    Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 1);
                    var    pop3Sim = new Pop3ClientSimulator(true, 11001);
                    string text    = pop3Sim.GetFirstMessageText(account.Address, "test");

                    Assert.IsTrue(text.Contains("MyBody"));

                    break;
                }
                catch (AssertionException)
                {
                    throw;
                }
                catch (Exception)
                {
                    if (i == 9)
                    {
                        throw;
                    }
                }
            }
        }
예제 #17
0
        public void TestForwardingAndDelete()
        {
            // Create a test account
            // Fetch the default domain
            Account oAccount1 = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

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

            // Set up account 1 to forward to account2.
            oAccount1.ForwardEnabled      = true;
            oAccount1.ForwardAddress      = "*****@*****.**";
            oAccount1.ForwardKeepOriginal = false;
            oAccount1.Save();

            // Send 2 messages to this account.
            var smtpClientSimulator = new SmtpClientSimulator();

            smtpClientSimulator.Send("*****@*****.**", "*****@*****.**", "INBOX", "POP3 test message");
            CustomAsserts.AssertRecipientsInDeliveryQueue(0);
            Pop3ClientSimulator.AssertMessageCount(oAccount2.Address, "test", 1);

            string domainDir = Path.Combine(_settings.Directories.DataDirectory, "test.com");
            string userDir   = Path.Combine(domainDir, "Forward1");

            string[] dirs = Directory.GetDirectories(userDir);
            foreach (string dir in dirs)
            {
                string[] files = Directory.GetFiles(dir);

                Assert.AreEqual(0, files.Length);
            }
        }
예제 #18
0
        public void TestMoveMessageWithGlobalRule()
        {
            Account testAccount = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "Test'*****@*****.**",
                                                                                     "test");

            // First deliver two messages to the inbox.
            SmtpClientSimulator.StaticSend(testAccount.Address, testAccount.Address, "Test", "Test");
            Pop3ClientSimulator.AssertMessageCount(testAccount.Address, "test", 1);
            IMAPFolder inboxFolder = testAccount.IMAPFolders[0];

            Assert.AreEqual(1, inboxFolder.CurrentUID);
            Assert.AreEqual(1, inboxFolder.Messages[0].UID);

            SmtpClientSimulator.StaticSend(testAccount.Address, testAccount.Address, "Test", "Test");
            Pop3ClientSimulator.AssertMessageCount(testAccount.Address, "test", 2);
            Assert.AreEqual(2, inboxFolder.CurrentUID);
            Assert.AreEqual(2, inboxFolder.Messages[1].UID);

            CreateMoveRule(_application.Rules, "TestFolder");

            // This message will be moved into the test folder.
            SmtpClientSimulator.StaticSend(testAccount.Address, testAccount.Address, "Test", "Test");

            // Wait for the message to arrive.
            CustomAsserts.AssertFolderExists(testAccount.IMAPFolders, "TestFolder");

            IMAPFolder testFolder = testAccount.IMAPFolders.get_ItemByName("TestFolder");

            CustomAsserts.AssertFolderMessageCount(testFolder, 1);

            // Since the message is placed in a new folder, it should receive a unique UID.
            Assert.AreEqual(1, testFolder.Messages.Count);
            Assert.AreEqual(1, testFolder.CurrentUID);
            Assert.AreEqual(1, testFolder.Messages[0].UID);
        }
예제 #19
0
        public void TestMissingMXRecord()
        {
            Application application = SingletonProvider <TestSetup> .Instance.GetApp();

            // Create a test account
            // Fetch the default domain

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

            // Disallow incorrect line endings.

            _antiSpam.SpamDeleteThreshold = 1;
            _antiSpam.UseMXChecks         = true;
            _antiSpam.UseMXChecksScore    = 2;

            // Send a messages to this account.
            var smtpClientSimulator = new SmtpClientSimulator();

            smtpClientSimulator.Send("*****@*****.**", "*****@*****.**", "INBOX", "This is a test message.");

            CustomAsserts.Throws <DeliveryFailedException>(
                () => smtpClientSimulator.Send("test@domain_without_mx_records421dfsam430sasd.com", oAccount1.Address, "INBOX",
                                               "This is a test message."));

            _antiSpam.UseMXChecks = false;

            Pop3ClientSimulator.AssertMessageCount(oAccount1.Address, "test", 1);
        }
예제 #20
0
        public void TestBasicIncrements()
        {
            Account testAccount = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "Test'*****@*****.**",
                                                                                     "test");

            SmtpClientSimulator.StaticSend(testAccount.Address, testAccount.Address, "Test", "Test");
            Pop3ClientSimulator.AssertMessageCount(testAccount.Address, "test", 1);

            IMAPFolder inboxFolder = testAccount.IMAPFolders[0];

            Assert.AreEqual(1, inboxFolder.CurrentUID);
            Assert.AreEqual(1, inboxFolder.Messages[0].UID);

            SmtpClientSimulator.StaticSend(testAccount.Address, testAccount.Address, "Test", "Test");
            Pop3ClientSimulator.AssertMessageCount(testAccount.Address, "test", 2);

            Assert.AreEqual(2, inboxFolder.CurrentUID);
            Assert.AreEqual(2, inboxFolder.Messages[1].UID);

            SmtpClientSimulator.StaticSend(testAccount.Address, testAccount.Address, "Test", "Test");
            Pop3ClientSimulator.AssertMessageCount(testAccount.Address, "test", 3);

            Assert.AreEqual(3, inboxFolder.CurrentUID);
            Assert.AreEqual(3, inboxFolder.Messages[2].UID);
        }
예제 #21
0
        public void TestPOP3TransactionSafety()
        {
            Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test", "TestBody");
            Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 1);

            var sim = new Pop3ClientSimulator();

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

            // Now delete the message using an IMAP client.
            var imapSimulator = new ImapClientSimulator();

            Assert.IsTrue(imapSimulator.ConnectAndLogon(account.Address, "test"));
            Assert.IsTrue(imapSimulator.SelectFolder("INBOX"));
            Assert.IsTrue(imapSimulator.SetDeletedFlag(1));
            Assert.IsTrue(imapSimulator.Expunge());
            Assert.AreEqual(0, imapSimulator.GetMessageCount("Inbox"));

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

            // This deletion should not have any effect, since the POP3 connection is referencing an old message.
            sim.DELE(1);
            sim.QUIT();

            Assert.AreEqual(1, imapSimulator.GetMessageCount("Inbox"));
        }
예제 #22
0
        public void TestMessageAndTerminationInSameBuffer()
        {
            FetchAccount fetchAccount;

            using (var pop3Server = CreateServer())
            {
                pop3Server.SendBufferMode = Pop3ServerSimulator.BufferMode.MessageAndTerminatonTogether;
                pop3Server.StartListen();

                fetchAccount = CreateFetchAccount();

                // Fetch message
                fetchAccount.DownloadNow();
                pop3Server.WaitForCompletion();
                LockHelper.WaitForUnlock(fetchAccount);
            }


            // Do it again, to make sure
            using (var pop3Server = CreateServer())
            {
                pop3Server.SendBufferMode = Pop3ServerSimulator.BufferMode.MessageAndTerminatonTogether;
                pop3Server.StartListen();

                fetchAccount.DownloadNow();
                pop3Server.WaitForCompletion();
                LockHelper.WaitForUnlock(fetchAccount);
            }

            Pop3ClientSimulator.AssertMessageCount(_account.Address, "test", 2);
            string downloadedMessage = Pop3ClientSimulator.AssertGetFirstMessageText(_account.Address, "test");

            Assert.IsTrue(downloadedMessage.Contains(_message));
        }
예제 #23
0
        public void TestWhitelistSpecificIpV4Address()
        {
            var addresses    = GetAllLocalAddresses(System.Net.Sockets.AddressFamily.InterNetwork);
            var firstAddress = addresses[0];

            // Enable SURBL.
            var oSURBLServer = _antiSpam.SURBLServers[0];

            oSURBLServer.Active = true;
            oSURBLServer.Score  = 5;
            oSURBLServer.Save();

            // Make sure we are now blacklisted.
            var smtpClient = new SmtpClientSimulator(false, 25, IPAddress.Parse(firstAddress));

            CustomAsserts.Throws <DeliveryFailedException>(() => smtpClient.Send("*****@*****.**", "*****@*****.**", "Hello", SurblTestPointBody));

            // White list all IPv4 addresses
            foreach (var address in addresses)
            {
                var obAddress = _antiSpam.WhiteListAddresses.Add();
                obAddress.EmailAddress   = "*";
                obAddress.LowerIPAddress = address;
                obAddress.UpperIPAddress = address;
                obAddress.Description    = "Test";
                obAddress.Save();
            }

            // Make sure we can now send again.
            smtpClient.Send("*****@*****.**", "*****@*****.**", "Hello", SurblTestPointBody);

            Pop3ClientSimulator.AssertMessageCount("*****@*****.**", "test", 1);
        }
예제 #24
0
        public void TestDisconnectAfterRetrCommand()
        {
            var pop3Server = CreateServer();

            pop3Server.SecondsToWaitBeforeTerminate  = 180;
            pop3Server.DisconnectAfterRetrCompletion = true;
            pop3Server.StartListen();

            // Connection will be dropped after we perform the RETR command.
            var fetchAccount = CreateFetchAccount();

            fetchAccount.DownloadNow();

            pop3Server.WaitForCompletion();
            LockHelper.WaitForUnlock(fetchAccount);

            // Simulate another download where the connection is not dropPed.
            pop3Server = CreateServer();
            pop3Server.SecondsToWaitBeforeTerminate  = 180;
            pop3Server.DisconnectAfterRetrCompletion = false;
            pop3Server.StartListen();

            fetchAccount.DownloadNow();
            pop3Server.WaitForCompletion();

            Pop3ClientSimulator.AssertMessageCount(_account.Address, "test", 2);
        }
예제 #25
0
        public void TestMirrorMultipleRecipientsOver255Chars()
        {
            // Create a test account
            // Fetch the default domain
            var recipients = new List <string>();

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

                recipients.Add(address);
            }

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

            _settings.MirrorEMailAddress   = "*****@*****.**";
            _settings.AddDeliveredToHeader = true;

            // Send 1 messages to this account.
            var smtpClientSimulator = new SmtpClientSimulator();

            smtpClientSimulator.Send("*****@*****.**", recipients, "INBOX", "Mirror test message");

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

            string message = Pop3ClientSimulator.AssertGetFirstMessageText(mirrorAccount.Address, "test");

            Assert.IsTrue(
                message.Contains(
                    "Delivered-To: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],mirror14@test\r\n"));

            CustomAsserts.AssertRecipientsInDeliveryQueue(0);
        }
예제 #26
0
파일: Basics.cs 프로젝트: x3650/hmailserver
        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 Pop3ServerSimulator(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];
                Assert.IsTrue(message.get_Flag(eMessageFlag.eMFVirusScan));
            }
        }
예제 #27
0
        public void TestMirrorMultipleRecipients()
        {
            // Create a test account
            // Fetch the default domain
            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 mirrorAccount = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**",
                                                                                       "test");

            _settings.MirrorEMailAddress   = "*****@*****.**";
            _settings.AddDeliveredToHeader = true;

            // Send 5 messages to this account.
            var smtpClientSimulator = new SmtpClientSimulator();

            smtpClientSimulator.Send("*****@*****.**", new List <string> {
                account1.Address, account2.Address, account3.Address
            },
                                     "INBOX", "Mirror test message");

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

            string message = Pop3ClientSimulator.AssertGetFirstMessageText(mirrorAccount.Address, "test");

            Assert.IsTrue(message.Contains("Delivered-To: [email protected],[email protected],[email protected]"));

            CustomAsserts.AssertRecipientsInDeliveryQueue(0);
        }
예제 #28
0
        public void TestForwarding()
        {
            // Create a test account
            // Fetch the default domain
            Account oAccount1 = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

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

            // Set up account 1 to forward to account2.
            oAccount1.ForwardEnabled      = true;
            oAccount1.ForwardAddress      = "*****@*****.**";
            oAccount1.ForwardKeepOriginal = true;
            oAccount1.Save();

            // Send 2 messages to this account.
            var smtpClientSimulator = new SmtpClientSimulator();

            for (int i = 0; i < 2; i++)
            {
                smtpClientSimulator.Send("*****@*****.**", "*****@*****.**", "INBOX", "POP3 test message");
            }

            Pop3ClientSimulator.AssertMessageCount(oAccount1.Address, "test", 2);

            // Tell hMailServer to deliver now, so that the forward takes effect.
            SingletonProvider <TestSetup> .Instance.GetApp().SubmitEMail();

            Pop3ClientSimulator.AssertMessageCount(oAccount2.Address, "test", 2);
        }
예제 #29
0
        public void TestWildcardSingleQuote()
        {
            WhiteListAddresses obAddresses = _antiSpam.WhiteListAddresses;

            WhiteListAddress obAddress = obAddresses.Add();

            obAddress.EmailAddress   = "white'*****@*****.**";
            obAddress.LowerIPAddress = "0.0.0.0";
            obAddress.UpperIPAddress = "255.255.255.255";
            obAddress.Description    = "Test";
            obAddress.Save();

            // Enable SURBL.
            SURBLServer oSURBLServer = _antiSpam.SURBLServers[0];

            oSURBLServer.Active = true;
            oSURBLServer.Score  = 5;
            oSURBLServer.Save();

            // Send a messages to this account.
            SmtpClientSimulator.StaticSend("white'*****@*****.**", "*****@*****.**",
                                           "SURBL-Match",
                                           "This is a test message with a SURBL url: -> http://surbl-org-permanent-test-point.com/ <-");
            CustomAsserts.Throws <DeliveryFailedException>(() => SmtpClientSimulator.StaticSend("whitelist@micro_soft.com", "*****@*****.**",
                                                                                                "SURBL-Match",
                                                                                                "This is a test message with a SURBL url: -> http://surbl-org-permanent-test-point.com/ <-"));

            Pop3ClientSimulator.AssertMessageCount("*****@*****.**", "test", 1);
        }
예제 #30
0
        public void TestExpunge()
        {
            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.SelectFolder("Inbox");
            Assert.IsTrue(simulator.SetFlagOnMessage(1, true, @"\Deleted"));

            var secondSimulator = new ImapClientSimulator();

            secondSimulator.ConnectAndLogon(oAccount.Address, "test");
            string result = secondSimulator.ExamineFolder("INBOX");

            Assert.IsTrue(result.Contains("1 EXISTS"), result);
            Assert.IsFalse(secondSimulator.Expunge());

            simulator.SelectFolder("INBOX");
            Assert.IsTrue(simulator.Expunge());

            simulator.Close();
            secondSimulator.Close();
        }