예제 #1
0
        public void TestBasicIncrementsWithDeletion()
        {
            hMailServer.Account testAccount = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "Test'*****@*****.**", "test");

            SMTPClientSimulator.StaticSend(testAccount.Address, testAccount.Address, "Test", "Test");
            POP3Simulator.AssertMessageCount(testAccount.Address, "test", 1);

            hMailServer.IMAPFolder inboxFolder = testAccount.IMAPFolders[0];

            Assert.AreEqual(1, inboxFolder.CurrentUID);
            Assert.AreEqual(1, inboxFolder.Messages[0].UID);
            POP3Simulator.AssertGetFirstMessageText(testAccount.Address, "test");

            SMTPClientSimulator.StaticSend(testAccount.Address, testAccount.Address, "Test", "Test");
            POP3Simulator.AssertMessageCount(testAccount.Address, "test", 1);

            Assert.AreEqual(2, inboxFolder.CurrentUID);
            Assert.AreEqual(2, inboxFolder.Messages[0].UID);
            POP3Simulator.AssertGetFirstMessageText(testAccount.Address, "test");


            SMTPClientSimulator.StaticSend(testAccount.Address, testAccount.Address, "Test", "Test");
            POP3Simulator.AssertMessageCount(testAccount.Address, "test", 1);

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

            string filename = Path.Combine(Path.GetTempPath(), "dummy.txt");

            File.WriteAllText(filename, "tjena moss");

            hMailServer.Message message = new hMailServer.Message();
            message.AddRecipient("", account.Address);
            message.Charset = "utf-8";
            message.Attachments.Add(filename);
            // may cause an assert.
            message.HTMLBody = "Test of message... 日本語";
            message.Body     = "Test of message... 日本語";
            message.Save();

            string messageText = POP3Simulator.AssertGetFirstMessageText(account.Address, "test");


            int    headerEnd = messageText.IndexOf("\r\n\r\n");
            string header    = messageText.Substring(0, headerEnd);

            Assert.IsTrue(header.Contains("Content-Type: multipart/mixed; charset=\"utf-8\""));

            File.Delete(filename);
        }
예제 #3
0
        public void TestAddBodyAfterAttachment()
        {
            hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            string filename = Path.Combine(Path.GetTempPath(), "dummy.txt");

            File.WriteAllText(filename, "tjena moss");

            hMailServer.Message message = new hMailServer.Message();
            message.AddRecipient("", account.Address);
            message.Attachments.Add(filename);
            message.Body = "Hello";
            message.Save();

            string messageText = POP3Simulator.AssertGetFirstMessageText(account.Address, "test");

            int    headerEnd = messageText.IndexOf("\r\n\r\n");
            string header    = messageText.Substring(0, headerEnd);

            Assert.IsTrue(header.Contains("Content-Type: multipart/mixed;"));
            Assert.IsTrue(messageText.Contains("Hello"));
            Assert.IsTrue(messageText.Contains("dummy.txt"));

            File.Delete(filename);
        }
예제 #4
0
        public void TestGreyListing()
        {
            _antiSpam.GreyListingEnabled = false;

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

            SMTPClientSimulator smtp       = new SMTPClientSimulator();
            List <string>       recipients = new List <string>();

            recipients.Add(oAccount1.Address);
            bool result = smtp.Send("*****@*****.**", recipients, "Test", "Body");

            Assert.IsTrue(result);
            POP3Simulator.AssertGetFirstMessageText(oAccount1.Address, "test");

            _antiSpam.GreyListingEnabled = true;

            result = smtp.Send("*****@*****.**", recipients, "Test", "Body");
            Assert.IsFalse(result);

            _antiSpam.GreyListingEnabled = false;

            result = smtp.Send("*****@*****.**", recipients, "Test", "Body");
            Assert.IsTrue(result);
            POP3Simulator.AssertGetFirstMessageText(oAccount1.Address, "test");
        }
