コード例 #1
0
        public void LoadProperties(hMailServer.IMAPFolders imapFolders, bool publicFolders)
        {
            _folderHierarchyDelimiter = Utilities.APICreator.Settings.IMAPHierarchyDelimiter;

            btnEditPermissions.Visible = publicFolders;

            _folders = imapFolders;

            for (int i = 0; i < _folders.Count; i++)
            {
                hMailServer.IMAPFolder folder = _folders[i];

                TreeNode node = treeFolders.Nodes.Add(folder.Name);
                node.Tag = folder;

                LoadSubFolders(folder, node);
            }

            if (treeFolders.Nodes.Count > 0)
            {
                treeFolders.SelectedNode = treeFolders.Nodes[0];
            }

            ShowCurrentFolder();
        }
コード例 #2
0
ファイル: API.Utilities.cs プロジェクト: radtek/hMailServer
        public void TestReplaceFullPathInPublicFolderWithPartialPath()
        {
            hMailServer.Application application = SingletonProvider <Utilities> .Instance.GetApp();

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

            hMailServer.IMAPFolders publicFolders = _settings.PublicFolders;
            hMailServer.IMAPFolder  folder        = publicFolders.Add("Share1");
            folder.Save();

            hMailServer.Message message = folder.Messages.Add();
            message.Subject = "Test";
            message.Save();

            // Move the message file to another folder.
            string publicFolderPath = Path.Combine(_application.Settings.Directories.DataDirectory, "#Public");
            string fileName         = Path.Combine(publicFolderPath, "randomMail.eml");

            File.Move(message.Filename, fileName);

            // Update the database with the 'invalid' path.
            string sql = string.Format("update hm_messages set messagefilename = '{0}' where messageid = {1}", Utilities.Escape(fileName), message.ID);

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

            // Now try to insert the message.
            Assert.IsTrue(_application.Utilities.ImportMessageFromFile(fileName, 0));

            _application.Reinitialize();

            string newMessgaeFilename = _settings.PublicFolders[0].Messages[0].Filename;

            Assert.AreNotEqual(fileName, newMessgaeFilename);
            Assert.IsTrue(File.Exists(newMessgaeFilename));
        }
コード例 #3
0
        public void TestBasicIncrementsWithDeletion()
        {
            hMailServer.Account testAccount = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "Test'*****@*****.**", "test");

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

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

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

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

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


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

            Assert.AreEqual(3, inboxFolder.CurrentUID);
            Assert.AreEqual(3, inboxFolder.Messages[0].UID);
        }
コード例 #4
0
        private void btnEditPermissions_Click(object sender, EventArgs e)
        {
            TreeNode selectedNode = treeFolders.SelectedNode;

            if (selectedNode == null)
            {
                return;
            }

            // First confirm that we can access the permissions.
            hMailServer.IMAPFolder folder = selectedNode.Tag as hMailServer.IMAPFolder;

            try
            {
                // This is a dummy test. We should never return here, but if we don't
                // have access to the ACL permissions, a message should be shown.
                if (folder.Permissions.Count < 0)
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, EnumStrings.hMailServerAdministrator, MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            formFolderPermissions folderPermissions = new formFolderPermissions(folder);

            folderPermissions.ShowDialog();
        }
コード例 #5
0
        public static void AssertMessageExistsInFolder(hMailServer.IMAPFolder folder, int expectedCount)
        {
            if (expectedCount == 0)
            {
                // just in case.
                Utilities.AssertRecipientsInDeliveryQueue(0);
            }

            int currentCount = 0;
            int timeout      = 100;

            while (timeout > 0)
            {
                currentCount = folder.Messages.Count;

                if (currentCount == expectedCount)
                {
                    return;
                }

                timeout--;
                Thread.Sleep(100);
            }

            string error = "Wrong number of messages in mailbox " + folder.Name;

            Assert.Fail(error);
        }
コード例 #6
0
ファイル: Persistence.cs プロジェクト: radtek/hMailServer
        public void TestRenameAccountOrDomainWithMessagesWithFullPath()
        {
            var account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

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

            hMailServer.IMAPFolder folder = account.IMAPFolders.get_ItemByName("Inbox");
            Utilities.AssertMessageExistsInFolder(folder, 1);
            hMailServer.Message message = account.IMAPFolders.get_ItemByName("Inbox").Messages[0];

            // Move the message file to another folder.
            string domainPath  = Path.Combine(_application.Settings.Directories.DataDirectory, _domain.Name);
            string accountPath = Path.Combine(domainPath, "test");
            string fileName    = Path.Combine(accountPath, "randomMail.eml");

            File.Move(message.Filename, fileName);

            // Update the database with the full path.
            string sql = string.Format("update hm_messages set messagefilename = '{0}' where messageid = {1}", Utilities.Escape(fileName), message.ID);

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

            // Now try to change the name of the domain or account. Should fail.
            account.Address = "*****@*****.**";
            bool thrown = false;

            try
            {
                account.Save();
            }
            catch (Exception)
            {
                thrown = true;
            }

            Assert.IsTrue(thrown);

            // Saving account is OK, unless its address is changed.
            account.Address = "*****@*****.**";
            account.Save();

            thrown = false;

            _domain.Name = "example.com";

            try
            {
                _domain.Save();
            }
            catch (Exception)
            {
                thrown = true;
            }

            Assert.IsTrue(thrown);

            // Saving domain is OK, unless its address is changed.
            _domain.Name = "test.com";
            _domain.Save();
        }
コード例 #7
0
ファイル: IMAP.Folders.cs プロジェクト: radtek/hMailServer
        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"));
        }
