public void TestAntiVirusDisabled() { var messages = new List<string>(); string messageText = "From: [email protected]\r\n" + "To: [email protected]\r\n" + "Subject: Test\r\n" + "\r\n" + "Should be blocked by SPF."; messages.Add(messageText); int port = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages)) { pop3Server.StartListen(); Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); FetchAccount fa = CreateFetchAccount(account, port, false, false); fa.DownloadNow(); pop3Server.WaitForCompletion(); fa.Delete(); Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 1); Message message = account.IMAPFolders.get_ItemByName("INBOX").Messages[0]; Assert.IsFalse(message.get_Flag(eMessageFlag.eMFVirusScan)); } }
public void TestProcessLargeNumberOfMessages() { Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); var messages = new List<string>(); string message = "From: [email protected]\r\n" + "To: [email protected]\r\n" + "Subject: Test\r\n" + "\r\n" + "Hello!"; const int msgCount = 30000; for (int i = 0; i < msgCount; i++) messages.Add(message); int port = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages) {SecondsToWaitBeforeTerminate = 3600}) { pop3Server.StartListen(); 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.Save(); fa.DownloadNow(); Pop3ClientSimulator.AssertMessageCount("*****@*****.**", "test", msgCount, TimeSpan.FromMinutes(60)); pop3Server.WaitForCompletion(); fa.Delete(); } }
public void POP3ServerNOTSupportingStartTLS_StartTLSOptional() { var messages = new List<string>(); string message = "From: [email protected]\r\n" + "To: [email protected]\r\n" + "Subject: Test\r\n" + "\r\n" + "Hello!"; messages.Add(message); int port = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages, eConnectionSecurity.eCSNone)) { pop3Server.SetCertificate(SslSetup.GetCertificate()); pop3Server.StartListen(); LogHandler.DeleteCurrentDefaultLog(); Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); FetchAccount fa = account.FetchAccounts.Add(); fa.Enabled = true; fa.MinutesBetweenFetch = 10; fa.Name = "Test"; fa.Username = "******"; fa.Password = "******"; fa.ConnectionSecurity = eConnectionSecurity.eCSSTARTTLSOptional; fa.ServerAddress = "localhost"; fa.Port = port; fa.ProcessMIMERecipients = false; fa.Save(); fa.DownloadNow(); pop3Server.WaitForCompletion(); Pop3ClientSimulator.AssertMessageCount("*****@*****.**", "test", 1); fa.Delete(); } }
public void POP3ServerNotSupportingSSL() { var messages = new List<string>(); string message = "From: [email protected]\r\n" + "To: [email protected]\r\n" + "Subject: Test\r\n" + "\r\n" + "Hello!"; messages.Add(message); int port = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(2, port, messages)) { pop3Server.DisconnectImmediate = true; pop3Server.StartListen(); LogHandler.DeleteCurrentDefaultLog(); Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); FetchAccount fa = account.FetchAccounts.Add(); fa.Enabled = true; fa.MinutesBetweenFetch = 10; fa.Name = "Test"; fa.Username = "******"; fa.Password = "******"; fa.UseSSL = true; fa.ServerAddress = "localhost"; fa.Port = port; fa.ProcessMIMERecipients = false; fa.Save(); fa.DownloadNow(); string contentSoFar = ""; for (int i = 0; i <= 10; i++) { if (i == 5) Assert.Fail("No connection: " + contentSoFar); contentSoFar = LogHandler.ReadCurrentDefaultLog(); if (contentSoFar.Contains("TCPConnection - TLS/SSL handshake failed.")) break; Thread.Sleep(1000); } LogHandler.DeleteCurrentDefaultLog(); // try again. fa.DownloadNow(); contentSoFar = ""; for (int i = 0; i <= 10; i++) { if (i == 5) Assert.Fail("No connection: " + contentSoFar); contentSoFar = LogHandler.ReadCurrentDefaultLog(); if (contentSoFar.Contains("TCPConnection - TLS/SSL handshake failed.")) break; Thread.Sleep(1000); } pop3Server.WaitForCompletion(); fa.Delete(); } }
public void POP3ServerNOTSupportingStartTLS_StartTLSRequired() { var messages = new List<string>(); string message = "From: [email protected]\r\n" + "To: [email protected]\r\n" + "Subject: Test\r\n" + "\r\n" + "Hello!"; messages.Add(message); int port = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages, eConnectionSecurity.eCSNone)) { pop3Server.SetCertificate(SslSetup.GetCertificate()); pop3Server.StartListen(); LogHandler.DeleteCurrentDefaultLog(); Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); FetchAccount fa = account.FetchAccounts.Add(); fa.Enabled = true; fa.MinutesBetweenFetch = 10; fa.Name = "Test"; fa.Username = "******"; fa.Password = "******"; fa.ConnectionSecurity = eConnectionSecurity.eCSSTARTTLSRequired; fa.ServerAddress = "localhost"; fa.Port = port; fa.ProcessMIMERecipients = false; fa.Save(); fa.DownloadNow(); string expectedMessage = string.Format( "The download of messages from external account {0} failed. The external aAccount is configured to use STARTTLS connection security, but the POP3 server does not support it.", fa.Name); string contentSoFar = ""; for (int i = 0; i <= 10; i++) { if (i == 5) Assert.Fail("No connection: " + contentSoFar); contentSoFar = LogHandler.ReadCurrentDefaultLog(); if (contentSoFar.Contains(expectedMessage)) break; Thread.Sleep(1000); } pop3Server.WaitForCompletion(); fa.Delete(); } }
public void TestPOP3Client() { var messages = new List<string>(); string message = "From: [email protected]\r\n" + "To: [email protected]\r\n" + "Subject: Test\r\n" + "\r\n" + "Hello!"; messages.Add(message); int port = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages)) { pop3Server.StartListen(); Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); FetchAccount fa = account.FetchAccounts.Add(); fa.Enabled = true; fa.MinutesBetweenFetch = 10; fa.Name = "Test"; fa.Username = GetUsername(); fa.Password = GetPassword(); fa.UseSSL = false; fa.ServerAddress = "localhost"; fa.Port = port; fa.ProcessMIMERecipients = false; fa.Save(); fa.DownloadNow(); pop3Server.WaitForCompletion(); fa.Delete(); string downloadedMessage = Pop3ClientSimulator.AssertGetFirstMessageText(account.Address, "test"); Assert.IsTrue(downloadedMessage.Contains(message)); EnsureNoPassword(); } }
private void DownloadFromExternalAccount(Account account, FetchAccount fa) { if (!_backupMessages) return; // Download messages from the external account. var messages = new List<string>(); messages.Add("Subject: Message 1\r\n"); messages.Add("Subject: Message 2\r\n"); messages.Add("Subject: Message 3\r\n"); using (var pop3Server = new Pop3ServerSimulator(1, fa.Port, messages)) { pop3Server.StartListen(); fa.DownloadNow(); pop3Server.WaitForCompletion(); } CustomAsserts.AssertRecipientsInDeliveryQueue(0); Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 5); }
public void TestSpamProtectionPreTransmissionHELOPass() { _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"; _application.Settings.AntiSpam.CheckHostInHelo = true; _application.Settings.AntiSpam.CheckHostInHeloScore = 105; var messages = new List<string>(); string message = "Received: from mail.hmailserver.com (mail.hmailserver.com [" + TestSetup.GethMailServerCOMIPaddress() + "]) by mail.host.edu\r\n" + "From: [email protected]\r\n" + "To: [email protected]\r\n" + "Subject: Test\r\n" + "\r\n" + "Should not be blocked."; messages.Add(message); int port = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages)) { pop3Server.StartListen(); Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); 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 = 0; fa.UseAntiSpam = true; fa.Save(); fa.DownloadNow(); pop3Server.WaitForCompletion(); fa.Delete(); Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 1); } }
public void TestSpamProtectionNoTagging() { CustomAsserts.AssertSpamAssassinIsRunning(); _application.Settings.AntiSpam.SpamMarkThreshold = 5; _application.Settings.AntiSpam.SpamDeleteThreshold = 9999; _application.Settings.AntiSpam.MaximumMessageSize = 1024*1024; _application.Settings.AntiSpam.AddHeaderReason = false; _application.Settings.AntiSpam.AddHeaderSpam = false; _application.Settings.AntiSpam.PrependSubject = false; _application.Settings.AntiSpam.PrependSubjectText = "ThisIsSpam"; // Enable SpamAssassin _application.Settings.AntiSpam.SpamAssassinEnabled = true; _application.Settings.AntiSpam.SpamAssassinHost = "localhost"; _application.Settings.AntiSpam.SpamAssassinPort = 783; _application.Settings.AntiSpam.SpamAssassinMergeScore = true; _application.Settings.AntiSpam.SpamAssassinScore = 5; var messages = new List<string>(); string message = "From: [email protected]\r\n" + "To: [email protected]\r\n" + "Subject: Test\r\n" + "\r\n" + "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X"; messages.Add(message); int port = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages)) { pop3Server.StartListen(); Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); 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(); Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 1); } }
public void TestSpamProtectionDisabled() { _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"; _application.Settings.AntiSpam.UseSPF = true; _application.Settings.AntiSpam.UseSPFScore = 5; var messages = new List<string>(); string message = "From: [email protected]\r\n" + "To: [email protected]\r\n" + "Subject: Test\r\n" + "\r\n" + "Should be blocked by SPF."; messages.Add(message); int port = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages)) { pop3Server.StartListen(); Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); 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 = false; fa.Save(); fa.DownloadNow(); pop3Server.WaitForCompletion(); fa.Delete(); string downloadedMessage = Pop3ClientSimulator.AssertGetFirstMessageText(account.Address, "test"); Assert.IsFalse(downloadedMessage.Contains("X-hMailServer-Spam: YES")); } }
public void TestServerNotSupportingUIDL() { var 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" + "Hello!"; messages.Add(message); int port = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages)) { pop3Server.SupportsUIDL = false; pop3Server.StartListen(); Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); 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.Save(); fa.DownloadNow(); pop3Server.WaitForCompletion(); fa.Delete(); RetryHelper.TryAction(TimeSpan.FromSeconds(10), () => { string error = LogHandler.ReadCurrentDefaultLog(); Assert.IsTrue(error.Contains("-ERR unhandled command")); Assert.IsTrue(error.Contains("Completed retrieval of messages from external account.")); }); } }
public void TestFetchMessageWithValidFromAddress() { string message = string.Format("From: [email protected]\r\n" + "To: [email protected]\r\n" + "Subject: Test\r\n" + "\r\n" + "Hello!"); var messages = new List<string>() { message }; int port = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages)) { pop3Server.SendBufferMode = Pop3ServerSimulator.BufferMode.SingleBuffer; pop3Server.StartListen(); Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); 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.Save(); fa.DownloadNow(); pop3Server.WaitForCompletion(); LockHelper.WaitForUnlock(fa); fa.Delete(); Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 1); var log = LogHandler.ReadCurrentDefaultLog(); Assert.IsTrue(log.Contains("Delivering message from [email protected] to [email protected].")); } }
public void TestFetchMessagesWithVeryLongHeader() { var messages = new List<string>(); var toHeaderBuilder = new StringBuilder(); for (int i = 0; i < 10000; i++) { if (i > 0) toHeaderBuilder.Append("; "); toHeaderBuilder.AppendFormat("to-{0}@example.com", i); } for (int i = 0; i < 5; i++) { string message = string.Format("To: {1}\r\n" + "X-Dummy: {0}\r\n" + "Subject: Test\r\n" + "\r\n" + "Hello!", i, toHeaderBuilder); messages.Add(message); } int port = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages)) { pop3Server.SendBufferMode = Pop3ServerSimulator.BufferMode.SingleBuffer; pop3Server.StartListen(); Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); 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.Save(); fa.DownloadNow(); pop3Server.WaitForCompletion(); LockHelper.WaitForUnlock(fa); fa.Delete(); Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 5); string downloadedMessage = Pop3ClientSimulator.AssertGetFirstMessageText(account.Address, "test"); for (int i = 0; i < 5; i++) { if (downloadedMessage.Contains(messages[i])) return; } Assert.Fail("Downloaded messages did not match uploaded messages."); } }
public void TestDeliverToMIMERecipients() { var messages = new List<string>(); string message = "From: [email protected]\r\n" + "To: \"Test\" <*****@*****.**>, \"Test 2\" <*****@*****.**>\r\n" + "Subject: Test\r\n" + "\r\n" + "Hello!"; messages.Add(message); int port = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages)) { pop3Server.StartListen(); Account account1 = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); Account account2 = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); Account account3 = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); Account catchallAccount = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); _domain.Postmaster = catchallAccount.Address; _domain.Save(); FetchAccount fa = account1.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.Save(); fa.DownloadNow(); pop3Server.WaitForCompletion(); fa.Delete(); string downloadedMessage1 = Pop3ClientSimulator.AssertGetFirstMessageText(account2.Address, "test"); string downloadedMessage2 = Pop3ClientSimulator.AssertGetFirstMessageText(account3.Address, "test"); Pop3ClientSimulator.AssertMessageCount(account1.Address, "test", 0); Pop3ClientSimulator.AssertMessageCount(catchallAccount.Address, "test", 0); Assert.IsTrue(downloadedMessage1.Contains(message), downloadedMessage1); Assert.IsTrue(downloadedMessage2.Contains(message), downloadedMessage2); } }
public void TestDeliverToExternalMimeRecipientsEnabledRouteAsExternal() { var 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 = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages)) { pop3Server.StartListen(); // Add a route so we can connect to localhost. //Route route = SMTPClientTests.AddRoutePointingAtLocalhost(5, 250, false); //route.TreatSecurityAsLocalDomain = false; //route.Save(); Account userAccount = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); Account recipientAccount1 = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); Account catchallAccount = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); _domain.Postmaster = catchallAccount.Address; _domain.Save(); 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 = Pop3ClientSimulator.AssertGetFirstMessageText(recipientAccount1.Address, "test"); Assert.IsTrue(downloadedMessage1.Contains(message), downloadedMessage1); CustomAsserts.AssertRecipientsInDeliveryQueue(0, false); } }
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"; SURBLServer oSURBLServer = _application.Settings.AntiSpam.SURBLServers[0]; oSURBLServer.Active = true; oSURBLServer.Score = 5; oSURBLServer.Save(); var 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 = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages)) { pop3Server.StartListen(); Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); 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 = Pop3ClientSimulator.AssertGetFirstMessageText(account.Address, "test"); Assert.IsTrue(downloadedMessage.Contains("X-hMailServer-Spam: YES")); } }
public void TestOnExternalAccountDownload() { LogHandler.DeleteCurrentDefaultLog(); var messages = new List<string>(); messages.Add("From: [email protected]\r\n" + "To: [email protected]\r\n" + "Subject: Message 1\r\n" + "\r\n" + "Message 1!"); messages.Add("From: [email protected]\r\n" + "To: [email protected]\r\n" + "Subject: Message 2\r\n" + "\r\n" + "Message 2!"); messages.Add("From: [email protected]\r\n" + "To: [email protected]\r\n" + "Subject: Message 3\r\n" + "\r\n" + "Message 3!"); // The second message should be deleted after 5 days. string script = "Sub OnExternalAccountDownload(oFetchAccount, oMessage, sRemoteUID)" + Environment.NewLine + " EventLog.Write(\"UID: \" & sRemoteUID) " + Environment.NewLine + " EventLog.Write(\"FetchAccount: \" & oFetchAccount.Name) " + Environment.NewLine + " If Not oMessage Is Nothing Then " + Environment.NewLine + " EventLog.Write(\"From: \" & oMessage.FromAddress) " + Environment.NewLine + " EventLog.Write(\"Filename: \" & oMessage.FileName) " + Environment.NewLine + " Else " + Environment.NewLine + " EventLog.Write(\"Message details missing\") " + Environment.NewLine + " End If" + Environment.NewLine + " if sRemoteUID = \"UniqueID-" + messages[1].GetHashCode() + "\" Then " + Environment.NewLine + " Result.Value = 2 " + Environment.NewLine + " Result.Parameter = 5 " + Environment.NewLine + " End If " + Environment.NewLine + " End Sub"; Scripting scripting = _settings.Scripting; string file = scripting.CurrentScriptFile; File.WriteAllText(file, script); scripting.Enabled = true; scripting.Reload(); Account account = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); FetchAccount fa; int port = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages)) { pop3Server.StartListen(); fa = account.FetchAccounts.Add(); fa.Enabled = true; fa.MinutesBetweenFetch = 10; fa.Name = "TestFA"; fa.Username = "******"; fa.Password = "******"; fa.UseSSL = false; fa.ServerAddress = "localhost"; fa.Port = port; fa.ProcessMIMERecipients = false; fa.DaysToKeepMessages = -1; fa.Save(); fa.DownloadNow(); pop3Server.WaitForCompletion(); string eventLogFile = _settings.Logging.CurrentEventLog; string logContents = TestSetup.ReadExistingTextFile(eventLogFile); Assert.IsTrue(logContents.Contains("FetchAccount: " + fa.Name)); Assert.IsTrue(logContents.Contains("From: [email protected]")); Assert.IsTrue(logContents.Contains("From: [email protected]")); Assert.IsTrue(logContents.Contains("From: [email protected]")); string appLogContent = LogHandler.ReadCurrentDefaultLog(); Assert.IsTrue(pop3Server.DeletedMessages.Contains(1)); Assert.IsFalse(pop3Server.DeletedMessages.Contains(2)); Assert.IsTrue(pop3Server.DeletedMessages.Contains(3)); Assert.IsTrue(pop3Server.RetrievedMessages.Contains(1)); Assert.IsTrue(pop3Server.RetrievedMessages.Contains(2)); Assert.IsTrue(pop3Server.RetrievedMessages.Contains(3)); Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 3); } using (var pop3Server = new Pop3ServerSimulator(1, port, messages)) { pop3Server.StartListen(); // Download again... fa.DownloadNow(); pop3Server.WaitForCompletion(); // Make sure that no messages are deleted. Assert.AreEqual(0, pop3Server.DeletedMessages.Count); Assert.AreEqual(0, pop3Server.RetrievedMessages.Count); Pop3ClientSimulator.AssertMessageCount(account.Address, "test", 3); } }
public void TestDeliverToExternalMimeRecipientsEnabled() { var 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 = TestSetup.GetNextFreePort(); using (var pop3Server = new Pop3ServerSimulator(1, port, messages)) { pop3Server.StartListen(); var deliveryResults = new Dictionary<string, int>(); deliveryResults["*****@*****.**"] = 250; int smtpServerPort = TestSetup.GetNextFreePort(); using (var smtpServer = new SmtpServerSimulator(1, smtpServerPort)) { smtpServer.AddRecipientResult(deliveryResults); smtpServer.StartListen(); // Add a route so we can connect to localhost. Route route = TestSetup.AddRoutePointingAtLocalhost(1, smtpServerPort, false); route.TreatSecurityAsLocalDomain = true; route.Save(); Account account1 = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); Account account2 = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); Account catchallAccount = SingletonProvider<TestSetup>.Instance.AddAccount(_domain, "*****@*****.**", "test"); _domain.Postmaster = catchallAccount.Address; _domain.Save(); FetchAccount fa = account1.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 = Pop3ClientSimulator.AssertGetFirstMessageText(account2.Address, "test"); Pop3ClientSimulator.AssertMessageCount(account1.Address, "test", 0); Pop3ClientSimulator.AssertMessageCount(catchallAccount.Address, "test", 0); Assert.IsTrue(downloadedMessage1.Contains(message), downloadedMessage1); // Make sure the exernal recipient has received his copy. smtpServer.WaitForCompletion(); string messageData = smtpServer.MessageData; Assert.IsTrue(messageData.Contains(messageData), messageData); CustomAsserts.AssertRecipientsInDeliveryQueue(0, false); } } }