예제 #5
0
        public void TestOneFailOnePass()
        {
            hMailServer.Account oAccount1 = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            _settings.AntiSpam.SpamMarkThreshold   = 1;
            _settings.AntiSpam.SpamDeleteThreshold = 100;

            _settings.AntiSpam.AddHeaderReason    = true;
            _settings.AntiSpam.AddHeaderSpam      = true;
            _settings.AntiSpam.PrependSubject     = true;
            _settings.AntiSpam.PrependSubjectText = "ThisIsSpam";

            _settings.AntiSpam.CheckHostInHelo      = true;
            _settings.AntiSpam.CheckHostInHeloScore = 5;

            // Enable SURBL.
            hMailServer.SURBLServer oSURBLServer = _settings.AntiSpam.SURBLServers[0];
            oSURBLServer.Active = true;
            oSURBLServer.Score  = 5;
            oSURBLServer.Save();

            // Send a messages to this account, containing both incorrect MX records an SURBL-hits.
            // We should only detect one of these two:
            SMTPClientSimulator oSMTP = new SMTPClientSimulator();

            // Should not be possible to send this email since it's results in a spam
            // score over the delete threshold.
            Assert.IsTrue(oSMTP.Send("test@domain_without_mx_records421dfsam430sasd.com", oAccount1.Address, "INBOX", "This is a test message."));

            string message = POP3Simulator.AssertGetFirstMessageText(oAccount1.Address, "test");

            Assert.IsTrue(message.Contains("X-hMailServer-Reason-1:"));
            Assert.IsFalse(message.Contains("X-hMailServer-Reason-2:"));
        }
예제 #6
0
        public void TestRetrievalOfMessageInDeletedFolder()
        {
            hMailServer.Application application = SingletonProvider <Utilities> .Instance.GetApp();

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

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

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

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

            Utilities.AssertMessageExistsInFolder(inbox, 1);

            hMailServer.Message message = inbox.Messages[0];

            DirectoryInfo dir    = new DirectoryInfo(Path.GetFullPath(message.Filename));
            DirectoryInfo parent = dir.Parent.Parent.Parent;

            parent.Delete(true);

            string text = POP3Simulator.AssertGetFirstMessageText(account.Address, "test");

            Assert.IsTrue(text.Contains(deletedMessageText.Replace("%MACRO_FILE%", message.Filename)));
            Utilities.AssertReportedError();
        }
예제 #7
0
        public void TestMirrorMultipleRecipientsOver255Chars()
        {
            // Create a test account
            // Fetch the default domain
            List <string> recipients = new List <string>();

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

                recipients.Add(address);
            }

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

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

            // Send 5 messages to this account.
            SMTPClientSimulator oSMTP = new SMTPClientSimulator();

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

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

            string message = POP3Simulator.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"));

            Utilities.AssertRecipientsInDeliveryQueue(0);
        }
예제 #8
0
        public void TestReplaceInvalidPathWithCorrectPath()
        {
            hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

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

            hMailServer.IMAPFolder folder = account.IMAPFolders.get_ItemByName("Inbox");
            Utilities.AssertMessageExistsInFolder(folder, 1);

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

            string filename = message.Filename;

            // Now nothing should happen here.
            Assert.IsTrue(_application.Utilities.ImportMessageFromFile(filename, account.ID));
            Assert.IsTrue(File.Exists(filename));

            string sql = string.Format("update hm_messages set messagefilename = '{0}' where messageid = {1}", Utilities.Escape(message.Filename), message.ID);

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

            // Now the path should be replaced.
            Assert.IsTrue(_application.Utilities.ImportMessageFromFile(message.Filename, account.ID));

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

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

            Assert.IsTrue(content.Contains("Test message"));
        }
예제 #9
0
        public void TestAutoReplySubjectInBody()
        {
            // Create a test account
            // Fetch the default domain
            hMailServer.Account oAccount1 = SingletonProvider <Utilities> .Instance.AddAccount(_domain, Utilities.RandomString() + "@test.com", "test");

            hMailServer.Account oAccount2 = SingletonProvider <Utilities> .Instance.AddAccount(_domain, Utilities.RandomString() + "@test.com", "test");

            oAccount2.VacationMessageIsOn = true;
            oAccount2.VacationMessage     = "Your message regarding -%SUBJECT%- was not received.";
            oAccount2.VacationSubject     = "Auto-Reply: Out of office";
            oAccount2.Save();

            // Send 1 message to this account
            SMTPClientSimulator oSMTP = new SMTPClientSimulator();

            oSMTP.Send(oAccount1.Address, oAccount2.Address, "Test message", "This is the body");

            string s = POP3Simulator.AssertGetFirstMessageText(oAccount1.Address, "test");

            if (s.IndexOf("Your message regarding -Test message- was not received.") < 0)
            {
                throw new Exception("ERROR - Auto reply subject not set properly.");
            }
        }