コード例 #8
0
        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();
        }
コード例 #9
0
ファイル: API.cs プロジェクト: radtek/hMailServer
        public void TestIMAPFolderPermissionAccessGroup()
        {
            hMailServer.Application application = SingletonProvider <Utilities> .Instance.GetApp();

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

            hMailServer.Group group = SingletonProvider <Utilities> .Instance.AddGroup("TestGroup");

            hMailServer.IMAPFolders publicFolders = _settings.PublicFolders;
            hMailServer.IMAPFolder  folder        = publicFolders.Add("Share1");
            folder.Save();

            hMailServer.IMAPFolderPermission permission = folder.Permissions.Add();
            permission.PermissionGroupID = group.ID;
            permission.PermissionType    = hMailServer.eACLPermissionType.ePermissionTypeGroup;
            permission.Save();

            Assert.AreEqual(permission.Group.Name, group.Name);

            permission = folder.Permissions.Add();
            permission.PermissionAccountID = account1.ID;
            permission.PermissionType      = hMailServer.eACLPermissionType.ePermissionTypeUser;
            permission.Save();

            Assert.AreEqual(permission.Account.Address, account1.Address);
        }
コード例 #10
0
ファイル: API.cs プロジェクト: radtek/hMailServer
        public void TestSaveMessageInExistingIMAPFolder()
        {
            hMailServer.Settings settings = SingletonProvider <Utilities> .Instance.GetApp().Settings;

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

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

            // Send a message to the account.
            hMailServer.IMAPFolder folder = oAccount1.IMAPFolders.get_ItemByName("INBOX");

            hMailServer.Message oMessage = folder.Messages.Add();

            Assert.AreEqual(0, oMessage.State);

            oMessage.Body    = "Välkommen till verkligheten";
            oMessage.Subject = "Hej";
            oMessage.Save();

            Assert.AreEqual(2, oMessage.State);
            Assert.IsFalse(oMessage.Filename.Contains(settings.PublicFolderDiskName));
            Assert.IsTrue(oMessage.Filename.Contains(_domain.Name));

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

            Assert.IsNotEmpty(message);
            Assert.Less(0, message.IndexOf("Hej"));
        }
コード例 #11
0
ファイル: API.cs プロジェクト: radtek/hMailServer
        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();
        }
コード例 #12
0
        public bool SaveCurrentFolder()
        {
            TreeNode currentNode = treeFolders.SelectedNode;

            if (currentNode != null)
            {
                hMailServer.IMAPFolder folder = currentNode.Tag as hMailServer.IMAPFolder;
                if (folder.Name != currentNode.Text && currentNode.Text.Length > 0)
                {
                    // Name has been changed. First check that it's not busy.
                    if (!ValidateFolderName())
                    {
                        return(false);
                    }

                    try
                    {
                        folder.Name = currentNode.Text;
                        folder.Save();
                        return(true);
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message, EnumStrings.hMailServerAdministrator);
                        return(false);
                    }
                }
            }

            return(true);
        }
