public void TestFolderDeletion() { // Create a test account // Fetch the default domain hMailServer.Account account1 = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); hMailServer.IMAPFolder folder = account1.IMAPFolders.Add("TestFolder1"); folder.Save(); IMAPSimulator simulator1 = new IMAPSimulator(); simulator1.ConnectAndLogon(account1.Address, "test"); string result = simulator1.List(); Assert.IsTrue(result.Contains(folder.Name)); simulator1.Disconnect(); // Delete the folder and confirm it's no longer listed. folder.Delete(); simulator1.ConnectAndLogon(account1.Address, "test"); result = simulator1.List(); Assert.IsFalse(result.Contains(folder.Name)); simulator1.Disconnect(); }
public void TestChangeRecentFlag() { hMailServer.Account oAccount = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); Assert.IsTrue(SMTPClientSimulator.StaticSend("*****@*****.**", oAccount.Address, "Test", "test")); POP3Simulator.AssertMessageCount(oAccount.Address, "test", 1); IMAPSimulator simulator = new IMAPSimulator(); simulator.ConnectAndLogon(oAccount.Address, "test"); string result = simulator.ExamineFolder("Inbox"); Assert.IsTrue(result.Contains("* 1 RECENT"), result); simulator.Close(); simulator.Disconnect(); simulator = new IMAPSimulator(); simulator.ConnectAndLogon(oAccount.Address, "test"); Assert.IsTrue(simulator.SelectFolder("Inbox", out result)); Assert.IsTrue(result.Contains("* 1 RECENT"), result); simulator.Close(); simulator.Disconnect(); simulator = new IMAPSimulator(); simulator.ConnectAndLogon(oAccount.Address, "test"); result = simulator.ExamineFolder("Inbox"); Assert.IsTrue(result.Contains("* 0 RECENT"), result); simulator.Close(); simulator.Disconnect(); }
public void TestIMAPServer() { Utilities.DeleteCurrentDefaultLog(); hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); for (int i = 0; i < 30; i++) { try { IMAPSimulator imapSim = new IMAPSimulator(true, 14300); imapSim.ConnectAndLogon(account.Address, "test"); Assert.IsTrue(imapSim.SelectFolder("Inbox"), "SelectInbox"); imapSim.CreateFolder("Test"); Assert.IsTrue(imapSim.SelectFolder("Test"), "SelectTest"); Assert.IsTrue(imapSim.Logout(), "Logout"); imapSim.Disconnect(); break; } catch (Exception) { if (i == 29) { throw; } } } }
public void TestPOP3TransactionSafety() { hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); Assert.IsTrue(SMTPClientSimulator.StaticSend(account.Address, account.Address, "Test", "TestBody")); POP3Simulator.AssertMessageCount(account.Address, "test", 1); POP3Simulator sim = new POP3Simulator(); sim.ConnectAndLogon(account.Address, "test"); // Now delete the message using an IMAP client. IMAPSimulator imapSimulator = new IMAPSimulator(); Assert.IsTrue(imapSimulator.ConnectAndLogon(account.Address, "test")); Assert.IsTrue(imapSimulator.SelectFolder("INBOX")); Assert.IsTrue(imapSimulator.SetDeletedFlag(1)); Assert.IsTrue(imapSimulator.Expunge()); Assert.AreEqual(0, imapSimulator.GetMessageCount("Inbox")); Assert.IsTrue(SMTPClientSimulator.StaticSend(account.Address, account.Address, "Test", "TestBody")); IMAPSimulator.AssertMessageCount(account.Address, "test", "Inbox", 1); // This deletion should not have any effect, since the POP3 connection is referencing an old message. sim.DELE(1); sim.QUIT(); Assert.AreEqual(1, imapSimulator.GetMessageCount("Inbox")); }
public void TestIMAPServerNormal() { IMAPSimulator sim = new IMAPSimulator(); sim.ConnectAndLogon(GetUsername(), GetPassword()); EnsureNoPassword(); }
public void TestBodyStructureWithNonLatinCharacter() { hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); string attachmentName = "本本本.zip"; string filename = Path.Combine(Path.GetTempPath(), attachmentName); File.WriteAllText(filename, "tjena moss"); hMailServer.Message message = new hMailServer.Message(); message.Charset = "utf-8"; message.AddRecipient("test", account.Address); message.From = "Test"; message.FromAddress = account.Address; message.Body = "hejsan"; message.Attachments.Add(filename); message.Save(); Utilities.AssertMessageExistsInFolder(account.IMAPFolders[0], 1); IMAPSimulator oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(account.Address, "test"); oSimulator.SelectFolder("INBOX"); string result = oSimulator.Fetch("1 BODYSTRUCTURE"); oSimulator.Disconnect(); // utf-8 representation of 本本本.zip: Assert.IsTrue(result.Contains("=?utf-8?B?5pys5pys5pys?=.zip")); }
public void TestSearchUTF8TEXT() { hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); string body = Utilities.GetResource("Messages.MessageContainingGreekSubject.txt"); SMTPClientSimulator.StaticSendRaw(account.Address, account.Address, body); POP3Simulator.AssertMessageCount(account.Address, "test", 1); IMAPSimulator oSimulator = new IMAPSimulator(); Assert.IsTrue(oSimulator.ConnectAndLogon(account.Address, "test")); Assert.IsTrue(oSimulator.SelectFolder("INBOX")); string result = oSimulator.Search("CHARSET UTF-8 ALL TEXT GRΣΣK"); Assert.AreEqual("1", result); result = oSimulator.Search("CHARSET UTF-8 ALL TEXT 標準語"); Assert.AreEqual("1", result); result = oSimulator.Search("CHARSET UTF-8 ALL TEXT GRΣΣK標準語"); Assert.AreEqual("1", result); result = oSimulator.Search("CHARSET UTF-8 ALL TEXT GRΣΣKWHAT標準語"); Assert.AreEqual("", result); }
public void TestExpunge() { hMailServer.Account oAccount = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); Assert.IsTrue(SMTPClientSimulator.StaticSend("*****@*****.**", oAccount.Address, "Test", "test")); POP3Simulator.AssertMessageCount(oAccount.Address, "test", 1); IMAPSimulator simulator = new IMAPSimulator(); simulator.ConnectAndLogon(oAccount.Address, "test"); simulator.SelectFolder("Inbox"); Assert.IsTrue(simulator.SetFlagOnMessage(1, true, @"\Deleted")); IMAPSimulator secondSimulator = new IMAPSimulator(); secondSimulator.ConnectAndLogon(oAccount.Address, "test"); string result = secondSimulator.ExamineFolder("INBOX"); Assert.IsTrue(result.Contains("1 EXISTS"), result); Assert.IsFalse(secondSimulator.Expunge()); simulator.SelectFolder("INBOX"); Assert.IsTrue(simulator.Expunge()); simulator.Close(); secondSimulator.Close(); }
public void TestImportOfMessageIntoOtherFolder() { string @messageText = "From: [email protected]\r\n" + "\r\n" + "Test\r\n"; hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); account.IMAPFolders.Add("Woho"); string domainPath = Path.Combine(_application.Settings.Directories.DataDirectory, "test.com"); string accountPath = Path.Combine(domainPath, "test"); Directory.CreateDirectory(accountPath); string fileName = Path.Combine(accountPath, "something.eml"); File.WriteAllText(fileName, messageText); Assert.IsTrue(_application.Utilities.ImportMessageFromFileToIMAPFolder(fileName, account.ID, "Woho")); POP3Simulator.AssertMessageCount("*****@*****.**", "test", 0); IMAPSimulator sim = new IMAPSimulator(); sim.ConnectAndLogon("*****@*****.**", "test"); Assert.AreEqual(1, sim.GetMessageCount("Woho")); sim.Disconnect(); }
private static IMAPSimulator ConnectAndLogon() { IMAPSimulator sim = new IMAPSimulator(); sim.ConnectAndLogon("*****@*****.**", "test"); return(sim); }
public void TestFetch() { hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); SMTPClientSimulator.StaticSend(account.Address, account.Address, "Test", "SampleBody1"); IMAPSimulator.AssertMessageCount(account.Address, "test", "Inbox", 1); SMTPClientSimulator.StaticSend(account.Address, account.Address, "Test", "SampleBody2"); IMAPSimulator.AssertMessageCount(account.Address, "test", "Inbox", 2); SMTPClientSimulator.StaticSend(account.Address, account.Address, "Test", "SampleBody3"); IMAPSimulator.AssertMessageCount(account.Address, "test", "Inbox", 3); IMAPSimulator sim = new IMAPSimulator(); sim.ConnectAndLogon(account.Address, "test"); sim.SelectFolder("INBOX"); string result = sim.Fetch("1 BODY[1]"); Assert.IsTrue(result.Contains("SampleBody1"), result); result = sim.Fetch("2 BODY[1]"); Assert.IsTrue(result.Contains("SampleBody2"), result); result = sim.Fetch("3 BODY[1]"); Assert.IsTrue(result.Contains("SampleBody3"), result); }
public void TestRetrievalOfMessageInDeletedFolderUsingIMAP() { 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); IMAPSimulator sim = new IMAPSimulator(); sim.ConnectAndLogon(account.Address, "test"); sim.SelectFolder("INBOX"); string result = sim.Fetch("1 BODY[1]"); Assert.IsTrue(result.Contains(deletedMessageText.Replace("%MACRO_FILE%", message.Filename))); Utilities.AssertReportedError(); }
public void TestRenameRootPublicFolder() { hMailServer.IMAPFolders folders = _application.Settings.PublicFolders; hMailServer.IMAPFolder folder = folders.Add("ShareA"); folder.Save(); hMailServer.IMAPFolderPermission permission = folder.Permissions.Add(); permission.PermissionType = hMailServer.eACLPermissionType.ePermissionTypeAnyone; permission.set_Permission(hMailServer.eACLPermission.ePermissionLookup, true); permission.set_Permission(hMailServer.eACLPermission.ePermissionRead, true); permission.set_Permission(hMailServer.eACLPermission.ePermissionDeleteMailbox, true); permission.Save(); hMailServer.IMAPFolder folder2 = folders.Add("ShareB"); folder2.Save(); hMailServer.IMAPFolderPermission permission2 = folder2.Permissions.Add(); permission2.PermissionType = hMailServer.eACLPermissionType.ePermissionTypeAnyone; permission2.set_Permission(hMailServer.eACLPermission.ePermissionLookup, true); permission2.set_Permission(hMailServer.eACLPermission.ePermissionRead, true); permission2.set_Permission(hMailServer.eACLPermission.ePermissionDeleteMailbox, true); permission2.Save(); hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); IMAPSimulator simulator1 = new IMAPSimulator(); simulator1.ConnectAndLogon(account.Address, "test"); Assert.IsTrue(simulator1.SelectFolder("#Public.ShareA")); Assert.IsTrue(simulator1.SelectFolder("#Public.ShareB")); Assert.IsTrue(simulator1.RenameFolder("#Public.ShareA", "#Public.ShareB.ShareA")); Assert.IsFalse(simulator1.SelectFolder("#Public.ShareA")); Assert.IsTrue(simulator1.SelectFolder("#Public.ShareB")); Assert.IsTrue(simulator1.SelectFolder("#Public.ShareB.ShareA")); }
public void TestChangeSeenFlag() { hMailServer.Account oAccount = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); Assert.IsTrue(SMTPClientSimulator.StaticSend("*****@*****.**", oAccount.Address, "Test", "test")); POP3Simulator.AssertMessageCount(oAccount.Address, "test", 1); IMAPSimulator simulator = new IMAPSimulator(); simulator.ConnectAndLogon(oAccount.Address, "test"); simulator.ExamineFolder("Inbox"); string flags = simulator.GetFlags(1); string body = simulator.Fetch("1 RFC822"); string flagsAfter = simulator.GetFlags(1); simulator.Close(); simulator.Disconnect(); Assert.AreEqual(flags, flagsAfter); IMAPSimulator secondSimulator = new IMAPSimulator(); secondSimulator.ConnectAndLogon(oAccount.Address, "test"); secondSimulator.SelectFolder("Inbox"); string secondFlags = secondSimulator.GetFlags(1); string secondBody = secondSimulator.Fetch("1 RFC822"); string secondFlagsAfter = secondSimulator.GetFlags(1); secondSimulator.Close(); secondSimulator.Disconnect(); Assert.AreNotEqual(secondFlags, secondFlagsAfter); }
public void TestChangeFlags() { hMailServer.Account oAccount = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); Assert.IsTrue(SMTPClientSimulator.StaticSend("*****@*****.**", oAccount.Address, "Test", "test")); POP3Simulator.AssertMessageCount(oAccount.Address, "test", 1); IMAPSimulator simulator = new IMAPSimulator(); simulator.ConnectAndLogon(oAccount.Address, "test"); simulator.ExamineFolder("Inbox"); Assert.IsFalse(simulator.SetFlagOnMessage(1, true, @"\Deleted")); }
public void TestIMAPLogonFailure() { _settings.AutoBanOnLogonFailure = true; _settings.MaxInvalidLogonAttempts = 4; _settings.MaxInvalidLogonAttemptsWithin = 5; _settings.AutoBanMinutes = 3; hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); IMAPSimulator sim = new IMAPSimulator(); Assert.IsTrue(sim.ConnectAndLogon(account.Address, "test")); sim.Disconnect(); // confirm that we can retrieve welcome message. Assert.IsTrue(sim.GetWelcomeMessage().StartsWith("* OK")); // fail to log on 3 times. for (int i = 0; i < 4; i++) { string errorMessage; Assert.IsFalse(sim.ConnectAndLogon(account.Address, "testA", out errorMessage)); sim.Disconnect(); if (i == 3) { Assert.IsTrue(errorMessage.Contains("Too many invalid logon attempts.")); } } Assert.IsTrue(sim.GetWelcomeMessage().Length == 0); string logText = Utilities.ReadCurrentDefaultLog(); Assert.IsTrue(logText.Contains("Blocked either by IP range or by connection limit."), logText); }
public void TestSaveMessageWithScriptAndMoveMessageWithAccountRule() { _settings.Scripting.Enabled = true; _settings.Scripting.Reload(); hMailServer.Account testAccount = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "Test'*****@*****.**", "test"); IMAPSimulator sim = new IMAPSimulator(); Assert.IsTrue(sim.ConnectAndLogon(testAccount.Address, "test")); // First deliver two messages to the inbox. 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); Assert.IsTrue(sim.Status("INBOX", "UIDNEXT").Contains("UIDNEXT 2")); SMTPClientSimulator.StaticSend(testAccount.Address, testAccount.Address, "Test", "Test"); POP3Simulator.AssertMessageCount(testAccount.Address, "test", 2); Assert.IsTrue(sim.Status("INBOX", "UIDNEXT").Contains("UIDNEXT 3")); Assert.AreEqual(2, inboxFolder.CurrentUID); Assert.AreEqual(2, inboxFolder.Messages[1].UID); CreateMessageModificationRule(testAccount.Rules); CreateMoveRule(testAccount.Rules, "TestFolder"); // This message will be moved into the test folder. SMTPClientSimulator.StaticSend(testAccount.Address, testAccount.Address, "Test", "Test"); // Wait for the message to arrive. Utilities.AssertFolderExists(testAccount.IMAPFolders, "TestFolder"); hMailServer.IMAPFolder testFolder = testAccount.IMAPFolders.get_ItemByName("TestFolder"); Utilities.AssertMessageExistsInFolder(testFolder, 1); // The UID for the inbox should be the same as before. Assert.IsTrue(sim.Status("INBOX", "UIDNEXT").Contains("UIDNEXT 3")); // Since the message is placed in a new folder, it should receive a unique UID. Assert.IsTrue(sim.Status("TestFolder", "UIDNEXT").Contains("UIDNEXT 2")); Assert.AreEqual(1, testFolder.Messages.Count); Assert.AreEqual(1, testFolder.CurrentUID); Assert.AreEqual(1, testFolder.Messages[0].UID); }
public void TestSearchInvalidCharset() { hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); SMTPClientSimulator.StaticSend(account.Address, account.Address, "MySubject", "MyBody"); POP3Simulator.AssertMessageCount(account.Address, "test", 1); IMAPSimulator oSimulator = new IMAPSimulator(); Assert.IsTrue(oSimulator.ConnectAndLogon(account.Address, "test")); Assert.IsTrue(oSimulator.SelectFolder("INBOX")); string result = oSimulator.SendSingleCommand("A01 SEARCH CHARSET NONEXISTANT ALL SUBJECT MySubject"); Assert.AreEqual("A01 NO [BADCHARSET]\r\n", result); }
public void TestListWithReference() { hMailServer.Account oAccount = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); IMAPSimulator oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(oAccount.Address, "test"); oSimulator.CreateFolder("Main.Sub1.Sub2.Sub3"); oSimulator.CreateFolder("SomeOtherFolder"); oSimulator.Subscribe("Main"); oSimulator.Subscribe("Main.Sub1"); oSimulator.Subscribe("Main.Sub1.Sub2"); oSimulator.Subscribe("Main.Sub1.Sub2.Sub3"); oSimulator.Subscribe("SomeOtherFolder"); string response = oSimulator.List("Main", "*", true); Assert.IsFalse(response.Contains("INBOX")); Assert.IsFalse(response.Contains("SomeOtherFolder")); Assert.IsTrue(response.Contains("* LIST (\\HasChildren) \".\" \"Main.Sub1\"")); Assert.IsTrue(response.Contains("* LIST (\\HasChildren) \".\" \"Main.Sub1.Sub2\"")); Assert.IsTrue(response.Contains("* LIST (\\HasNoChildren) \".\" \"Main.Sub1.Sub2.Sub3\"")); response = oSimulator.List("Main.Sub1", "*", true); Assert.IsFalse(response.Contains("INBOX")); Assert.IsFalse(response.Contains("SomeOtherFolder")); Assert.IsTrue(response.Contains("* LIST (\\HasChildren) \".\" \"Main.Sub1.Sub2\"")); Assert.IsTrue(response.Contains("* LIST (\\HasNoChildren) \".\" \"Main.Sub1.Sub2.Sub3\"")); response = oSimulator.LSUB("Main", "*"); Assert.IsFalse(response.Contains("INBOX")); Assert.IsFalse(response.Contains("SomeOtherFolder")); Assert.IsTrue(response.Contains("* LSUB (\\HasChildren) \".\" \"Main.Sub1\"")); Assert.IsTrue(response.Contains("* LSUB (\\HasChildren) \".\" \"Main.Sub1.Sub2\"")); Assert.IsTrue(response.Contains("* LSUB (\\HasNoChildren) \".\" \"Main.Sub1.Sub2.Sub3\"")); response = oSimulator.LSUB("Main.Sub1", "*"); Assert.IsFalse(response.Contains("INBOX")); Assert.IsFalse(response.Contains("SomeOtherFolder")); Assert.IsTrue(response.Contains("* LSUB (\\HasChildren) \".\" \"Main.Sub1.Sub2\"")); Assert.IsTrue(response.Contains("* LSUB (\\HasNoChildren) \".\" \"Main.Sub1.Sub2.Sub3\"")); oSimulator.Disconnect(); }
public void TestRenameSubFolderToChildSub() { hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); IMAPSimulator oSimulator = new IMAPSimulator(); Assert.IsTrue(oSimulator.ConnectAndLogon(account.Address, "test")); Assert.IsTrue(oSimulator.CreateFolder("A.B")); string result; Assert.IsFalse(oSimulator.RenameFolder("A.B", "A.B.C", out result)); Assert.IsTrue(result.Contains("A folder cannot be moved into one of its subfolders.")); Assert.IsTrue(oSimulator.SelectFolder("A.B")); oSimulator.Disconnect(); }
public void Test() { IMAPSimulator sim = new IMAPSimulator(); sim.ConnectAndLogon("*****@*****.**", "test"); sim.SelectFolder("Inbox"); Stopwatch watch = new Stopwatch(); watch.Start(); string result = sim.SendSingleCommand("A282 SORT (SIZE) UTF-8"); watch.Stop(); long sortSizeTime = watch.ElapsedMilliseconds; watch.Reset(); watch.Start(); result = sim.SendSingleCommand("A282 SORT (FROM) UTF-8"); watch.Stop(); long sortFromTime = watch.ElapsedMilliseconds; watch.Reset(); watch.Start(); result = sim.SendSingleCommand("A282 SORT (FROM) UTF-8 1:15"); watch.Stop(); long sortFromTimeLimit15 = watch.ElapsedMilliseconds; watch.Reset(); watch.Start(); result = sim.SendSingleCommand("A282 SORT (DATE) UTF-8"); watch.Stop(); long sortDateTime = watch.ElapsedMilliseconds; watch.Reset(); System.Threading.Thread.Sleep(1); }
public void TestEmptyPassword() { hMailServer.Account account1 = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", ""); string message; POP3Simulator sim = new POP3Simulator(); Assert.IsFalse(sim.ConnectAndLogon(account1.Address, "", out message)); IMAPSimulator simIMAP = new IMAPSimulator(); Assert.IsFalse(simIMAP.ConnectAndLogon(account1.Address, "", out message)); Assert.AreEqual("A01 NO Invalid user name or password.\r\n", message); SMTPClientSimulator simSMTP = new SMTPClientSimulator(); Assert.IsFalse(simSMTP.ConnectAndLogon(25, "dGVzdEB0ZXN0LmNvbQ==", "", out message)); Assert.AreEqual("535 Authentication failed. Restarting authentication process.\r\n", message); }
public void TestSearchUSASCII() { hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); SMTPClientSimulator.StaticSend(account.Address, account.Address, "MySubject", "MyBody"); POP3Simulator.AssertMessageCount(account.Address, "test", 1); IMAPSimulator oSimulator = new IMAPSimulator(); Assert.IsTrue(oSimulator.ConnectAndLogon(account.Address, "test")); Assert.IsTrue(oSimulator.SelectFolder("INBOX")); string result = oSimulator.Search("CHARSET US-ASCII ALL SUBJECT MySubject"); Assert.AreEqual("1", result); result = oSimulator.Search("CHARSET US-ASCII ALL SUBJECT MySubjact"); Assert.AreEqual("", result); }
public void TestListWithReferenceTestCase2() { hMailServer.Account oAccount = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); IMAPSimulator oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(oAccount.Address, "test"); oSimulator.CreateFolder("INBOX.MyApp.SubFolder1"); oSimulator.CreateFolder("INBOX.MyApp.SubFolder2"); oSimulator.CreateFolder("INBOX.SomeOtherFolder"); string response = oSimulator.List("INBOX.MyApp", "%.%", true); Assert.IsFalse(response.Contains("\"INBOX.MyApp\"")); Assert.IsFalse(response.Contains("\"INBOX.SomeOtherFolder\"")); Assert.IsTrue(response.Contains("* LIST (\\HasNoChildren) \".\" \"INBOX.MyApp.SubFolder1\"")); Assert.IsTrue(response.Contains("* LIST (\\HasNoChildren) \".\" \"INBOX.MyApp.SubFolder2\"")); oSimulator.Disconnect(); }
public void TestFetchInvalid() { hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); SMTPClientSimulator.StaticSend(account.Address, account.Address, "Test", "SampleBody1"); SMTPClientSimulator.StaticSend(account.Address, account.Address, "Test", "SampleBody2"); SMTPClientSimulator.StaticSend(account.Address, account.Address, "Test", "SampleBody3"); IMAPSimulator.AssertMessageCount(account.Address, "test", "Inbox", 3); IMAPSimulator sim = new IMAPSimulator(); sim.ConnectAndLogon(account.Address, "test"); sim.SelectFolder("INBOX"); string result = sim.Fetch("0 BODY[1]"); Assert.IsTrue(result.StartsWith("A01 OK FETCH completed")); result = sim.Fetch("-1 BODY[1]"); Assert.IsTrue(result.StartsWith("A01 BAD")); result = sim.Fetch("-100 BODY[1]"); Assert.IsTrue(result.StartsWith("A01 BAD")); }
public void TestLogonMailboxWithDeletedMessage() { hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); for (int i = 1; i <= 3; i++) { SMTPClientSimulator.StaticSend(account.Address, account.Address, "Test", "Line1\r\nLine2\r\nLine3\r\nLine4\r\nLine\r\n"); } // Mark the second message as deleted using IMAP. POP3Simulator.AssertMessageCount(account.Address, "test", 3); IMAPSimulator sim = new IMAPSimulator(); sim.ConnectAndLogon(account.Address, "test"); sim.SelectFolder("INBOX"); sim.SetDeletedFlag(2); sim.Disconnect(); // Now list messages and confirm that all are listed. POP3Simulator pop3Client = new POP3Simulator(); pop3Client.ConnectAndLogon(account.Address, "test"); string listResponse = pop3Client.LIST(); string uidlResponse = pop3Client.UIDL(); Assert.IsTrue(listResponse.Contains("\r\n1")); Assert.IsTrue(listResponse.Contains("\r\n2")); Assert.IsTrue(listResponse.Contains("\r\n3")); Assert.IsTrue(listResponse.Contains("\r\n.\r\n")); Assert.IsTrue(listResponse.Contains("3 messages")); Assert.IsTrue(uidlResponse.Contains("\r\n1")); Assert.IsTrue(uidlResponse.Contains("\r\n2")); Assert.IsTrue(uidlResponse.Contains("\r\n3")); Assert.IsTrue(uidlResponse.Contains("\r\n.\r\n")); Assert.IsTrue(uidlResponse.Contains("3 messages")); }
public void TestHierarchyDelimiterNamespaceResponse() { hMailServer.Application application = SingletonProvider <Utilities> .Instance.GetApp(); hMailServer.Settings settings = _settings; settings.IMAPHierarchyDelimiter = "\\"; string publicFolderName = _settings.IMAPPublicFolderName; hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); IMAPSimulator oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(account.Address, "test"); string result = oSimulator.Send("A01 NAMESPACE"); string correctNamespaceSetting = "* NAMESPACE ((\"\" \"\\\\\")) NIL ((\"" + publicFolderName + "\" \"\\\\\"))"; Assert.IsTrue(result.Contains(correctNamespaceSetting), result); oSimulator.Disconnect(); settings.IMAPHierarchyDelimiter = "."; oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(account.Address, "test"); result = oSimulator.Send("A01 NAMESPACE"); correctNamespaceSetting = "* NAMESPACE ((\"\" \".\")) NIL ((\"" + publicFolderName + "\" \".\"))"; Assert.IsTrue(result.Contains(correctNamespaceSetting), result); oSimulator.Disconnect(); settings.IMAPHierarchyDelimiter = "/"; oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(account.Address, "test"); result = oSimulator.Send("A01 NAMESPACE"); correctNamespaceSetting = "* NAMESPACE ((\"\" \"/\")) NIL ((\"" + publicFolderName + "\" \"/\"))"; Assert.IsTrue(result.Contains(correctNamespaceSetting), result); oSimulator.Disconnect(); }
public void TestUnseenResponseInSelect() { hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); SMTPClientSimulator.StaticSend(account.Address, account.Address, "Test", "TestMessage"); IMAPSimulator.AssertMessageCount(account.Address, "test", "Inbox", 1); IMAPSimulator sim = new IMAPSimulator(); Assert.IsTrue(sim.ConnectAndLogon(account.Address, "test")); Assert.IsTrue(sim.SelectFolder("Inbox")); Assert.IsTrue(sim.CreateFolder("Dummy")); Assert.IsTrue(sim.Copy(1, "Dummy")); string result = sim.SendSingleCommand("a01 select Dummy"); Assert.IsTrue(result.Contains("* 1 EXISTS\r\n* 1 RECENT"), result); string searchResponse = sim.SendSingleCommand("srch1 SEARCH ALL UNSEEN"); // We should have at least one message here. Assert.IsTrue(searchResponse.Contains("* SEARCH 1\r\n"), searchResponse); // Now fetch the body. string bodyText = sim.Fetch("1 BODY[TEXT]"); // Now the message is no longer unseen. Confirm this. searchResponse = sim.SendSingleCommand("srch1 SEARCH ALL UNSEEN"); Assert.IsTrue(searchResponse.Contains("* SEARCH\r\n"), searchResponse); // Close the messages to mark them as no longer recent. Assert.IsTrue(sim.Close()); result = sim.SendSingleCommand("a01 select Dummy"); Assert.IsTrue(result.Contains("* 1 EXISTS\r\n* 0 RECENT"), result); }
public void TestExpungeNotification() { _settings.IMAPIdleEnabled = true; hMailServer.Account oAccount = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); for (int i = 0; i < 5; i++ ) SMTPClientSimulator.StaticSend("*****@*****.**", oAccount.Address, "Test", "test"); POP3Simulator.AssertMessageCount(oAccount.Address, "test", 5); IMAPSimulator oSimulator1 = new IMAPSimulator(); IMAPSimulator oSimulator2 = new IMAPSimulator(); oSimulator1.ConnectAndLogon(oAccount.Address, "test"); oSimulator2.ConnectAndLogon(oAccount.Address, "test"); oSimulator1.SelectFolder("Inbox"); oSimulator2.SelectFolder("Inbox"); for (int i = 1; i <= 5; i++) { Assert.IsTrue(oSimulator1.SetFlagOnMessage(i, true, @"\Deleted")); } string noopResponse = oSimulator2.NOOP()+ oSimulator2.NOOP(); Assert.IsTrue(noopResponse.Contains(@"* 1 FETCH (FLAGS (\Deleted)") && noopResponse.Contains(@"* 1 FETCH (FLAGS (\Deleted)") && noopResponse.Contains(@"* 1 FETCH (FLAGS (\Deleted)") && noopResponse.Contains(@"* 1 FETCH (FLAGS (\Deleted)") && noopResponse.Contains(@"* 1 FETCH (FLAGS (\Deleted)"), noopResponse); bool result = oSimulator1.Expunge(); string expungeResult = oSimulator2.NOOP() + oSimulator2.NOOP(); Assert.IsTrue(expungeResult.Contains("* 1 EXPUNGE\r\n* 1 EXPUNGE\r\n* 1 EXPUNGE\r\n* 1 EXPUNGE\r\n* 1 EXPUNGE"), expungeResult); }
public void TestBodyStructureWithNonLatinCharacterInAttachmentHeader() { string @messageText = "From: \"Test\" <*****@*****.**>"+ "\r\n" + "To: \"Test\" <*****@*****.**>" + "\r\n" + "Subject: test" + "\r\n" + "MIME-Version: 1.0" + "\r\n" + "Content-Type: multipart/mixed;" + "\r\n" + " boundary=\"----=_NextPart_000_000C_01C9EEB2.08D2EC80\"" + "\r\n" + "X-Priority: 3" + "\r\n" + "" + "\r\n" + "This is a multi-part message in MIME format." + "\r\n" + "" + "\r\n" + "------=_NextPart_000_000C_01C9EEB2.08D2EC80" + "\r\n" + "Content-Type: text/plain;" + "\r\n" + " format=flowed;" + "\r\n" + " charset=\"iso-8859-1\";" + "\r\n" + " reply-type=original" + "\r\n" + "Content-Transfer-Encoding: 7bit" + "\r\n" + "" + "\r\n" + "" + "\r\n" + "------=_NextPart_000_000C_01C9EEB2.08D2EC80" + "\r\n" + "Content-Type: application/octet-stream;" + "\r\n" + " name=\"=?iso-8859-1?B?beT2LnppcA==?=\"" + "\r\n" + "Content-Transfer-Encoding: base64" + "\r\n" + "Content-Disposition: attachment;" + "\r\n" + " filename=\"=?iso-8859-1?B?beT2LnppcA==?=\"" + "\r\n" + "" + "\r\n" + "iVBORw0KGgoAAAANSUhEUgAAAqgAAAH4CAIAAAAJvIhhAAAAAXNSR0IArs4c6QAAAARnQU1BAACx" + "\r\n" + "uIDgj5MrSIAAAQIEzgkI/nP2KhMgQIAAgbiA4I+TK0iAAAECBM4JCP5z9ioTIECAAIG4wP8ChvJS" + "\r\n" + "wXUaKVoAAAAASUVORK5CYII=" + "\r\n" + "" + "\r\n" + "------=_NextPart_000_000C_01C9EEB2.08D2EC80--" + "\r\n"; hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); Assert.IsTrue(SMTPClientSimulator.StaticSendRaw(account.Address, account.Address, messageText)); Utilities.AssertMessageExistsInFolder(account.IMAPFolders[0], 1); IMAPSimulator oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(account.Address, "test"); oSimulator.SelectFolder("INBOX"); string result = oSimulator.Fetch("1 BODYSTRUCTURE"); oSimulator.Disconnect(); Assert.IsTrue(result.Contains("(\"NAME\" \"=?iso-8859-1?B?beT2LnppcA==?=\")")); Assert.IsTrue(result.Contains("(\"FILENAME\" \"=?iso-8859-1?B?beT2LnppcA==?=\")")); string fileName = account.IMAPFolders.get_ItemByName("INBOX").Messages[0].Attachments[0].Filename; Assert.AreEqual("mäö.zip", fileName); }
public void TestListWithReference() { hMailServer.Account oAccount = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); IMAPSimulator oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(oAccount.Address, "test"); oSimulator.CreateFolder("Main.Sub1.Sub2.Sub3"); oSimulator.CreateFolder("SomeOtherFolder"); oSimulator.Subscribe("Main"); oSimulator.Subscribe("Main.Sub1"); oSimulator.Subscribe("Main.Sub1.Sub2"); oSimulator.Subscribe("Main.Sub1.Sub2.Sub3"); oSimulator.Subscribe("SomeOtherFolder"); string response = oSimulator.List("Main", "*", true); Assert.IsFalse(response.Contains("INBOX")); Assert.IsFalse(response.Contains("SomeOtherFolder")); Assert.IsTrue(response.Contains("* LIST (\\HasChildren) \".\" \"Main.Sub1\"")); Assert.IsTrue(response.Contains("* LIST (\\HasChildren) \".\" \"Main.Sub1.Sub2\"")); Assert.IsTrue(response.Contains("* LIST (\\HasNoChildren) \".\" \"Main.Sub1.Sub2.Sub3\"")); response = oSimulator.List("Main.Sub1", "*", true); Assert.IsFalse(response.Contains("INBOX")); Assert.IsFalse(response.Contains("SomeOtherFolder")); Assert.IsTrue(response.Contains("* LIST (\\HasChildren) \".\" \"Main.Sub1.Sub2\"")); Assert.IsTrue(response.Contains("* LIST (\\HasNoChildren) \".\" \"Main.Sub1.Sub2.Sub3\"")); response = oSimulator.LSUB("Main", "*"); Assert.IsFalse(response.Contains("INBOX")); Assert.IsFalse(response.Contains("SomeOtherFolder")); Assert.IsTrue(response.Contains("* LSUB (\\HasChildren) \".\" \"Main.Sub1\"")); Assert.IsTrue(response.Contains("* LSUB (\\HasChildren) \".\" \"Main.Sub1.Sub2\"")); Assert.IsTrue(response.Contains("* LSUB (\\HasNoChildren) \".\" \"Main.Sub1.Sub2.Sub3\"")); response = oSimulator.LSUB("Main.Sub1", "*"); Assert.IsFalse(response.Contains("INBOX")); Assert.IsFalse(response.Contains("SomeOtherFolder")); Assert.IsTrue(response.Contains("* LSUB (\\HasChildren) \".\" \"Main.Sub1.Sub2\"")); Assert.IsTrue(response.Contains("* LSUB (\\HasNoChildren) \".\" \"Main.Sub1.Sub2.Sub3\"")); oSimulator.Disconnect(); }
public void TestRenameRootPublicFolder() { hMailServer.IMAPFolders folders = _application.Settings.PublicFolders; hMailServer.IMAPFolder folder = folders.Add("ShareA"); folder.Save(); hMailServer.IMAPFolderPermission permission = folder.Permissions.Add(); permission.PermissionType = hMailServer.eACLPermissionType.ePermissionTypeAnyone; permission.set_Permission(hMailServer.eACLPermission.ePermissionLookup, true); permission.set_Permission(hMailServer.eACLPermission.ePermissionRead, true); permission.set_Permission(hMailServer.eACLPermission.ePermissionDeleteMailbox, true); permission.Save(); hMailServer.IMAPFolder folder2 = folders.Add("ShareB"); folder2.Save(); hMailServer.IMAPFolderPermission permission2 = folder2.Permissions.Add(); permission2.PermissionType = hMailServer.eACLPermissionType.ePermissionTypeAnyone; permission2.set_Permission(hMailServer.eACLPermission.ePermissionLookup, true); permission2.set_Permission(hMailServer.eACLPermission.ePermissionRead, true); permission2.set_Permission(hMailServer.eACLPermission.ePermissionDeleteMailbox, true); permission2.Save(); hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); IMAPSimulator simulator1 = new IMAPSimulator(); simulator1.ConnectAndLogon(account.Address, "test"); Assert.IsTrue(simulator1.SelectFolder("#Public.ShareA")); Assert.IsTrue(simulator1.SelectFolder("#Public.ShareB")); Assert.IsTrue(simulator1.RenameFolder("#Public.ShareA", "#Public.ShareB.ShareA")); Assert.IsFalse(simulator1.SelectFolder("#Public.ShareA")); Assert.IsTrue(simulator1.SelectFolder("#Public.ShareB")); Assert.IsTrue(simulator1.SelectFolder("#Public.ShareB.ShareA")); }
public void TestPublicFolderUpdateNotification() { hMailServer.IMAPFolders folders = _application.Settings.PublicFolders; hMailServer.IMAPFolder folder = folders.Add("Share"); folder.Save(); hMailServer.IMAPFolderPermission permission = folder.Permissions.Add(); permission.PermissionType = hMailServer.eACLPermissionType.ePermissionTypeAnyone; permission.set_Permission(hMailServer.eACLPermission.ePermissionLookup, true); permission.set_Permission(hMailServer.eACLPermission.ePermissionRead, true); permission.set_Permission(hMailServer.eACLPermission.ePermissionWriteOthers, true); permission.set_Permission(hMailServer.eACLPermission.ePermissionWriteSeen, true); permission.set_Permission(hMailServer.eACLPermission.ePermissionWriteDeleted, true); permission.set_Permission(hMailServer.eACLPermission.ePermissionInsert, true); permission.Save(); hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); SMTPClientSimulator.StaticSend(account.Address, account.Address, "TestSubject", "TestBody"); IMAPSimulator.AssertMessageCount(account.Address, "test", "Inbox", 1); IMAPSimulator simulator1 = new IMAPSimulator(); IMAPSimulator simulator2 = new IMAPSimulator(); simulator1.ConnectAndLogon(account.Address, "test"); simulator2.ConnectAndLogon(account.Address, "test"); simulator1.SelectFolder("Inbox"); simulator2.SelectFolder("Inbox"); Assert.IsTrue(simulator1.Copy(1, "#Public.Share")); simulator1.SelectFolder("#Public.Share"); simulator2.SelectFolder("#Public.Share"); string result = simulator2.NOOP() + simulator2.NOOP(); Assert.IsFalse(result.Contains("Deleted")); Assert.IsFalse(result.Contains("Seen")); simulator1.SetDeletedFlag(1); simulator1.SetSeenFlag(1); result = simulator2.NOOP() + simulator2.NOOP(); Assert.IsTrue(result.Contains("Deleted")); Assert.IsTrue(result.Contains("Seen")); simulator1.Disconnect(); simulator2.Disconnect(); }
public void TestSearchInvalidCharset() { hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); SMTPClientSimulator.StaticSend(account.Address, account.Address, "MySubject", "MyBody"); POP3Simulator.AssertMessageCount(account.Address, "test", 1); IMAPSimulator oSimulator = new IMAPSimulator(); Assert.IsTrue(oSimulator.ConnectAndLogon(account.Address, "test")); Assert.IsTrue(oSimulator.SelectFolder("INBOX")); string result = oSimulator.SendSingleCommand("A01 SEARCH CHARSET NONEXISTANT ALL SUBJECT MySubject"); Assert.AreEqual("A01 NO [BADCHARSET]\r\n", result); }
public void TestSearchUTF8TEXT() { hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); string body = Utilities.GetResource("Messages.MessageContainingGreekSubject.txt"); SMTPClientSimulator.StaticSendRaw(account.Address, account.Address, body); POP3Simulator.AssertMessageCount(account.Address, "test", 1); IMAPSimulator oSimulator = new IMAPSimulator(); Assert.IsTrue(oSimulator.ConnectAndLogon(account.Address, "test")); Assert.IsTrue(oSimulator.SelectFolder("INBOX")); string result = oSimulator.Search("CHARSET UTF-8 ALL TEXT GRΣΣK"); Assert.AreEqual("1", result); result = oSimulator.Search("CHARSET UTF-8 ALL TEXT 標準語"); Assert.AreEqual("1", result); result = oSimulator.Search("CHARSET UTF-8 ALL TEXT GRΣΣK標準語"); Assert.AreEqual("1", result); result = oSimulator.Search("CHARSET UTF-8 ALL TEXT GRΣΣKWHAT標準語"); Assert.AreEqual("", result); }
public void TestSearchUSASCII() { hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); SMTPClientSimulator.StaticSend(account.Address, account.Address, "MySubject", "MyBody"); POP3Simulator.AssertMessageCount(account.Address, "test", 1); IMAPSimulator oSimulator = new IMAPSimulator(); Assert.IsTrue(oSimulator.ConnectAndLogon(account.Address, "test")); Assert.IsTrue(oSimulator.SelectFolder("INBOX")); string result = oSimulator.Search("CHARSET US-ASCII ALL SUBJECT MySubject"); Assert.AreEqual("1", result); result = oSimulator.Search("CHARSET US-ASCII ALL SUBJECT MySubjact"); Assert.AreEqual("", result); }
public void TestExpunge() { hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); for (int i = 0; i < 3; i++ ) SMTPClientSimulator.StaticSend("*****@*****.**", account.Address, "Test", "test"); POP3Simulator.AssertMessageCount(account.Address, "test", 3); IMAPSimulator simulator = new IMAPSimulator(); Assert.IsTrue(simulator.ConnectAndLogon(account.Address, "test")); Assert.IsTrue(simulator.SelectFolder("Inbox")); Assert.IsTrue(simulator.SetFlagOnMessage(1, true, @"\Deleted")); Assert.IsTrue(simulator.SetFlagOnMessage(3, true, @"\Deleted")); string result; Assert.IsTrue(simulator.Expunge(out result)); // Messages 1 and 2 should be deleted. 2, because when the first message // is deleted, the index of the message which was originally 3, is now 2. Assert.IsTrue(result.Contains("* 1 EXPUNGE\r\n* 2 EXPUNGE")); }
public void TestBasics() { // Fetch the default domain // Add an account hMailServer.Account oAccount = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); // Add a rule to this account. SingletonProvider<Utilities>.Instance.AddSpamRule(oAccount); SingletonProvider<Utilities>.Instance.AddCorporateRule(oAccount); SingletonProvider<Utilities>.Instance.AddExactMatchRule(oAccount); SMTPClientSimulator oSMTP = new SMTPClientSimulator(); // Spam folder oSMTP.Send("*****@*****.**", "*****@*****.**", "**SPAM** INBOX->SPAM", "Detta ska hamna i mappen Inbox\\Spam"); // Corporate folder oSMTP.Send("*****@*****.**", "*****@*****.**", "**CORPORATE** INBOX->CORPORATE", "Detta ska hamna i mappen Inbox\\Corporate"); oSMTP.Send("*****@*****.**", "*****@*****.**", "CORPORATE EXACT MATCH", "Detta ska hamna i mappen Inbox\\Corporate"); // Inbox folder oSMTP.Send("*****@*****.**", "*****@*****.**", "**CORPORATE EXACT MATCH**", "Detta ska hamna i mappen Inbox"); oSMTP.Send("*****@*****.**", "*****@*****.**", "INBOX", "Detta ska hamna i mappen Inbox"); oSMTP.Send("*****@*****.**", "*****@*****.**", "INBOX", "Detta ska hamna i mappen Inbox"); oSMTP.Send("*****@*****.**", "*****@*****.**", "INBOX", "Detta ska hamna i mappen Inbox"); IMAPSimulator.AssertMessageCount("*****@*****.**", "test", "Inbox.Spam", 1); IMAPSimulator.AssertMessageCount("*****@*****.**", "test", "Inbox.Corporate", 2); IMAPSimulator.AssertMessageCount("*****@*****.**", "test", "Inbox", 4); // Test move to imap with mail with multiple recipients. hMailServer.Account oAccount1 = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); hMailServer.Account oAccount2 = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); SingletonProvider<Utilities>.Instance.AddSpamRule(oAccount1); // Send email to both recipients List<string> lstRecipients = new List<string>(); lstRecipients.Add("*****@*****.**"); lstRecipients.Add("*****@*****.**"); string sBody = "Test of sending same email to multiple accounts."; oSMTP.Send(oAccount1.Address, lstRecipients, "**SPAM** INBOX->SPAM", sBody); IMAPSimulator.AssertMessageCount(oAccount1.Address, "test", "Inbox.Spam", 1); IMAPSimulator.AssertMessageCount(oAccount2.Address, "test", "Inbox", 1); IMAPSimulator sim = new IMAPSimulator(); sim.ConnectAndLogon(oAccount2.Address, "test"); Assert.IsFalse(sim.SelectFolder("Inbox.Spam")); }
public void TestImportOfMessageIntoOtherFolder() { string @messageText = "From: [email protected]\r\n" + "\r\n" + "Test\r\n"; hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); account.IMAPFolders.Add("Woho"); string domainPath = Path.Combine(_application.Settings.Directories.DataDirectory, "test.com"); string accountPath = Path.Combine(domainPath, "test"); Directory.CreateDirectory(accountPath); string fileName = Path.Combine(accountPath, "something.eml"); File.WriteAllText(fileName, messageText); Assert.IsTrue(_application.Utilities.ImportMessageFromFileToIMAPFolder(fileName, account.ID, "Woho")); POP3Simulator.AssertMessageCount("*****@*****.**", "test", 0); IMAPSimulator sim = new IMAPSimulator(); sim.ConnectAndLogon("*****@*****.**", "test"); Assert.AreEqual(1, sim.GetMessageCount("Woho")); sim.Disconnect(); }
public void TestRecentRemovedOnMailboxClose() { hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); SMTPClientSimulator.StaticSend(account.Address, account.Address, "Test", "TestMessage"); IMAPSimulator.AssertMessageCount(account.Address, "test", "Inbox", 1); IMAPSimulator sim = new IMAPSimulator(); Assert.IsTrue(sim.ConnectAndLogon(account.Address, "test")); Assert.IsTrue(sim.SelectFolder("Inbox")); Assert.IsTrue(sim.CreateFolder("Dummy")); Assert.IsTrue(sim.Copy(1, "Dummy")); string result = sim.SendSingleCommand("a01 select Dummy"); Assert.IsTrue(result.Contains("* 1 EXISTS\r\n* 1 RECENT"), result); Assert.IsTrue(sim.Logout()); sim = new IMAPSimulator(); Assert.IsTrue(sim.ConnectAndLogon(account.Address, "test")); result = sim.SendSingleCommand("a01 select Dummy"); Assert.IsFalse(result.Contains("* 1 EXISTS\r\n* 1 RECENT"), result); Assert.IsTrue(sim.Logout()); }
public void TestCopyMessage() { hMailServer.Application app = SingletonProvider <Utilities> .Instance.GetApp(); hMailServer.Utilities utilities = app.Utilities; hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test"); // Create a new folder. hMailServer.IMAPFolder folder = account.IMAPFolders.get_ItemByName("INBOX"); folder.Save(); hMailServer.IMAPFolder someOtherFolder = account.IMAPFolders.Add("SomeOtherFolder"); for (int i = 0; i < 3; i++) { hMailServer.Message message = folder.Messages.Add(); message.set_Flag(hMailServer.eMessageFlag.eMFSeen, true); message.Save(); message.Copy(someOtherFolder.ID); } SMTPClientSimulator.StaticSend("*****@*****.**", account.Address, "Test", "Test"); // Copy back to inbox. for (int i = 0; i < 3; i++) { hMailServer.Message message = someOtherFolder.Messages[i]; message.Copy(folder.ID); } POP3Simulator.AssertMessageCount(account.Address, "test", 7); IMAPSimulator sim = new IMAPSimulator(); sim.ConnectAndLogon(account.Address, "test"); sim.SelectFolder("Inbox"); string response = sim.Fetch("1:7 UID"); string[] lines = Microsoft.VisualBasic.Strings.Split(response, Environment.NewLine, -1, Microsoft.VisualBasic.CompareMethod.Text); List <string> uids = new List <string>(); foreach (string line in lines) { int paraPos = line.IndexOf("("); int paraEndPos = line.IndexOf(")"); if (paraPos < 0 || paraEndPos < 0) { continue; } string paraContent = line.Substring(paraPos + 1, paraEndPos - paraPos - 1); if (!uids.Contains(paraContent)) { uids.Add(paraContent); } } Assert.AreEqual(7, uids.Count); // Make sure the UIDS are sorted properly by creating a copy, sort the copy // and then compare to original. List <string> copy = new List <string>(); copy.InsertRange(0, uids); copy.Sort(); Assert.AreEqual(copy, uids); }
public void TestIMAPServerNormal() { IMAPSimulator sim = new IMAPSimulator(); sim.ConnectAndLogon(GetUsername(), GetPassword()); EnsureNoPassword(); }
public void TestFolderUpdateNotification() { hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); SMTPClientSimulator.StaticSend(account.Address, account.Address, "TestSubject", "TestBody"); IMAPSimulator.AssertMessageCount(account.Address, "test", "Inbox", 1); IMAPSimulator simulator1 = new IMAPSimulator(); IMAPSimulator simulator2 = new IMAPSimulator(); simulator1.ConnectAndLogon(account.Address, "test"); simulator2.ConnectAndLogon(account.Address, "test"); simulator1.SelectFolder("Inbox"); simulator2.SelectFolder("Inbox"); string result = simulator2.NOOP() + simulator2.NOOP(); Assert.IsFalse(result.Contains("Deleted")); Assert.IsFalse(result.Contains("Seen")); simulator1.SetDeletedFlag(1); simulator1.SetSeenFlag(1); result = simulator2.NOOP() + simulator2.NOOP(); Assert.IsTrue(result.Contains("Deleted")); Assert.IsTrue(result.Contains("Seen")); simulator1.Disconnect(); simulator2.Disconnect(); }
public void TestListWithReferenceTestCase2() { hMailServer.Account oAccount = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); IMAPSimulator oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(oAccount.Address, "test"); oSimulator.CreateFolder("INBOX.MyApp.SubFolder1"); oSimulator.CreateFolder("INBOX.MyApp.SubFolder2"); oSimulator.CreateFolder("INBOX.SomeOtherFolder"); string response = oSimulator.List("INBOX.MyApp", "%.%", true); Assert.IsFalse(response.Contains("\"INBOX.MyApp\"")); Assert.IsFalse(response.Contains("\"INBOX.SomeOtherFolder\"")); Assert.IsTrue(response.Contains("* LIST (\\HasNoChildren) \".\" \"INBOX.MyApp.SubFolder1\"")); Assert.IsTrue(response.Contains("* LIST (\\HasNoChildren) \".\" \"INBOX.MyApp.SubFolder2\"")); oSimulator.Disconnect(); }
public void TestBodyStructureWithNonLatinCharacterSingleLineEncoded() { string @messageText = "Message-ID: <1d11306c5648497247447e1073c3b0e2.squirrel@www.*******.**>\r\n" + "Date: Fri, 29 May 2009 11:53:03 +0200\r\n" + "Subject: attachment's name test\r\n" + "From: [email protected]\r\n" + "To: [email protected]\r\n" + "User-Agent: SquirrelMail/1.4.19\r\n" + "MIME-Version: 1.0\r\n" + "Content-Type: multipart/mixed;boundary=\"----=_20090529115303_60479\"\r\n" + "X-Priority: 3 (Normal)\r\n" + "Importance: Normal\r\n" + "\r\n" + "------=_20090529115303_60479\r\n" + "Content-Type: text/plain; charset=\"iso-8859-2\"\r\n" + "Content-Transfer-Encoding: 8bit\r\n" + "\r\n" + "test.±æê³ñ󶼿.txt\r\n" + "------=_20090529115303_60479\r\n" + "Content-Type: text/plain; name=\r\n" + " =?iso-8859-2?Q?test.=B1=E6=EA=B3=F1=F3=B6=BC=BF.txt?=\r\n" + "Content-Transfer-Encoding: 8bit\r\n" + "Content-Disposition: attachment; filename=\"\r\n" + " =?iso-8859-2?Q?test.=B1=E6=EA=B3=F1=F3=B6=BC=BF.txt?=\"\r\n" + "\r\n" + "1234\r\n" + "------=_20090529115303_60479--\r\n"; hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); Assert.IsTrue(SMTPClientSimulator.StaticSendRaw(account.Address, account.Address, messageText)); Utilities.AssertMessageExistsInFolder(account.IMAPFolders[0], 1); IMAPSimulator oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(account.Address, "test"); oSimulator.SelectFolder("INBOX"); string result = oSimulator.Fetch("1 BODYSTRUCTURE"); oSimulator.Disconnect(); Assert.IsTrue(result.Contains("(\"NAME\" \"=?iso-8859-2?Q?test.=B1=E6=EA=B3=F1=F3=B6=BC=BF.txt?=\")")); Assert.IsTrue(result.Contains("(\"FILENAME\" \"=?iso-8859-2?Q?test.=B1=E6=EA=B3=F1=F3=B6=BC=BF.txt?=\")")); }
public void TestRenameSubFolderToMatchingName() { hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); IMAPSimulator oSimulator = new IMAPSimulator(); Assert.IsTrue(oSimulator.ConnectAndLogon(account.Address, "test")); Assert.IsTrue(oSimulator.CreateFolder("Folder1")); Assert.IsTrue(oSimulator.SelectFolder("Folder1")); string result = string.Empty; Assert.IsFalse(oSimulator.RenameFolder("Folder1", "Folder1.Sub1", out result)); Assert.IsTrue(result.Contains("A folder cannot be moved into one of its subfolders.")); Assert.IsTrue(oSimulator.SelectFolder("Folder1")); result = string.Empty; Assert.IsTrue(oSimulator.RenameFolder("Folder1", "Folder1Test", out result)); Assert.IsTrue(oSimulator.SelectFolder("Folder1Test")); oSimulator.Disconnect(); }
public void TestFolderExpungeNotification() { hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); SMTPClientSimulator.StaticSend(account.Address, account.Address, "TestSubject", "TestBody"); IMAPSimulator.AssertMessageCount(account.Address, "test", "Inbox", 1); IMAPSimulator simulator1 = new IMAPSimulator(); IMAPSimulator simulator2 = new IMAPSimulator(); simulator1.ConnectAndLogon(account.Address, "test"); simulator2.ConnectAndLogon(account.Address, "test"); simulator1.SelectFolder("Inbox"); simulator2.SelectFolder("Inbox"); string result = simulator2.NOOP(); Assert.IsFalse(result.Contains("Deleted")); Assert.IsFalse(result.Contains("Seen")); simulator1.SetDeletedFlag(1); simulator1.Expunge(); // the result may (should) come after the first NOOP response stream so do noop twice. result = simulator2.NOOP() + simulator2.NOOP(); Assert.IsTrue(result.Contains("* 1 EXPUNGE")); simulator1.Disconnect(); simulator2.Disconnect(); }
public void TestHierarchyDelimiterNamespaceResponse() { hMailServer.Application application = SingletonProvider<Utilities>.Instance.GetApp(); hMailServer.Settings settings = _settings; settings.IMAPHierarchyDelimiter = "\\"; string publicFolderName = _settings.IMAPPublicFolderName; hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); IMAPSimulator oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(account.Address, "test"); string result = oSimulator.Send("A01 NAMESPACE"); string correctNamespaceSetting = "* NAMESPACE ((\"\" \"\\\\\")) NIL ((\"" + publicFolderName + "\" \"\\\\\"))"; Assert.IsTrue(result.Contains(correctNamespaceSetting), result); oSimulator.Disconnect(); settings.IMAPHierarchyDelimiter = "."; oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(account.Address, "test"); result = oSimulator.Send("A01 NAMESPACE"); correctNamespaceSetting = "* NAMESPACE ((\"\" \".\")) NIL ((\"" + publicFolderName + "\" \".\"))"; Assert.IsTrue(result.Contains(correctNamespaceSetting), result); oSimulator.Disconnect(); settings.IMAPHierarchyDelimiter = "/"; oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(account.Address, "test"); result = oSimulator.Send("A01 NAMESPACE"); correctNamespaceSetting = "* NAMESPACE ((\"\" \"/\")) NIL ((\"" + publicFolderName + "\" \"/\"))"; Assert.IsTrue(result.Contains(correctNamespaceSetting), result); oSimulator.Disconnect(); }
public void TestDeleteIMAPFolderNotifications() { _settings.IMAPIdleEnabled = true; hMailServer.Account oAccount = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); IMAPSimulator oSimulator1 = new IMAPSimulator(); IMAPSimulator oSimulator2 = new IMAPSimulator(); oSimulator1.ConnectAndLogon(oAccount.Address, "test"); oSimulator2.ConnectAndLogon(oAccount.Address, "test"); oSimulator1.SelectFolder("Inbox"); oSimulator2.CreateFolder("Mailbox"); oSimulator2.DeleteFolder("Mailbox"); SMTPClientSimulator.StaticSend("*****@*****.**", oAccount.Address, "Test", "test"); POP3Simulator.AssertMessageCount(oAccount.Address, "test", 1); string noopResponse = oSimulator1.NOOP() + oSimulator1.NOOP(); // confirm that the client is notified about this message even though another // folder has been dropped by another client. Assert.IsTrue(noopResponse.Contains(@"* 1 EXISTS"), noopResponse); }
public void TestBodyStructureWithNonLatinCharacterTest3() { string @messageText = "To: [email protected]\r\n" + "Content-Type: multipart/mixed;\r\n" + " boundary=\"------------000008080307000003010005\"\r\n" + "\r\n" + "This is a multi-part message in MIME format.\r\n" + "--------------000008080307000003010005\r\n" + "Content-Type: text/plain; charset=ISO-8859-1; format=flowed\r\n" + "Content-Transfer-Encoding: 7bit\r\n" + "\r\n" + "Test\r\n" + "\r\n" + "--------------000008080307000003010005\r\n" + "Content-Type: image/png;\r\n" + " name=\"=?ISO-8859-1?Q?=F6=50=C4=C9=CD=C1=D6=60=F6=F6=E4=27=2E=70=6E=67?=\"\r\n" + "Content-Transfer-Encoding: base64\r\n" + "Content-Disposition: inline;\r\n" + " filename*=ISO-8859-1''%F6%50%C4%C9%CD%C1%D6%60%F6%F6%E4%27%2E%70%6E%67\r\n" + "\r\n" + "iVBORw0KGgoAAAANSUhEUgAAAqgAAAH4CAIAAAAJvIhhAAAAAXNSR0IArs4c6QAAAARnQU1B\r\n" + "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA\r\n" + "--------------000008080307000003010005--\r\n"; hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); Assert.IsTrue(SMTPClientSimulator.StaticSendRaw(account.Address, account.Address, messageText)); Utilities.AssertMessageExistsInFolder(account.IMAPFolders[0], 1); IMAPSimulator oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(account.Address, "test"); oSimulator.SelectFolder("INBOX"); string result = oSimulator.Fetch("1 BODYSTRUCTURE"); oSimulator.Disconnect(); Assert.IsTrue(result.Contains("\"FILENAME\" \"=?ISO-8859-1?Q?=F6=50=C4=C9=CD=C1=D6=60=F6=F6=E4=27=2E=70=6E=67?=\"")); Assert.IsTrue(result.Contains("\"NAME\" \"=?ISO-8859-1?Q?=F6=50=C4=C9=CD=C1=D6=60=F6=F6=E4=27=2E=70=6E=67?=\"")); }
public void TestBodyStructureWithNonLatinCharacterSingleLineWithSpace() { string @messageText = "Return-Path: [email protected]\r\n" + "Delivered-To: [email protected]\r\n" + "Received: from www.hmailserver.com ([127.0.0.1])\r\n" + " by mail.hmailserver.com\r\n" + " ; Tue, 16 Jun 2009 21:39:18 +0200\r\n" + "MIME-Version: 1.0\r\n" + "Date: Tue, 16 Jun 2009 21:39:18 +0200\r\n" + "From: <*****@*****.**>\r\n" + "To: <*****@*****.**>\r\n" + "Subject: sdafsda\r\n" + "Message-ID: <96aee740f2abe8450648c1752a9a987b@localhost>\r\n" + "X-Sender: [email protected]\r\n" + "User-Agent: RoundCube Webmail/0.2.2\r\n" + "Content-Type: multipart/mixed;\r\n" + " boundary=\"=_b63968892a76b1a5be17f4d37b085f54\"\r\n" + "\r\n" + "--=_b63968892a76b1a5be17f4d37b085f54\r\n" + "Content-Transfer-Encoding: 8bit\r\n" + "Content-Type: text/plain; charset=\"UTF-8\"\r\n" + "\r\n" + "--=_b63968892a76b1a5be17f4d37b085f54\r\n" + "Content-Transfer-Encoding: base64\r\n" + "Content-Type: application/x-zip; charset=\"UTF-8\";\r\n" + " name*=\"UTF-8''m%C3%A4%C3%B6 m%C3%A4%C3%B6.zip\"; \r\n" + "Content-Disposition: attachment;\r\n" + " filename*=\"UTF-8''m%C3%A4%C3%B6 m%C3%A4%C3%B6.zip\"; \r\n" + "\r\n" + "iVBORw0KGgoAAAANSUhEUgAAAqgAAAH4CAIAAAAJvIhhAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\r\n" + "jwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAIr1JREFU\r\n" + "eF7t29GSYzluBND1/3/0ejb6wY6emK2WrpQEkaefdQvAAcn02OH/+fe///0v/wgQIECAAIESgb+C\r\n" + "3z8CBAgQIECgROBfJXMakwABAgQIEPjP/5qfAgECBAgQINAjIPh7dm1SAgQIECDgv/idAQIECBAg\r\n" + "--=_b63968892a76b1a5be17f4d37b085f54--\r\n" + ""; hMailServer.Account account = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); Assert.IsTrue(SMTPClientSimulator.StaticSendRaw(account.Address, account.Address, messageText)); Utilities.AssertMessageExistsInFolder(account.IMAPFolders[0], 1); IMAPSimulator oSimulator = new IMAPSimulator(); oSimulator.ConnectAndLogon(account.Address, "test"); oSimulator.SelectFolder("INBOX"); string result = oSimulator.Fetch("1 BODYSTRUCTURE"); oSimulator.Disconnect(); Assert.IsFalse(result.Contains("''"), result); Assert.IsTrue(result.Contains("\"FILENAME\" \"=?UTF-8?Q?m=C3=A4=C3=B6 m=C3=A4=C3=B6.zip?=\""), result); Assert.IsTrue(result.Contains("\"NAME\" \"=?UTF-8?Q?m=C3=A4=C3=B6 m=C3=A4=C3=B6.zip?=\""), result); }
public void TestDeleteSubFolderCheckAPI() { hMailServer.Application application = SingletonProvider<Utilities>.Instance.GetApp(); hMailServer.IMAPFolders publicFolders = _settings.PublicFolders; Assert.AreEqual(0, publicFolders.Count); ; hMailServer.Account account1 = SingletonProvider<Utilities>.Instance.AddAccount(_domain, "*****@*****.**", "test"); hMailServer.IMAPFolder folder = publicFolders.Add("Share1"); folder.Save(); Assert.AreEqual(1, publicFolders.Count); hMailServer.IMAPFolders mySubFolders = folder.SubFolders; Assert.AreEqual(0, mySubFolders.Count); hMailServer.IMAPFolderPermission permission = folder.Permissions.Add(); permission.PermissionAccountID = account1.ID; permission.PermissionType = hMailServer.eACLPermissionType.ePermissionTypeUser; permission.set_Permission(hMailServer.eACLPermission.ePermissionCreate, true); permission.set_Permission(hMailServer.eACLPermission.ePermissionRead, true); permission.set_Permission(hMailServer.eACLPermission.ePermissionLookup, true); permission.Save(); IMAPSimulator oSimulator1 = new IMAPSimulator(); oSimulator1.ConnectAndLogon("*****@*****.**", "test"); Assert.IsTrue(oSimulator1.CreateFolder("#public.Share1.MySub")); Assert.AreEqual(1, mySubFolders.Count); permission.set_Permission(hMailServer.eACLPermission.ePermissionDeleteMailbox, true); permission.Save(); Assert.IsTrue(oSimulator1.DeleteFolder("#public.Share1.MySub")); Assert.IsFalse(oSimulator1.SelectFolder("#public.Share1.MySub")); Assert.AreEqual(0, mySubFolders.Count); Assert.AreEqual(1, publicFolders.Count); oSimulator1.Disconnect(); }
public void TestRetrievalOfMessageInDeletedFolderUsingIMAP() { 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); IMAPSimulator sim = new IMAPSimulator(); sim.ConnectAndLogon(account.Address, "test"); sim.SelectFolder("INBOX"); string result = sim.Fetch("1 BODY[1]"); Assert.IsTrue(result.Contains(deletedMessageText.Replace("%MACRO_FILE%", message.Filename))); Utilities.AssertReportedError(); }