예제 #10
0
        public void ConfirmSingleReturnPathAfterAccountForward()
        {
            // Create a test account
            // Fetch the default domain
            hMailServer.Account oAccount1 = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

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

            oAccount1.ForwardAddress = oAccount2.Address;
            oAccount1.ForwardEnabled = true;
            oAccount1.Save();

            // Send a message...
            SMTPClientSimulator oSMTP = new SMTPClientSimulator();

            oSMTP.Send("*****@*****.**", oAccount1.Address, "Test message", "This is the body");

            Utilities.AssertRecipientsInDeliveryQueue(0);
            _application.SubmitEMail();

            // Wait for the auto-reply.
            string text = POP3Simulator.AssertGetFirstMessageText(oAccount2.Address, "test");

            Assert.IsFalse(text.Contains("Return-Path: [email protected]"));
            Assert.IsFalse(text.Contains("Return-Path: [email protected]"));
            Assert.IsTrue(text.Contains("Return-Path: [email protected]"));
        }
예제 #11
0
        public void TestSpamMessage()
        {
            // Send a messages to this account.
            SMTPClientSimulator oSMTP = new SMTPClientSimulator();

            oSMTP.Send(account.Address, account.Address, "SA test", "This is a test message with spam.\r\n XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X.");

            string sMessageContents = POP3Simulator.AssertGetFirstMessageText(account.Address, "test");

            if (!sMessageContents.Contains("X-Spam-Status: Yes"))
            {
                Assert.Fail("Spam message not treated as spam (no X-Spam-Status-header).");
            }

            if (!sMessageContents.Contains("X-hMailServer-Spam"))
            {
                Assert.Fail("Spam message not treated as spam (no X-hMailServer-Spam header).");
            }

            if (!sMessageContents.Contains("X-hMailServer-Reason"))
            {
                Assert.Fail("Spam message not treated as spam (no X-hMailServer-Reason header).");
            }

            if (!sMessageContents.Contains("X-hMailServer-Reason-Score"))
            {
                Assert.Fail("Spam message not treated as spam (no X-hMailServer-Reason-Score header).");
            }
        }
예제 #12
0
        public void TestEncodingOfStringIncludingSpace()
        {
            hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            hMailServer.Message message = new hMailServer.Message();
            message.AddRecipient("test", account.Address);
            message.From        = "Test";
            message.FromAddress = account.Address;
            message.Subject     = "test mit encoding und deutc ü...";
            message.Body        = "Test";
            message.Save();

            Utilities.AssertMessageExistsInFolder(account.IMAPFolders[0], 1);

            string messageText = POP3Simulator.AssertGetFirstMessageText(account.Address, "test");

            string [] lines = messageText.Split(Environment.NewLine.ToCharArray());

            foreach (string line in lines)
            {
                if (line.ToLower().StartsWith("subject: "))
                {
                    string subject = line.Substring("subject: ".Length + 1);

                    // encoded part should not contain space.
                    Assert.IsFalse(subject.Contains(" "));

                    break;
                }
            }
        }
예제 #13
0
        public void TestEncodingOfStringIncludingSpaceNET()
        {
            hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            MailMessage mail = new MailMessage();

            mail.From = new System.Net.Mail.MailAddress(account.Address);
            mail.To.Add(account.Address);
            mail.Subject         = "test mit encoding und deutc ü...";
            mail.Body            = "Test";
            mail.BodyEncoding    = System.Text.Encoding.GetEncoding(1252);
            mail.SubjectEncoding = System.Text.Encoding.GetEncoding(1252);
            SmtpClient oClient = new SmtpClient("localhost", 25);

            oClient.Send(mail);

            string messageText = POP3Simulator.AssertGetFirstMessageText(account.Address, "test");

            string[] lines = messageText.Split(Environment.NewLine.ToCharArray());

            foreach (string line in lines)
            {
                if (line.ToLower().StartsWith("subject: "))
                {
                    string subject = line.Substring("subject: ".Length + 1);

                    // encoded part should not contain space.
                    Assert.IsTrue(subject.Contains(" "));

                    break;
                }
            }
        }