コード例 #13
0
        public void TestMoveMessageWithAccountLevelRule()
        {
            hMailServer.Account testAccount = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "Test'*****@*****.**", "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);

            SMTPClientSimulator.StaticSend(testAccount.Address, testAccount.Address, "Test", "Test");
            POP3Simulator.AssertMessageCount(testAccount.Address, "test", 2);
            Assert.AreEqual(2, inboxFolder.CurrentUID);
            Assert.AreEqual(2, inboxFolder.Messages[1].UID);

            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");

            // Since the message is placed in a new folder, it should receive a unique UID.
            Utilities.AssertMessageExistsInFolder(testFolder, 1);
            Assert.AreEqual(1, testFolder.CurrentUID);
            Assert.AreEqual(1, testFolder.Messages[0].UID);
        }
コード例 #14
0
ファイル: API.Utilities.cs プロジェクト: radtek/hMailServer
        public void TestReplaceInvalidPathWithCorrectPath()
        {
            hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

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

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

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

            string filename = message.Filename;

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

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

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

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

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

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

            Assert.IsTrue(content.Contains("Test message"));
        }
コード例 #15
0
        public void TestDeletionOfMessageInDeletedFolder()
        {
            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.Messages messages = inbox.Messages;

            hMailServer.Message message = messages[0];
            DirectoryInfo       dir     = new DirectoryInfo(Path.GetFullPath(message.Filename));
            DirectoryInfo       parent  = dir.Parent.Parent.Parent;

            parent.Delete(true);

            DateTime timeBeforeDelete = DateTime.Now;

            messages.DeleteByDBID(message.ID);

            TimeSpan executionTime = DateTime.Now - timeBeforeDelete;

            Assert.Greater(1500, executionTime.TotalMilliseconds);
        }
コード例 #16
0
ファイル: API.Unicode.cs プロジェクト: radtek/hMailServer
        public void TestFolderAdd()
        {
            hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            string folderName = "åäö";

            hMailServer.IMAPFolder folder  = account.IMAPFolders.Add(folderName);
            hMailServer.IMAPFolder folder2 = account.IMAPFolders.get_ItemByName(folderName);
            Assert.AreEqual(folderName, folder2.Name);
        }
コード例 #17
0
        private void buttonEmptyFolder_Click(object sender, EventArgs e)
        {
            TreeNode selectedNode = treeFolders.SelectedNode;

            if (selectedNode == null)
            {
                return;
            }

            hMailServer.IMAPFolder folder = selectedNode.Tag as IMAPFolder;

            folder.Messages.Clear();
        }
コード例 #18
0
        private void LoadSubFolders(hMailServer.IMAPFolder folder, TreeNode node)
        {
            hMailServer.IMAPFolders folders = folder.SubFolders;

            for (int i = 0; i < folders.Count; i++)
            {
                hMailServer.IMAPFolder subFolder = folders[i];

                TreeNode subNode = node.Nodes.Add(subFolder.Name);
                subNode.Tag = subFolder;

                LoadSubFolders(subFolder, subNode);
            }
        }
コード例 #19
0
        public formFolderPermissions(hMailServer.IMAPFolder folder)
        {
            InitializeComponent();

            EnableDisable();

            _folder = folder;

            ListPermissions();

            new TabOrderManager(this).SetTabOrder(TabOrderManager.TabScheme.AcrossFirst);

            labelPermissionsFor.Text = "";
            Strings.Localize(this);
        }
コード例 #20
0
        public formFolderPermissions(hMailServer.IMAPFolder folder)
        {
            InitializeComponent();

            EnableDisable();

            _folder = folder;

            ListPermissions();

            new TabOrderManager(this).SetTabOrder(TabOrderManager.TabScheme.AcrossFirst);

            labelPermissionsFor.Text = "";
            Strings.Localize(this);
        }
コード例 #21
0
        private void ShowCurrentFolder()
        {
            TreeNode selectedNode = treeFolders.SelectedNode;

            if (selectedNode == null)
            {
                EnableDisable();
                return;
            }

            hMailServer.IMAPFolder folder = selectedNode.Tag as IMAPFolder;
            textName.Text = folder.Name;

            EnableDisable();
        }
コード例 #22
0
        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);
        }
コード例 #23
0
        private void deleteFolderToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TreeNode selectedNode = treeFolders.SelectedNode;

            if (selectedNode == null)
            {
                return;
            }

            hMailServer.IMAPFolder folder = selectedNode.Tag as IMAPFolder;

            folder.Delete();

            treeFolders.Nodes.Remove(selectedNode);

            ShowCurrentFolder();
        }
