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 TestSMTPClientTimeout() { 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.AddRecipientResult(deliveryResults); server.SimulatedError = SimulatedErrorType.Sleep15MinutesAfterSessionStart; server.SecondsToWaitBeforeTerminate = 20 * 60; server.StartListen(); // Add a route so we can connect to localhost. hMailServer.Route route = AddRoutePointingAtLocalhost(5, 250, false); route.RelayerRequiresAuth = true; route.RelayerAuthUsername = "******"; route.SetRelayerAuthPassword("MySecretPassword"); // 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); }
public void TestSMTPAuthExternalToRouteConfiguredAsLocal() { // First, make sure hMailServer requires auth. hMailServer.SecurityRange range = SingletonProvider <Utilities> .Instance.GetApp().Settings.SecurityRanges.get_ItemByName("My computer"); range.RequireSMTPAuthExternalToExternal = true; range.RequireSMTPAuthLocalToExternal = true; range.Save(); hMailServer.Route route = SMTPClientTests.AddRoutePointingAtLocalhost(1, 250, false); route.TreatRecipientAsLocalDomain = true; route.TreatSenderAsLocalDomain = true; route.Save(); // Set up the simulating server to listen. Dictionary <string, int> deliveryResults = new Dictionary <string, int>(); deliveryResults["*****@*****.**"] = 250; SMTPServerSimulator server = new SMTPServerSimulator(1, 250); server.AddRecipientResult(deliveryResults); server.StartListen(); // Make sure we can't send to this route without using smtp auth. SMTPClientSimulator oSMTP = new SMTPClientSimulator(); Assert.IsTrue(oSMTP.Send("*****@*****.**", "*****@*****.**", "Mail 1", "Mail 1")); server.WaitForCompletion(); Assert.IsTrue(server.MessageData.Contains("Mail 1"), server.MessageData); }
private void ConfirmRoutes() { hMailServer.Routes routes = _application.Settings.Routes; Assert.AreEqual(2, routes.Count); hMailServer.Route route = routes[0]; Assert.AreEqual("test1.com", route.DomainName); Assert.AreEqual("description", route.Description); Assert.AreEqual(true, route.UseSSL); Assert.AreEqual(true, route.TreatSenderAsLocalDomain); Assert.AreEqual(false, route.TreatRecipientAsLocalDomain); Assert.AreEqual(false, route.TreatSecurityAsLocalDomain); route = routes[1]; Assert.AreEqual("test2.com", route.DomainName); Assert.AreEqual("description2", route.Description); Assert.AreEqual(false, route.UseSSL); Assert.AreEqual(false, route.TreatSenderAsLocalDomain); Assert.AreEqual(true, route.TreatRecipientAsLocalDomain); Assert.AreEqual(true, route.TreatSecurityAsLocalDomain); Assert.AreEqual(2, route.Addresses.Count); List <string> addresses = new List <string>(); addresses.Add(route.Addresses[0].Address); addresses.Add(route.Addresses[1].Address); Assert.IsTrue(addresses.Contains("*****@*****.**")); Assert.IsTrue(addresses.Contains("*****@*****.**")); }
private void SetupRoutes() { hMailServer.Routes routes = _application.Settings.Routes; hMailServer.Route route = routes.Add(); route.DomainName = "test1.com"; route.Description = "description"; route.UseSSL = true; route.TreatSenderAsLocalDomain = true; route.TreatRecipientAsLocalDomain = false; route.Save(); route = routes.Add(); route.DomainName = "test2.com"; route.Description = "description2"; route.UseSSL = false; route.TreatSenderAsLocalDomain = false; route.TreatRecipientAsLocalDomain = true; route.Save(); hMailServer.RouteAddresses addresses = route.Addresses; hMailServer.RouteAddress address1 = addresses.Add(); address1.Address = "*****@*****.**"; address1.Save(); hMailServer.RouteAddress address2 = addresses.Add(); address2.Address = "*****@*****.**"; address2.Save(); }
public void TreatRecipientAsExternalDomainPermitted() { hMailServer.Route route = SMTPClientTests.AddRoutePointingAtLocalhost(1, 250, false); route.TreatRecipientAsLocalDomain = false; route.Save(); hMailServer.SecurityRange range = SingletonProvider <Utilities> .Instance.GetApp().Settings.SecurityRanges.get_ItemByName("My computer"); range.AllowDeliveryFromRemoteToRemote = true; range.RequireSMTPAuthExternalToExternal = false; range.Save(); Dictionary <string, int> deliveryResults = new Dictionary <string, int>(); deliveryResults["*****@*****.**"] = 250; SMTPServerSimulator server = new SMTPServerSimulator(1, 250); server.AddRecipientResult(deliveryResults); server.StartListen(); SMTPClientSimulator oSMTP = new SMTPClientSimulator(); string result; Assert.IsTrue(oSMTP.Send("*****@*****.**", "*****@*****.**", "Mail 1", "Mail 1", out result)); server.WaitForCompletion(); server.MessageData.Contains("Mail 1"); }
public void TestUseCase3DeliveryFromExternalUserToPrimaryViaBackup() { hMailServer.Route route = SMTPClientTests.AddRoutePointingAtLocalhost(1, 250, false); route.TreatRecipientAsLocalDomain = true; route.TreatSenderAsLocalDomain = false; route.Save(); Dictionary <string, int> deliveryResults = new Dictionary <string, int>(); deliveryResults["*****@*****.**"] = 250; SMTPServerSimulator server = new SMTPServerSimulator(1, 250); server.AddRecipientResult(deliveryResults); server.StartListen(); SMTPClientSimulator oSMTP = new SMTPClientSimulator(); string result; Assert.IsTrue(oSMTP.Send("*****@*****.**", "*****@*****.**", "Mail 1", "Mail 1", out result)); server.WaitForCompletion(); server.MessageData.Contains("Mail 1"); }
public void TestDeliverToExternalMimeRecipientsEnabledRouteAsExternal() { List <string> messages = new List <string>(); string message = "From: [email protected]\r\n" + "To: \"Test\" <*****@*****.**>, \"ExternalGuy\" <*****@*****.**>\r\n" + "Subject: Test\r\n" + "\r\n" + "Hello!"; messages.Add(message); int port = 1110; POP3Server pop3Server = new POP3Server(1, port, messages); pop3Server.StartListen(); // Add a route so we can connect to localhost. hMailServer.Route route = SMTPClientTests.AddRoutePointingAtLocalhost(5, 250, false); route.TreatSecurityAsLocalDomain = false; route.Save(); hMailServer.Account userAccount = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); hMailServer.Account recipientAccount1 = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); hMailServer.Account catchallAccount = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); _domain.Postmaster = catchallAccount.Address; _domain.Save(); hMailServer.FetchAccount fa = userAccount.FetchAccounts.Add(); fa.Enabled = true; fa.MinutesBetweenFetch = 10; fa.Name = "Test"; fa.Username = "******"; fa.Password = "******"; fa.UseSSL = false; fa.ServerAddress = "localhost"; fa.Port = port; fa.ProcessMIMERecipients = true; fa.EnableRouteRecipients = true; fa.Save(); fa.DownloadNow(); pop3Server.WaitForCompletion(); fa.Delete(); string downloadedMessage1 = POP3Simulator.AssertGetFirstMessageText(recipientAccount1.Address, "test"); Assert.IsTrue(downloadedMessage1.Contains(message), downloadedMessage1); Utilities.AssertRecipientsInDeliveryQueue(0, false); }
public void TreatRecipientAsExternalDomain() { hMailServer.Route route = SMTPClientTests.AddRoutePointingAtLocalhost(1, 250, false); route.TreatRecipientAsLocalDomain = false; route.Save(); SMTPClientSimulator oSMTP = new SMTPClientSimulator(); string result; Assert.IsFalse(oSMTP.Send("*****@*****.**", "*****@*****.**", "Mail 1", "Mail 1", out result)); Assert.IsTrue(result.Contains("530 SMTP authentication is required.")); }
public static hMailServer.Route AddRoutePointingAtLocalhostMultipleHosts(int numberOfTries) { // Add a route pointing at localhost hMailServer.Route route = AddRoutePointingAtLocalhost(numberOfTries, 250, false); route.DomainName = "dummy-example.com"; route.TargetSMTPHost = "localhost|localhost"; route.TargetSMTPPort = 250; route.NumberOfTries = numberOfTries; route.MinutesBetweenTry = 5; route.Save(); return(route); }
public void TestDuplicateRoutes() { hMailServer.Application app = SingletonProvider <Utilities> .Instance.GetApp(); hMailServer.Routes routes = app.Settings.Routes; hMailServer.Route route = routes.Add(); route.DomainName = "test.com"; route.Save(); hMailServer.Route route2 = routes.Add(); route2.DomainName = "test.com"; route2.Save(); }
internal static hMailServer.Route AddRoutePointingAtLocalhost(int numberOfTries, int port) { // Add a route pointing at localhost hMailServer.Settings oSettings = SingletonProvider <Utilities> .Instance.GetApp().Settings; hMailServer.Route route = oSettings.Routes.Add(); route.DomainName = "example.com"; route.TargetSMTPHost = "localhost"; route.TargetSMTPPort = port; route.NumberOfTries = numberOfTries; route.MinutesBetweenTry = 5; route.Save(); return(route); }
public ucRoute(int routeID) { InitializeComponent(); if (routeID > 0) { hMailServer.Routes routes = APICreator.Routes; _representedObject = routes.get_ItemByDBID(routeID); Marshal.ReleaseComObject(routes); } DirtyChecker.SubscribeToChange(this, OnContentChanged); new TabOrderManager(this).SetTabOrder(TabOrderManager.TabScheme.AcrossFirst); EnableDisable(); }
public void TestSenderAsLocalDomainSendToExternal() { hMailServer.Route route = SMTPClientTests.AddRoutePointingAtLocalhost(1, 250, false); route.TreatSenderAsLocalDomain = true; route.Save(); hMailServer.SecurityRange range = SingletonProvider <Utilities> .Instance.GetApp().Settings.SecurityRanges.get_ItemByName("My computer"); range.RequireSMTPAuthLocalToExternal = true; range.Save(); SMTPClientSimulator oSMTP = new SMTPClientSimulator(); string result; Assert.IsFalse(oSMTP.Send("*****@*****.**", "*****@*****.**", "Mail 1", "Mail 1", out result)); Assert.IsTrue(result.Contains("530 SMTP authentication is required.")); }
public bool SaveData() { if (_representedObject == null) { hMailServer.Settings settings = APICreator.Application.Settings; hMailServer.Routes routes = settings.Routes; _representedObject = routes.Add(); Marshal.ReleaseComObject(settings); Marshal.ReleaseComObject(routes); } _representedObject.DomainName = textDomainName.Text; _representedObject.Description = textDescription.Text; _representedObject.TargetSMTPHost = textTargetSMTPHost.Text; _representedObject.TargetSMTPPort = textTargetSMTPPort.Number; _representedObject.ConnectionSecurity = (eConnectionSecurity)comboConnectionSecurity.SelectedValue; _representedObject.TreatSenderAsLocalDomain = radioTreatSenderAsLocalDomain.Checked; _representedObject.TreatRecipientAsLocalDomain = radioTreatRecipientAsLocalDomain.Checked; _representedObject.NumberOfTries = textNumberOfTries.Number; _representedObject.MinutesBetweenTry = textNumberOfMinutesBetween.Number; _representedObject.RelayerRequiresAuth = checkServerRequiresAuth.Checked; _representedObject.RelayerAuthUsername = textUsername.Text; if (textPassword.Dirty) { _representedObject.SetRelayerAuthPassword(textPassword.Password); } _representedObject.AllAddresses = radioRouteForAll.Checked; _representedObject.Save(); // Set the object to clean. DirtyChecker.SetClean(this); Utility.RefreshNode(_representedObject.DomainName); return(true); }
public void TestUseCaseDeliveryFromPrimaryMXToBackupMX() { hMailServer.Route route = SMTPClientTests.AddRoutePointingAtLocalhost(1, 250, false); route.TreatRecipientAsLocalDomain = true; route.TreatSenderAsLocalDomain = false; route.Save(); hMailServer.Account account1 = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); SMTPClientSimulator oSMTP = new SMTPClientSimulator(); string result; Assert.IsTrue(oSMTP.Send("*****@*****.**", account1.Address, "Mail 1", "Mail 1", out result)); string text = POP3Simulator.AssertGetFirstMessageText(account1.Address, "test"); Assert.IsTrue(text.Contains("Mail 1")); }
internal hMailServer.Route AddRoutePointingAtLocalhostWithAuth(int numberOfTries, int port) { // Add a route pointing at localhost hMailServer.Settings oSettings = SingletonProvider <Utilities> .Instance.GetApp().Settings; hMailServer.Route route = oSettings.Routes.Add(); route.DomainName = "dummy-example.com"; route.TargetSMTPHost = "localhost"; route.TargetSMTPPort = port; route.NumberOfTries = numberOfTries; route.RelayerRequiresAuth = true; route.RelayerAuthUsername = GetUsername(); route.SetRelayerAuthPassword(GetPassword()); route.MinutesBetweenTry = 5; route.Save(); return(route); }
public void TestSenderAsExternalDomainSendToLocalAccountFail() { hMailServer.Route route = SMTPClientTests.AddRoutePointingAtLocalhost(1, 250, false); route.TreatSenderAsLocalDomain = false; route.Save(); hMailServer.SecurityRange range = SingletonProvider <Utilities> .Instance.GetApp().Settings.SecurityRanges.get_ItemByName("My computer"); range.RequireSMTPAuthExternalToLocal = true; range.Save(); hMailServer.Account account1 = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); SMTPClientSimulator oSMTP = new SMTPClientSimulator(); string result; Assert.IsFalse(oSMTP.Send("*****@*****.**", account1.Address, "Mail 1", "Mail 1", out result)); }
public void TestRoute() { hMailServer.Settings oSettings = SingletonProvider <Utilities> .Instance.GetApp().Settings; hMailServer.Route route = oSettings.Routes.Add(); route.DomainName = "myroute.com"; route.TargetSMTPHost = "somehost.com"; route.TargetSMTPPort = 25; route.Save(); if (route.ID == 0) { throw new Exception("Route not saved properly"); } oSettings.Routes.DeleteByDBID(route.ID); }
protected override void LoadList() { listObjects.Items.Clear(); hMailServer.Application app = APICreator.Application; hMailServer.Settings settings = app.Settings; hMailServer.Routes routes = settings.Routes; for (int i = 0; i < routes.Count; i++) { hMailServer.Route route = routes[i]; ListViewItem item = listObjects.Items.Add(route.DomainName); item.Tag = route.ID; Marshal.ReleaseComObject(route); } Marshal.ReleaseComObject(routes); Marshal.ReleaseComObject(settings); }
private void FillCombo() { comboAction.AddItem(EnumStrings.GetRuleActionString(eRuleActionType.eRADeleteEmail), eRuleActionType.eRADeleteEmail); comboAction.AddItem(EnumStrings.GetRuleActionString(eRuleActionType.eRAForwardEmail), eRuleActionType.eRAForwardEmail); comboAction.AddItem(EnumStrings.GetRuleActionString(eRuleActionType.eRAMoveToImapFolder), eRuleActionType.eRAMoveToImapFolder); comboAction.AddItem(EnumStrings.GetRuleActionString(eRuleActionType.eRAReply), eRuleActionType.eRAReply); comboAction.AddItem(EnumStrings.GetRuleActionString(eRuleActionType.eRARunScriptFunction), eRuleActionType.eRARunScriptFunction); comboAction.AddItem(EnumStrings.GetRuleActionString(eRuleActionType.eRASetHeaderValue), eRuleActionType.eRASetHeaderValue); comboAction.AddItem(EnumStrings.GetRuleActionString(eRuleActionType.eRAStopRuleProcessing), eRuleActionType.eRAStopRuleProcessing); comboAction.AddItem(EnumStrings.GetRuleActionString(eRuleActionType.eRACreateCopy), eRuleActionType.eRACreateCopy); if (_isAccountLevelRule == false) { comboAction.AddItem(EnumStrings.GetRuleActionString(eRuleActionType.eRABindToAddress), eRuleActionType.eRABindToAddress); comboAction.AddItem(EnumStrings.GetRuleActionString(eRuleActionType.eRASendUsingRoute), eRuleActionType.eRASendUsingRoute); } comboAction.SelectedIndex = 0; // Fill routes comboRouteName.AddItem("None", 0); hMailServer.Settings settings = APICreator.Application.Settings; hMailServer.Routes routes = settings.Routes; for (int i = 0; i < routes.Count; i++) { hMailServer.Route route = routes[i]; comboRouteName.AddItem(route.DomainName, route.ID); Marshal.ReleaseComObject(route); } comboRouteName.SelectedIndex = 0; Marshal.ReleaseComObject(routes); }
public void TestAuthFailurePasswordInBounce() { 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.AddRecipientResult(deliveryResults); server.SimulatedError = SimulatedErrorType.ForceAuthenticationFailure; server.StartListen(); // Add a route so we can connect to localhost. hMailServer.Route route = AddRoutePointingAtLocalhost(5, 250, false); route.RelayerRequiresAuth = true; route.RelayerAuthUsername = "******"; route.SetRelayerAuthPassword("MySecretPassword"); // 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 messageText = POP3Simulator.AssertGetFirstMessageText(_account.Address, "test"); Assert.IsFalse(messageText.Contains("MySecretPassword")); Assert.IsTrue(messageText.Contains("<Password removed>")); }
public bool SaveData() { if (_representedObject == null) { hMailServer.Settings settings = APICreator.Application.Settings; hMailServer.Routes routes = settings.Routes; _representedObject = routes.Add(); Marshal.ReleaseComObject(settings); Marshal.ReleaseComObject(routes); } _representedObject.DomainName = textDomainName.Text; _representedObject.Description = textDescription.Text; _representedObject.TargetSMTPHost = textTargetSMTPHost.Text; _representedObject.TargetSMTPPort = textTargetSMTPPort.Number; _representedObject.ConnectionSecurity = (eConnectionSecurity) comboConnectionSecurity.SelectedValue; _representedObject.TreatSenderAsLocalDomain = radioTreatSenderAsLocalDomain.Checked; _representedObject.TreatRecipientAsLocalDomain = radioTreatRecipientAsLocalDomain.Checked; _representedObject.NumberOfTries = textNumberOfTries.Number; _representedObject.MinutesBetweenTry = textNumberOfMinutesBetween.Number; _representedObject.RelayerRequiresAuth = checkServerRequiresAuth.Checked; _representedObject.RelayerAuthUsername = textUsername.Text; if (textPassword.Dirty) _representedObject.SetRelayerAuthPassword(textPassword.Password); _representedObject.AllAddresses = radioRouteForAll.Checked; _representedObject.Save(); // Set the object to clean. DirtyChecker.SetClean(this); Utility.RefreshNode(_representedObject.DomainName); return true; }