예제 #14
0
        public void TestOnDeliverMessageJScript()
        {
            hMailServer.Application application = SingletonProvider <Utilities> .Instance.GetApp();

            hMailServer.Scripting scripting = _settings.Scripting;
            scripting.Language = "JScript";
            // First set up a script
            string script = @"function OnDeliverMessage(oMessage)
                           {
                               oMessage.HeaderValue('X-SpamResult') = 'TEST2';
                               oMessage.Save();
                           }";


            string file = scripting.CurrentScriptFile;

            Utilities.WriteFile(file, script);
            scripting.Enabled = true;
            scripting.Reload();

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

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

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

            Assert.IsNotEmpty(message);

            Assert.Less(0, message.IndexOf("X-SpamResult: TEST2"));
        }
        public void TestValidSignatureSHA256()
        {
            _antiSpam.DKIMVerificationEnabled      = true;
            _antiSpam.DKIMVerificationFailureScore = 100;

            string messageText = @"Return-Path: <*****@*****.**>" + "\r\n" +
                                 "X-Original-To: [email protected]" + "\r\n" +
                                 "Delivered-To: [email protected]" + "\r\n" +
                                 "Received: from voicemail.cis.att.net (unknown [12.34.200.188])" + "\r\n" +
                                 "	by mx2.messiah.edu (Postfix) with ESMTP id 02F12E15D8"+ "\r\n" +
                                 "	for <*****@*****.**>; Wed,  3 May 2006 15:06:32 -0400 (EDT)"+ "\r\n" +
                                 "Received: from  (localhost[127.0.0.1]) by voicemail.cis.att.net (vm2) with SMTP" + "\r\n" +
                                 "          id <2006050319071918800spa0re>; Wed, 3 May 2006 19:07:19 +0000" + "\r\n" +
                                 "DKIM-Signature: a=rsa-sha256;  c=relaxed; d=vmt2.cis.att.net; t=1146680862; " + "\r\n" +
                                 " h=Date : From : MIME-Version : To : Subject : Content-Type : Content-Transfer-Encoding; bh=HryPFX2R6r7JPsX1Z7+yReZddQR2PjvCvdXgaxW5QYU=; s=shan; " + "\r\n" +
                                 " b=QXd8h2UbBO7fIPz/Iy3wNwbVU6dih6ozokPXqAvI6p9iG5SqFahyTXwqZeltC4az3Sjay7Vx+b5e" + "\r\n" +
                                 " 1s2rQuhT4SKD47gJYs4kw0JgV2WLanF3oR1hWD0tL0vuDeUgH6kr" + "\r\n" +
                                 "Date: Wed, 15 Feb 2006 17:32:54 -0500" + "\r\n" +
                                 "From: Tony Hansen <*****@*****.**>" + "\r\n" +
                                 "MIME-Version: 1.0" + "\r\n" +
                                 "To: [email protected], [email protected], [email protected]" + "\r\n" +
                                 "Subject: this is a test message minimum.ietf-01.sha256-relaxed" + "\r\n" +
                                 "Content-Type: text/plain; charset=ISO-8859-1" + "\r\n" +
                                 "Content-Transfer-Encoding: 7bit" + "\r\n" +
                                 "Message-Id: <*****@*****.**>" + "\r\n" +
                                 "" + "\r\n" +
                                 "The quick brown fox jumped over the lazy dog." + "\r\n";

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

            Assert.IsTrue(SMTPClientSimulator.StaticSendRaw(account1.Address, account1.Address, messageText));
            string text = POP3Simulator.AssertGetFirstMessageText(account1.Address, "test");
        }
예제 #16
0
        public void TestOnDeliveryStartVBScript()
        {
            hMailServer.Application app = SingletonProvider <Utilities> .Instance.GetApp();

            hMailServer.Scripting scripting = app.Settings.Scripting;

            string script = "Sub OnDeliveryStart(oMessage) " + Environment.NewLine +
                            " EventLog.Write(\"Delivering message: \" & oMessage.FileName) " + Environment.NewLine +
                            "End Sub" + Environment.NewLine + Environment.NewLine;

            File.WriteAllText(scripting.CurrentScriptFile, script);

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

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

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

            // Wait for the message to be delivered.
            POP3Simulator.AssertGetFirstMessageText(account.Address, "test");

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

            Assert.IsTrue(eventLogText.Contains("Delivering message"));
        }
예제 #17
0
        public void TestMirror()
        {
            // Create a test account
            // Fetch the default domain
            hMailServer.Account oAccount = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

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

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

            // Send 5 messages to this account.
            SMTPClientSimulator oSMTP = new SMTPClientSimulator();

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

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

            string message = POP3Simulator.AssertGetFirstMessageText(oAccount2.Address, "test");

            Assert.IsTrue(message.Contains("Delivered-To: [email protected]"));
        }