コード例 #24
0
ファイル: ucIMAPFolders.cs プロジェクト: bhimbolar/SwithMail
        private void buttonEmptyFolder_Click(object sender, EventArgs e)
        {
            TreeNode selectedNode = treeFolders.SelectedNode;

            if (selectedNode == null)
            {
                return;
            }

            if (MessageBox.Show(Strings.Localize("Are you sure you want to delete all messages in the folder?"),
                                EnumStrings.hMailServerAdministrator,
                                MessageBoxButtons.YesNo,
                                MessageBoxIcon.Question) == DialogResult.Yes)
            {
                hMailServer.IMAPFolder folder = selectedNode.Tag as IMAPFolder;

                folder.Messages.Clear();
            }
        }
コード例 #25
0
        private bool ValidateFolderName()
        {
            TreeNode currentNode = treeFolders.SelectedNode;

            hMailServer.IMAPFolder folder = currentNode.Tag as hMailServer.IMAPFolder;

            TreeNode nodeIterator = currentNode.FirstNode;

            while (nodeIterator != null)
            {
                if (nodeIterator != currentNode)
                {
                    if (nodeIterator.Text == currentNode.Text)
                    {
                        MessageBox.Show(Strings.Localize("There is already an folder with this name."), EnumStrings.hMailServerAdministrator);
                        return(false);
                    }
                }

                nodeIterator = nodeIterator.NextNode;
            }

            if (textName.Text.Length > 255)
            {
                return(false);
            }

            if (textName.Text.ToUpper() == "INBOX")
            {
                return(false);
            }

            if (textName.Text.Contains(_folderHierarchyDelimiter))
            {
                MessageBox.Show(Strings.Localize("A folder name can not contain the hierarchy delimiter."), EnumStrings.hMailServerAdministrator);
                return(false);
            }



            return(true);
        }
コード例 #26
0
ファイル: IMAP.Append.cs プロジェクト: radtek/hMailServer
        public void ConfirmFileAddedToCorrectPublicFolder()
        {
            Utilities utilities = SingletonProvider <Utilities> .Instance;

            hMailServer.Account oAccount   = utilities.AddAccount(_domain, "*****@*****.**", "test");
            IMAPSimulator       oSimulator = new IMAPSimulator();

            // Confirm that the public folder is empty before we start our test.
            string publicDir = utilities.GetPublicDirectory();

            utilities.AssertFilesInDirectory(publicDir, 0);

            hMailServer.IMAPFolders folders = _application.Settings.PublicFolders;
            hMailServer.IMAPFolder  folder  = folders.Add("Share");
            folder.Save();

            // Give everyone access to the folder.
            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.ePermissionInsert, true);
            permission.Save();

            // Add the message to the public folder.
            oSimulator.Connect();
            oSimulator.LogonWithLiteral("*****@*****.**", "test");
            oSimulator.SendSingleCommandWithLiteral("A01 APPEND #Public.Share {4}", "ABCD");

            // Confirm that the message exists in the public folder and not in the inbox.
            Assert.AreEqual(1, oSimulator.GetMessageCount("#Public.Share"));
            Assert.AreEqual(0, oSimulator.GetMessageCount("INBOX"));
            oSimulator.Disconnect();


            // The public directory should now contain the message.
            utilities.AssertFilesInDirectory(publicDir, 1);

            // There users directory should still be empty.
            utilities.AssertFilesInUserDirectory(oAccount, 0);
        }
コード例 #27
0
        public static hMailServer.Message AssertRetrieveFirstMessage(hMailServer.IMAPFolder folder)
        {
            int timeout = 100;

            while (timeout > 0)
            {
                if (folder.Messages.Count > 0)
                {
                    return(folder.Messages[0]);
                }

                timeout--;
                Thread.Sleep(100);
            }

            string error = "Could not retrieve message from folder";

            Assert.Fail(error);

            return(null);
        }
コード例 #28
0
ファイル: API.cs プロジェクト: radtek/hMailServer
        public void TestSaveMessageInPublicIMAPFolder()
        {
            hMailServer.Settings settings = SingletonProvider <Utilities> .Instance.GetApp().Settings;

            hMailServer.IMAPFolders publicFolders = settings.PublicFolders;

            hMailServer.IMAPFolder testFolder = publicFolders.Add("TestFolder");
            testFolder.Save();

            // Send a message to the account.
            hMailServer.Message oMessage = testFolder.Messages.Add();

            Assert.AreEqual(0, oMessage.State);

            oMessage.Body    = "Välkommen till verkligheten";
            oMessage.Subject = "Hej";
            oMessage.Save();

            Assert.AreEqual(2, oMessage.State);
            Assert.IsTrue(oMessage.Filename.Contains(settings.PublicFolderDiskName));
            Assert.IsFalse(oMessage.Filename.Contains(_domain.Name));
        }
