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); }
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); }
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); }
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"); }
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:")); }
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(); }
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); }
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")); }
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."); } }
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]")); }
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)."); } }
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; } } }
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; } } }
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"); }
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")); }
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]")); }
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); }
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); }
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); } }
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(); }
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]")); }
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")); }
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)")); }
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.")); }
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")); }
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)); }
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); } }
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")); }
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)); }