예제 #18
0
        public void TestMirrorMultipleRecipients()
        {
            // Create a test account
            // Fetch the default domain
            hMailServer.Account oAccount1 = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

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

            hMailServer.Account oAccount3 = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

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

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

            // Send 5 messages to this account.
            SMTPClientSimulator oSMTP = new SMTPClientSimulator();

            oSMTP.Send("*****@*****.**", new List <string>()
            {
                oAccount1.Address, oAccount2.Address, oAccount3.Address
            }, "INBOX", "Mirror test message");

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

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

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

            Utilities.AssertRecipientsInDeliveryQueue(0);
        }
예제 #19
0
        public void TestSPFViaIncomingRelay()
        {
            hMailServer.Application application = SingletonProvider <Utilities> .Instance.GetApp();

            // Create a test account
            // Fetch the default domain
            ;
            hMailServer.Account oAccount1 = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            _antiSpam.SpamMarkThreshold   = 1;
            _antiSpam.SpamDeleteThreshold = 100;
            _antiSpam.AddHeaderReason     = true;
            _antiSpam.AddHeaderSpam       = true;
            _antiSpam.PrependSubject      = true;
            _antiSpam.PrependSubjectText  = "ThisIsSpam";

            // Enable SPF
            _antiSpam.UseSPF      = true;
            _antiSpam.UseSPFScore = 5;

            string message = @"Received: from openspf.org ([76.79.20.184]) by Someone ; Mon, 29 Dec 2008 13:42:55 +0100\r\n" +
                             "Message-ID: <5F90152F-DAC5-43CF-B553-FCF9302F6E0C@WORK>\r\n" +
                             "From: [email protected]\r\n" +
                             "To: [email protected]\r\n" +
                             "\r\n" +
                             "This is a test message.\r\n";


            // Send a messages to this account.
            SMTPClientSimulator oSMTP = new SMTPClientSimulator();

            oSMTP.SendRaw("*****@*****.**", oAccount1.Address, message);
            string sMessageContents = POP3Simulator.AssertGetFirstMessageText(oAccount1.Address, "test");

            Assert.IsTrue(sMessageContents.Contains("X-hMailServer-Spam"), sMessageContents);

            // Add a forwarding relay pointing at localhost, so that the message will appear to be
            // properly forwarded.
            hMailServer.IncomingRelays incomingRelays = _settings.IncomingRelays;
            Assert.AreEqual(0, incomingRelays.Count);

            hMailServer.IncomingRelay incomingRelay = incomingRelays.Add();
            incomingRelay.Name    = "Localhost";
            incomingRelay.LowerIP = "127.0.0.1";
            incomingRelay.UpperIP = "127.0.0.1";
            incomingRelay.Save();

            oSMTP.SendRaw("*****@*****.**", oAccount1.Address, message);
            sMessageContents = POP3Simulator.AssertGetFirstMessageText(oAccount1.Address, "test");
            Assert.IsFalse(sMessageContents.Contains("X-hMailServer-Spam"), sMessageContents);

            // change so that the forwarding relay no longer covers the IP.
            incomingRelay.LowerIP = "1.1.1.1";
            incomingRelay.UpperIP = "1.1.1.1";
            incomingRelay.Save();

            oSMTP.SendRaw("*****@*****.**", oAccount1.Address, message);
            sMessageContents = POP3Simulator.AssertGetFirstMessageText(oAccount1.Address, "test");
            Assert.IsTrue(sMessageContents.Contains("X-hMailServer-Spam"), sMessageContents);
        }
예제 #20
0
        public void MultiThread()
        {
            hMailServer.Account account =
                SingletonProvider <Utilities> .Instance.AddAccount(_domain.Accounts, "*****@*****.**", "test");

            int threadCount = 5;

            _threadedMessageCount = 100;
            int totalMessageCount = threadCount * _threadedMessageCount;

            List <Thread> threads = new List <Thread>();

            for (int thread = 0; thread < threadCount; thread++)
            {
                Thread t = new Thread(new ThreadStart(SendMessageThread));

                threads.Add(t);

                t.Start();
            }

            foreach (Thread t in threads)
            {
                t.Join();
            }

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

            for (int i = 0; i < totalMessageCount; i++)
            {
                string content = POP3Simulator.AssertGetFirstMessageText(account.Address, "test");

                Assert.IsTrue(content.Contains("X-Spam-Status"), content);
            }
        }