コード例 #29
0
ファイル: API.Utilities.cs プロジェクト: radtek/hMailServer
        public void TestReplaceFullPathWithPartialPath()
        {
            hMailServer.Account account = SingletonProvider <Utilities> .Instance.AddAccount(_domain, "*****@*****.**", "test");

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

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

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

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

            // Move the message file to another folder.
            string domainPath  = Path.Combine(_application.Settings.Directories.DataDirectory, _domain.Name);
            string accountPath = Path.Combine(domainPath, "test");
            string fileName    = Path.Combine(accountPath, "randomMail.eml");

            File.Move(message.Filename, fileName);

            // Update the database with the 'invalid' path.
            string sql = string.Format("update hm_messages set messagefilename = '{0}' where messageid = {1}", Utilities.Escape(fileName), message.ID);

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

            Assert.IsTrue(File.Exists(fileName));
            // Now the file should be moved to the correct path.
            Assert.IsTrue(_application.Utilities.ImportMessageFromFile(fileName, account.ID));

            Assert.IsFalse(File.Exists(fileName));

            // Now nothing should happen because the file is no longer there.
            Assert.IsFalse(_application.Utilities.ImportMessageFromFile(fileName, account.ID));

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

            Assert.IsTrue(content.Contains("Test message"));
        }
コード例 #30
0
        private void SetupPublicFolders()
        {
            hMailServer.IMAPFolders folders = _application.Settings.PublicFolders;
            hMailServer.IMAPFolder  folder  = folders.Add("Test1");
            folder.Save();

            folder = folders.Add("Test2");
            folder.Save();

            folder = folders.Add("Test3");
            folder.Save();

            folder = folders.Add("ACL");
            folder.Save();

            hMailServer.Domain  domain   = _application.Domains[0];
            hMailServer.Account account1 = SingletonProvider <Utilities> .Instance.AddAccount(domain, "*****@*****.**", "test");

            hMailServer.IMAPFolderPermission permission = folder.Permissions.Add();
            permission.PermissionType      = hMailServer.eACLPermissionType.ePermissionTypeUser;
            permission.PermissionAccountID = account1.ID;
            permission.set_Permission(hMailServer.eACLPermission.ePermissionAdminister, true);
            permission.set_Permission(hMailServer.eACLPermission.ePermissionInsert, true);
            permission.Save();

            folder = folder.SubFolders.Add("MySubFolder");
            folder.Save();

            hMailServer.Group group1 = _application.Settings.Groups.Add();
            group1.Name = "ACLTestGroup";
            group1.Save();

            permission = folder.Permissions.Add();
            permission.PermissionType    = hMailServer.eACLPermissionType.ePermissionTypeGroup;
            permission.PermissionGroupID = group1.ID;
            permission.set_Permission(hMailServer.eACLPermission.ePermissionLookup, true);
            permission.set_Permission(hMailServer.eACLPermission.ePermissionDeleteMailbox, true);
            permission.Save();
        }
コード例 #31
0
        private void createFolderToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                SaveCurrentFolder();

                TreeNode selectedNode = treeFolders.SelectedNode;

                TreeNode newNode = null;
                hMailServer.IMAPFolder folder;
                if (selectedNode != null)
                {
                    hMailServer.IMAPFolder parentFolder = selectedNode.Tag as hMailServer.IMAPFolder;
                    folder = parentFolder.SubFolders.Add("Unnamed");
                    folder.Save();

                    newNode     = selectedNode.Nodes.Add(folder.Name);
                    newNode.Tag = folder;
                }
                else
                {
                    folder = _folders.Add("Unnamed");
                    folder.Save();

                    newNode     = treeFolders.Nodes.Add(folder.Name);
                    newNode.Tag = folder;
                }

                treeFolders.SelectedNode = newNode;

                textName.Focus();
                textName.SelectAll();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Creation of folder failed." + Environment.NewLine + ex.Message, EnumStrings.hMailServerAdministrator);
            }
        }
コード例 #32
0
 internal IMAPFolder(hMailServer.IMAPFolder o)
 {
     _object = o;
 }