예제 #21
0
        public void TestSURBLCorrectNegative()
        {
            hMailServer.Account oAccount1 = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            // Disallow incorrect line endings.
            _antiSpam.SpamMarkThreshold   = 1;
            _antiSpam.SpamDeleteThreshold = 100;
            _antiSpam.AddHeaderReason     = true;
            _antiSpam.AddHeaderSpam       = true;
            _antiSpam.PrependSubject      = true;
            _antiSpam.PrependSubjectText  = "ThisIsSpam";

            // Enable SURBL.
            hMailServer.SURBLServer oSURBLServer = _antiSpam.SURBLServers[0];
            oSURBLServer.Active = true;
            oSURBLServer.Score  = 5;
            oSURBLServer.Save();

            // Send a messages to this account.
            Assert.IsTrue(SMTPClientSimulator.StaticSend("*****@*****.**", "*****@*****.**", "SURBL-Match", "This is a test message without a SURBL url: -> http://www.youtube.com/ <-"));

            string sMessageContents = POP3Simulator.AssertGetFirstMessageText(oAccount1.Address, "test");

            if (sMessageContents.Contains("X-hMailServer-Spam"))
            {
                throw new Exception("Non-spam message detected as spam");
            }

            oSURBLServer.Active = false;
            oSURBLServer.Save();
        }
예제 #22
0
        public void TestPermanentFailure()
        {
            Assert.AreEqual(0, _status.UndeliveredMessages.Length);

            Dictionary <string, int> deliveryResults = new Dictionary <string, int>();

            deliveryResults["*****@*****.**"] = 542;

            SMTPServerSimulator server = new SMTPServerSimulator(1, 250);

            server.AddRecipientResult(deliveryResults);
            server.StartListen();

            // Add a route so we can connect to localhost.
            AddRoutePointingAtLocalhost(5, 250, false);

            // Send message to this route.
            SMTPClientSimulator smtp       = new SMTPClientSimulator();
            List <string>       recipients = new List <string>();

            recipients.Add("*****@*****.**");
            Assert.IsTrue(smtp.Send("*****@*****.**", recipients, "Test", "Test message"));

            // Wait for the client to disconnect.
            server.WaitForCompletion();

            Assert.IsFalse(server.Conversation.Contains("\r\nDATA\r\n"));

            Utilities.AssertRecipientsInDeliveryQueue(0);

            string bounce = POP3Simulator.AssertGetFirstMessageText(_account.Address, "test");

            Assert.IsTrue(bounce.Contains("Remote server replied: 542 [email protected]"));
        }
예제 #23
0
        public void TestErrorOnMailFrom()
        {
            Assert.AreEqual(0, _status.UndeliveredMessages.Length);

            // No valid recipients...
            Dictionary <string, int> deliveryResults = new Dictionary <string, int>();

            deliveryResults["*****@*****.**"] = 250;

            SMTPServerSimulator server = new SMTPServerSimulator(1, 250);

            server.MailFromResult = 561;
            server.AddRecipientResult(deliveryResults);
            server.StartListen();

            // Add a route so we can conenct to localhost.
            AddRoutePointingAtLocalhost(5, 250, false);

            // Send message to this route.
            SMTPClientSimulator smtp       = new SMTPClientSimulator();
            List <string>       recipients = new List <string>();

            recipients.Add("*****@*****.**");
            Assert.IsTrue(smtp.Send("*****@*****.**", recipients, "Test", "Test message"));

            // Wait for the client to disconnect.
            server.WaitForCompletion();

            Utilities.AssertRecipientsInDeliveryQueue(0);

            string bounceMessage = POP3Simulator.AssertGetFirstMessageText(_account.Address, "test");

            Assert.IsTrue(bounceMessage.Contains("MAIL FROM:<*****@*****.**>"));
            Assert.IsTrue(bounceMessage.Contains("Remote server replied: 561"));
        }
예제 #24
0
        public void TestMultipleHostsTemporaryFailure()
        {
            Assert.AreEqual(0, _status.UndeliveredMessages.Length);

            // No valid recipients...
            Dictionary <string, int> deliveryResults = new Dictionary <string, int>();

            deliveryResults["*****@*****.**"] = 250;
            deliveryResults["*****@*****.**"] = 250;
            deliveryResults["*****@*****.**"] = 499;

            SMTPServerSimulator server = new SMTPServerSimulator(2, 250);

            server.AddRecipientResult(deliveryResults);
            server.AddRecipientResult(deliveryResults);
            server.StartListen();

            // Add a route so we can connect to localhost.
            hMailServer.Route route = AddRoutePointingAtLocalhostMultipleHosts(2);

            // Send message to this route.
            SMTPClientSimulator smtp       = new SMTPClientSimulator();
            List <string>       recipients = new List <string>();

            recipients.Add("*****@*****.**");
            recipients.Add("*****@*****.**");
            recipients.Add("*****@*****.**");

            if (!smtp.Send("*****@*****.**", recipients, "Test", "Test message"))
            {
                Assert.Fail("Delivery failed");
            }

            // Wait for the client to disconnect.
            server.WaitForCompletion();

            Utilities.AssertRecipientsInDeliveryQueue(1);

            // Check so that only user 3 remains in the queue.
            Assert.AreEqual(-1, _status.UndeliveredMessages.IndexOf("*****@*****.**"));
            Assert.AreEqual(-1, _status.UndeliveredMessages.IndexOf("*****@*****.**"));
            Assert.AreNotEqual(-1, _status.UndeliveredMessages.IndexOf("*****@*****.**"));

            server = new SMTPServerSimulator(2, 250);
            server.AddRecipientResult(deliveryResults);
            server.AddRecipientResult(deliveryResults);
            server.StartListen();

            Utilities.AssertRecipientsInDeliveryQueue(0, true);

            server.WaitForCompletion();

            string bounceMessage = POP3Simulator.AssertGetFirstMessageText("*****@*****.**", "test");

            Assert.IsFalse(bounceMessage.Contains("*****@*****.**"));
            Assert.IsFalse(bounceMessage.Contains("*****@*****.**"));
            Assert.IsTrue(bounceMessage.Contains("*****@*****.**"));
            Assert.IsTrue(bounceMessage.Contains("499 [email protected]"));
            Assert.IsTrue(bounceMessage.Contains("Tried 2 time(s)"));
        }
예제 #25
0
        public void TestDeliverToMyselfOnLocalPort()
        {
            Assert.AreEqual(0, _status.UndeliveredMessages.Length);

            // Add a route so we can conenct to localhost.
            AddRoutePointingAtLocalhost(1, 25, false);

            // Send message to this route.
            SMTPClientSimulator.StaticSend("*****@*****.**", "*****@*****.**", "subject", "body");

            for (int i = 0; i < 40; i++)
            {
                string s = _status.UndeliveredMessages;
                if (s.Contains("\t\[email protected]"))
                {
                    break;
                }

                Thread.Sleep(250);
            }

            // Wait for the bounce message to be delivered.
            Utilities.AssertRecipientsInDeliveryQueue(0, true);

            string message = POP3Simulator.AssertGetFirstMessageText("*****@*****.**", "test");

            Assert.IsTrue(message.Contains("this would mean connecting to myself."));
        }
예제 #26
0
파일: API.cs 프로젝트: radtek/hMailServer
        public void TestSaveMessageInExistingIMAPFolder()
        {
            hMailServer.Settings settings = SingletonProvider <Utilities> .Instance.GetApp().Settings;

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

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

            // Send a message to the account.
            hMailServer.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 = POP3Simulator.AssertGetFirstMessageText(oAccount1.Address, "test");

            Assert.IsNotEmpty(message);
            Assert.Less(0, message.IndexOf("Hej"));
        }
예제 #27
0
        public void TestMultipleDomains()
        {
            hMailServer.Domains domains = SingletonProvider <Utilities> .Instance.GetApp().Domains;

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

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

            hMailServer.Domain domain2 = SingletonProvider <Utilities> .Instance.AddDomain(domains, "test2.com");

            hMailServer.Account account3 = SingletonProvider <Utilities> .Instance.AddAccount(domain2, "*****@*****.**", "test");

            hMailServer.Account account4 = SingletonProvider <Utilities> .Instance.AddAccount(domain2, "*****@*****.**", "test");

            SMTPClientSimulator smtpSimulator = new SMTPClientSimulator();

            smtpSimulator.Send("*****@*****.**", account1.Address, "Test", "*****@*****.**");
            smtpSimulator.Send("*****@*****.**", account2.Address, "Test", "*****@*****.**");
            smtpSimulator.Send("*****@*****.**", account3.Address, "Test", "*****@*****.**");
            smtpSimulator.Send("*****@*****.**", account4.Address, "Test", "*****@*****.**");

            Assert.IsTrue(POP3Simulator.AssertGetFirstMessageText(account1.Address, "test").Contains(account1.Address));
            Assert.IsTrue(POP3Simulator.AssertGetFirstMessageText(account2.Address, "test").Contains(account2.Address));
            Assert.IsTrue(POP3Simulator.AssertGetFirstMessageText(account3.Address, "test").Contains(account3.Address));
            Assert.IsTrue(POP3Simulator.AssertGetFirstMessageText(account4.Address, "test").Contains(account4.Address));
        }
예제 #28
0
파일: API.cs 프로젝트: radtek/hMailServer
        public void TestEventLog()
        {
            hMailServer.Application application = SingletonProvider <Utilities> .Instance.GetApp();

            // First set up a script
            string script = @"Sub OnAcceptMessage(oClient, oMessage)
                               EventLog.Write(""HOWDY"")
                              End Sub";

            hMailServer.Scripting scripting = _settings.Scripting;
            string file = scripting.CurrentScriptFile;

            Utilities.WriteFile(file, script);
            scripting.Enabled = true;
            scripting.Reload();

            // Drop the current event log
            string eventLogFile = _settings.Logging.CurrentEventLog;

            SingletonProvider <Utilities> .Instance.DeleteEventLog();

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

            SendMessageToTest();

            POP3Simulator.AssertGetFirstMessageText(oAccount1.Address, "test");

            Utilities.AssertFileExists(eventLogFile, false);

            // Check that it starts with Unicode markers.
            for (int i = 0; i <= 400; i++)
            {
                try
                {
                    FileStream   fs = new FileStream(eventLogFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                    BinaryReader br = new BinaryReader(fs);
                    int          i1 = br.ReadByte();
                    int          i2 = br.ReadByte();
                    br.Close();
                    fs.Close();

                    Assert.AreEqual(255, i1);
                    Assert.AreEqual(254, i2);

                    break;
                }
                catch (Exception e)
                {
                    if (i == 40)
                    {
                        throw e;
                    }
                }

                Thread.Sleep(25);
            }
        }
예제 #29
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";


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

            List <string> 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       = 1110;
            POP3Server pop3Server = new POP3Server(1, port, messages);

            pop3Server.StartListen();

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

            hMailServer.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 = POP3Simulator.AssertGetFirstMessageText(account.Address, "test");

            Assert.IsTrue(downloadedMessage.Contains("X-hMailServer-Spam: YES"));
        }
예제 #30
0
        public void TestSURBLCombinedWithSignature()
        {
            hMailServer.Application application = SingletonProvider <Utilities> .Instance.GetApp();

            // Create a test account
            // Fetch the default domain
            ;
            _domain.SignatureEnabled         = true;
            _domain.SignaturePlainText       = "MyDomainSignature";
            _domain.AddSignaturesToLocalMail = true;
            _domain.Save();

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

            // Disallow incorrect line endings.
            _antiSpam.SpamMarkThreshold   = 1;
            _antiSpam.SpamDeleteThreshold = 100;
            _antiSpam.AddHeaderReason     = true;
            _antiSpam.AddHeaderSpam       = true;
            _antiSpam.PrependSubject      = true;
            _antiSpam.PrependSubjectText  = "ThisIsSpam";

            // Enable SURBL.
            hMailServer.SURBLServer oSURBLServer = _antiSpam.SURBLServers[0];
            oSURBLServer.Active = true;
            oSURBLServer.Score  = 5;
            oSURBLServer.Save();

            // Send a messages to this account.
            SMTPClientSimulator oSMTP = new SMTPClientSimulator();

            oSMTP.Send("*****@*****.**", "*****@*****.**", "SURBL-No-Match", "This is a test message without a SURBL url.");

            string sMessageContents = POP3Simulator.AssertGetFirstMessageText(oAccount1.Address, "test");

            if (sMessageContents.Length == 0 ||
                sMessageContents.Contains("X-hMailServer-Spam") ||
                sMessageContents.Contains("X-hMailServer-Reason") ||
                sMessageContents.Contains("ThisIsSpam"))
            {
                throw new Exception("Non-Spam message detected as spam");
            }

            Assert.IsTrue(sMessageContents.Contains(_domain.SignaturePlainText));

            oSMTP.Send("*****@*****.**", "*****@*****.**", "SURBL-No-Match", "This is a test message with a SURBL url: -> http://surbl-org-permanent-test-point.com/ <-");

            sMessageContents = POP3Simulator.AssertGetFirstMessageText(oAccount1.Address, "test");
            if (!sMessageContents.Contains("X-hMailServer-Spam") ||
                !sMessageContents.Contains("X-hMailServer-Reason") ||
                !sMessageContents.Contains("ThisIsSpam"))
            {
                throw new Exception("Spam message not detected as spam");
            }

            Assert.IsTrue(sMessageContents.Contains(_domain.SignaturePlainText));
        }