public void TestReplaceFullPathWithPartialPath() { Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test"); SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test message", "Test body"); IMAPFolder folder = account.IMAPFolders.get_ItemByName("Inbox"); CustomAsserts.AssertFolderMessageCount(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}", TestSetup.Escape(fileName), message.ID); SingletonProvider <TestSetup> .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 = Pop3ClientSimulator.AssertGetFirstMessageText(account.Address, "test"); Assert.IsTrue(content.Contains("Test message")); }
public static Message AssertRetrieveFirstMessage(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"; CustomAssert.Fail(error); return(null); }
public void TestOnErrorJScript() { Application app = SingletonProvider <TestSetup> .Instance.GetApp(); Scripting scripting = app.Settings.Scripting; scripting.Language = "JScript"; string script = "function OnError(iSeverity, iError, sSource, sDescription) {" + Environment.NewLine + " EventLog.Write('Severity: ' + iSeverity) " + Environment.NewLine + " EventLog.Write('Error: ' + iError) " + Environment.NewLine + " EventLog.Write('Source: ' + sSource) " + Environment.NewLine + " EventLog.Write('Description: ' + sDescription) " + Environment.NewLine + "}" + Environment.NewLine + Environment.NewLine; File.WriteAllText(scripting.CurrentScriptFile, script); scripting.Enabled = true; scripting.Reload(); Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test"); IMAPFolder inbox = account.IMAPFolders.get_ItemByName("Inbox"); string deletedMessageText = app.Settings.ServerMessages.get_ItemByName("MESSAGE_FILE_MISSING").Text; SMTPClientSimulator.StaticSend(account.Address, account.Address, "Test", "SampleBody"); TestSetup.AssertFolderMessageCount(inbox, 1); hMailServer.Message message = inbox.Messages[0]; File.Delete(message.Filename); string text = POP3ClientSimulator.AssertGetFirstMessageText(account.Address, "test"); CustomAssert.IsTrue(text.Contains(deletedMessageText.Replace("%MACRO_FILE%", message.Filename))); TestSetup.AssertReportedError(); string eventLogText = TestSetup.ReadExistingTextFile(app.Settings.Logging.CurrentEventLog); CustomAssert.IsTrue(eventLogText.Contains("Description: Message retrieval failed")); }
public void TestRenameRootPublicFolder() { IMAPFolders folders = _application.Settings.PublicFolders; IMAPFolder folder = folders.Add("ShareA"); folder.Save(); IMAPFolderPermission permission = folder.Permissions.Add(); permission.PermissionType = eACLPermissionType.ePermissionTypeAnyone; permission.set_Permission(eACLPermission.ePermissionLookup, true); permission.set_Permission(eACLPermission.ePermissionRead, true); permission.set_Permission(eACLPermission.ePermissionDeleteMailbox, true); permission.Save(); IMAPFolder folder2 = folders.Add("ShareB"); folder2.Save(); IMAPFolderPermission permission2 = folder2.Permissions.Add(); permission2.PermissionType = eACLPermissionType.ePermissionTypeAnyone; permission2.set_Permission(eACLPermission.ePermissionLookup, true); permission2.set_Permission(eACLPermission.ePermissionRead, true); permission2.set_Permission(eACLPermission.ePermissionDeleteMailbox, true); permission2.Save(); Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test"); var simulator1 = new IMAPClientSimulator(); simulator1.ConnectAndLogon(account.Address, "test"); CustomAssert.IsTrue(simulator1.SelectFolder("#Public.ShareA")); CustomAssert.IsTrue(simulator1.SelectFolder("#Public.ShareB")); CustomAssert.IsTrue(simulator1.RenameFolder("#Public.ShareA", "#Public.ShareB.ShareA")); CustomAssert.IsFalse(simulator1.SelectFolder("#Public.ShareA")); CustomAssert.IsTrue(simulator1.SelectFolder("#Public.ShareB")); CustomAssert.IsTrue(simulator1.SelectFolder("#Public.ShareB.ShareA")); }
public bool MoveMessageToTrashBin(string address, string fromFolderName, long messageId) { bool isSucceed = true; try { Account account = this.GetAccountFromAddress(address); IMAPFolder trashFolder = account.IMAPFolders.get_ItemByName("TRASHBIN"); IMAPFolder fromFolder = account.IMAPFolders.get_ItemByName(fromFolderName); Message msg = fromFolder.Messages.get_ItemByDBID(messageId); msg.Copy(trashFolder.ID); fromFolder.Messages.DeleteByDBID(msg.ID); account.Save(); } catch (Exception ex) { isSucceed = false; throw ex; } return(isSucceed); }
public void TestSaveMessageInPublicIMAPFolder() { Settings settings = SingletonProvider <TestSetup> .Instance.GetApp().Settings; IMAPFolders publicFolders = settings.PublicFolders; IMAPFolder testFolder = publicFolders.Add("TestFolder"); testFolder.Save(); // Send a message to the account. hMailServer.Message oMessage = testFolder.Messages.Add(); CustomAssert.AreEqual(0, oMessage.State); oMessage.Body = "Välkommen till verkligheten"; oMessage.Subject = "Hej"; oMessage.Save(); CustomAssert.AreEqual(2, oMessage.State); CustomAssert.IsTrue(oMessage.Filename.Contains(settings.PublicFolderDiskName)); CustomAssert.IsFalse(oMessage.Filename.Contains(_domain.Name)); }
public void TestReplaceFullPathInPublicFolderWithPartialPath() { Application application = SingletonProvider <TestSetup> .Instance.GetApp(); Account account1 = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test"); IMAPFolders publicFolders = _settings.PublicFolders; 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}", TestSetup.Escape(fileName), message.ID); SingletonProvider <TestSetup> .Instance.GetApp().Database.ExecuteSQL(sql); // Now try to insert the message. CustomAssert.IsTrue(_application.Utilities.ImportMessageFromFile(fileName, 0)); _application.Reinitialize(); string newMessgaeFilename = _settings.PublicFolders[0].Messages[0].Filename; CustomAssert.AreNotEqual(fileName, newMessgaeFilename); CustomAssert.IsTrue(File.Exists(newMessgaeFilename)); }
public async void Update(List <string> groupIDs) { try { IMAPClient client = new IMAPClient(imapConfig, null, 5); client.Logon(); IMAPFolder folder = client.Folders[folderName]; for (int i = 0; i < subFolderNames.Count; i++) { folder = folder.SubFolders[i]; if (folder.FolderName == "Build_System") { break; } } List <IMAPMessage> messages = folder.Messages.OrderByDescending(msg => msg.Date).ToList(); DateTime lastPostDate = ReadLastPostedDateTime(cConfigurationFolderPath + cLastPostedBuildDateTimeFilePath); List <IMAPMessage> newMessages = messages.TakeWhile((msg) => msg.Date > lastPostDate).ToList(); if (newMessages.Count > 0) { DateTime newestMessageDate = newMessages.Max((msg) => msg.Date); bool buildPosted = await PostBuilds(newMessages, groupIDs); if (buildPosted) { WriteLastPostedDateTime(cConfigurationFolderPath + cLastPostedBuildDateTimeFilePath, newestMessageDate); } } client.Logoff(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Exception in BSLogic.Update(): " + ex.Message); } }
//Since I manage messages by IMAP folders, I specify a folder name to get messages in it. public IEnumerable <Message> GetAllMessages(string address, string folder) { Account account = this.GetAccountFromAddress(address); IMAPFolder iFolder = account.IMAPFolders.get_ItemByName(folder.ToUpper()); Messages msgs = iFolder.Messages; List <Message> result = new List <Message>(); try { for (int i = 0; i < msgs.Count; i++) { if (msgs[i].get_Flag(eMessageFlag.eMFDeleted) == false) { result.Add(msgs[i]); } } } catch (Exception ex) { throw ex; } return(result); }
public void TestRenameAccountOrDomainWithMessagesWithFullPath() { Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test"); SmtpClientSimulator.StaticSend(account.Address, account.Address, "Test message", "Test body"); IMAPFolder folder = account.IMAPFolders.get_ItemByName("Inbox"); CustomAsserts.AssertFolderMessageCount(folder, 1); 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}", TestSetup.Escape(fileName), message.ID); SingletonProvider <TestSetup> .Instance.GetApp().Database.ExecuteSQL(sql); SingletonProvider <TestSetup> .Instance.GetApp().Settings.Cache.Clear(); // 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(); _domain.Delete(); }
private void ConfirmAccountObject() { Account account = _application.Domains[0].Accounts.get_ItemByAddress("*****@*****.**"); Assert.IsTrue(account.Active); Assert.AreEqual("AD", account.ADDomain); Assert.AreEqual(eAdminLevel.hAdminLevelDomainAdmin, account.AdminLevel); Assert.AreEqual("AU", account.ADUsername); Assert.AreEqual("FA", account.ForwardAddress); Assert.IsFalse(account.ForwardEnabled); Assert.IsTrue(account.ForwardKeepOriginal); Assert.IsFalse(account.IsAD); Assert.AreEqual(1250, account.MaxSize); Assert.AreEqual("First", account.PersonFirstName); Assert.AreEqual("Last", account.PersonLastName); Assert.IsTrue(account.SignatureEnabled); Assert.AreEqual("HTML", account.SignatureHTML); Assert.AreEqual("PLAIN", account.SignaturePlainText); Assert.AreEqual("VAC", account.VacationMessage); Assert.IsTrue(account.VacationMessageExpires); Assert.AreEqual("2020-01-01", account.VacationMessageExpiresDate.Substring(0, 10)); Assert.IsTrue(account.VacationMessageIsOn); Assert.AreEqual("SUBJ", account.VacationSubject); // Confirm fetch account FetchAccount fa = account.FetchAccounts.get_Item(0); Assert.AreEqual(5, fa.DaysToKeepMessages); Assert.IsTrue(fa.Enabled); Assert.AreEqual(10, fa.MinutesBetweenFetch); Assert.AreEqual("test", fa.Name); Assert.AreEqual(_fetchAccountPort, fa.Port); Assert.AreEqual(true, fa.ProcessMIMEDate); Assert.IsTrue(fa.ProcessMIMERecipients); Assert.AreEqual("test", fa.Username); Assert.IsFalse(fa.UseSSL); Assert.AreEqual("127.0.0.1", fa.ServerAddress); Assert.IsTrue(fa.UseAntiSpam); Assert.IsTrue(fa.UseAntiVirus); // Make sur no additional mail is downloaded. We have already downloaded it. DownloadFromExternalAccount(account, fa); Rule rule = account.Rules[0]; Assert.AreEqual("MyRule", rule.Name); RuleCriteria criteria = rule.Criterias[0]; Assert.AreEqual(eRuleMatchType.eMTGreaterThan, criteria.MatchType); Assert.AreEqual(eRulePredefinedField.eFTMessageSize, criteria.PredefinedField); Assert.AreEqual("0", criteria.MatchValue); RuleAction action = rule.Actions[0]; Assert.AreEqual(eRuleActionType.eRAForwardEmail, action.Type); Assert.AreEqual("*****@*****.**", action.To); Assert.AreEqual("Test", action.Body); Assert.AreEqual("File", action.Filename); Assert.AreEqual("T", action.FromAddress); Assert.AreEqual("N", action.FromName); Assert.AreEqual("H", action.HeaderName); Assert.AreEqual("Folder", action.IMAPFolder); Assert.AreEqual("Script", action.ScriptFunction); Assert.AreEqual("Subj", action.Subject); Assert.AreEqual("Value", action.Value); IMAPFolder inbox = account.IMAPFolders.get_ItemByName("INBOX"); Messages messages = inbox.Messages; if (_backupMessages) { Assert.AreEqual(6, inbox.CurrentUID); Assert.AreEqual(_folderCreationTime, inbox.CreationTime); Assert.AreEqual(5, messages.Count); Assert.AreEqual("Message 1 Subject", messages[0].Subject); Assert.IsTrue(messages[1].Body.Contains("Message 3 Body")); Assert.AreEqual(1, messages[0].UID); Assert.AreEqual(3, messages[1].UID); } else { Assert.AreEqual(0, messages.Count); } }
public async void Update(Dictionary <string, HashSet <string> > channelIDsForRepositories) { try { IMAPClient client = new IMAPClient(imapConfig, null, 5); client.Logon(); IMAPFolder folder = client.Folders[folderName]; for (int i = 0; i < folder.SubFolders.Count; i++) { folder = folder.SubFolders[i]; if (folder.FolderName == "Commit_Notifications") { break; } } List <IMAPMessage> messages = folder.Messages.OrderByDescending(msg => msg.Date).ToList(); DateTime lastPostDate = ReadLastPostedDateTime(cConfigurationFolderPath + cLastPostedCommitDateTimeFilePath); List <IMAPMessage> newImapMessages = messages.TakeWhile((msg) => msg.Date > lastPostDate).ToList(); if (newImapMessages.Count > 0) { newImapMessages.OrderBy(msg => msg.Date).Reverse(); HashSet <string> channelIDs = new HashSet <string>(channelIDsForRepositories.Values.SelectMany(c => c).ToList()); Dictionary <string, HashSet <string> > commitUidsPostedInChannel = new Dictionary <string, HashSet <string> >(); foreach (string channelID in channelIDs) { HashSet <string> commitUids = await getCommitUidsForChannel(channelID); commitUidsPostedInChannel.Add(channelID, commitUids); } foreach (IMAPMessage imapMsg in newImapMessages) { string[] parts = imapMsg.Subject.Split(':'); string commitToPrefix = "Commit to "; string repositoryName = ""; if (parts[0].Length > commitToPrefix.Length) { repositoryName = parts[0].Substring(commitToPrefix.Length, parts[0].Length - commitToPrefix.Length); } bool repositoryFound = false; HashSet <string> channelIDsForRepository = channelIDsForRepositories.TryGetValue(repositoryName, out repositoryFound); if (repositoryFound) { bool postResult = await PostCommitToChannels(imapMsg, channelIDsForRepository, commitUidsPostedInChannel); if (!postResult) { return; } } } DateTime newestMessageDate = newImapMessages.Max((msg) => msg.Date); WriteLastPostedDateTime(cConfigurationFolderPath + cLastPostedCommitDateTimeFilePath, newestMessageDate); } client.Logoff(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Exception in CommitLogic.Update(): " + ex.Message); } }
public static Message AssertRetrieveFirstMessage(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"; CustomAssert.Fail(error); return null; }
public static void AssertFolderMessageCount(IMAPFolder folder, int expectedCount) { if (expectedCount == 0) { // just in case. 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; CustomAssert.Fail(error); }
public void TestAddMessage() { Application app = SingletonProvider <TestSetup> .Instance.GetApp(); Utilities utilities = app.Utilities; Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test"); // Create a new folder. IMAPFolder folder = account.IMAPFolders.get_ItemByName("INBOX"); folder.Save(); for (int i = 0; i < 3; i++) { hMailServer.Message message = folder.Messages.Add(); message.set_Flag(eMessageFlag.eMFSeen, true); message.Save(); POP3ClientSimulator.AssertMessageCount(account.Address, "test", ((i + 1) * 2) - 1); SMTPClientSimulator.StaticSend("*****@*****.**", account.Address, "Test", "Test"); POP3ClientSimulator.AssertMessageCount(account.Address, "test", (i + 1) * 2); } POP3ClientSimulator.AssertMessageCount(account.Address, "test", 6); var sim = new IMAPClientSimulator(); sim.ConnectAndLogon(account.Address, "test"); sim.SelectFolder("Inbox"); string response = sim.Fetch("1:6 UID"); string[] lines = Strings.Split(response, Environment.NewLine, -1, CompareMethod.Text); var 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); } } CustomAssert.AreEqual(6, uids.Count); // Make sure the UIDS are sorted properly by creating a copy, sort the copy // and then compare to original. var copy = new List <string>(); copy.InsertRange(0, uids); copy.Sort(); CustomAssert.AreEqual(copy, uids); }
static void Main(string[] args) { //IMAPConfig config = new IMAPConfig("<host>", "<username>", "<password>", false, true, ""); //config.SaveConfig("settings.cfg"); IMAPConfig config = new IMAPConfig(@"c:\test1.cfg"); config.CacheFile = ""; IMAPClient client = null; try { client = new IMAPClient(config, null, 5); } catch (IMAPException e) { Console.WriteLine(e.Message); return; } //IMAPFolder drafts = client.Folders["Drafts"]; //IMAPMessage newMessage = new IMAPMessage(); //newMessage.From.Add(new IMAPMailAddress("Jason Miesionczek", "*****@*****.**")); //newMessage.To.Add(new IMAPMailAddress("Jason Miesionczek", "*****@*****.**")); //newMessage.Date = DateTime.Now; //newMessage.Subject = "this is a new message"; //drafts.AppendMessage(newMessage, "this is the content of the new message"); //IMAPFolder f = client.Folders["INBOX"]; //Console.WriteLine(f.Messages.Count); //IMAPMessage msg = f.GetMessageByID(21967); //Console.WriteLine(msg.TextData.Data); //foreach (IMAPFileAttachment attachment in msg.Attachments) //{ // attachment.SaveFile("C:\\"); //} //Console.ReadLine(); IMAPFolder f = client.Folders["INBOX"]; int[] msgCount = null; while (msgCount.Length == 0) { msgCount = f.CheckForNewMessages(); Thread.Sleep(1000); } foreach (int id in msgCount) { IMAPMessage msg = f.GetMessageByID(id); // do some logic here msg.MarkAsRead(); } //IMAPFolder f = client.Folders["Deleted Items"]; //IMAPMessage m = f.GetMessageByID(707); //IMAPFolder d = client.Folders["Deleted Items"]; //IMAPMessage m = d.Messages[0]; //IMAPMessage m = f.GetMessageByID(375); //IMAPMessage m = f.Messages[0]; //m.RefreshData(true, true); //client._imap.ProcessMessageHeader(m, 0); // 2893 //client._imap.ProcessBodyStructure(m); //client._imap.ProcessMessageHeader(m, 0); //client._imap.ProcessBodyStructure(m); //client._imap.ProcessBodyParts(m); //client._imap.ProcessAttachments(m); //IMAPSearchQuery query = new IMAPSearchQuery(); //query.Range = new DateRange(DateTime.Now.AddDays(-6), DateTime.Now); //IMAPSearchResult sResult = f.Search(query); //IMAPSearchResult sResult = f.Search(IMAPSearchQuery.QuickSearchDateRange(DateTime.Now.AddDays(-6), DateTime.Now)); //IMAPSearchResult sResult = f.Search(IMAPSearchQuery.QuickSearchFrom("Christine Fade", "*****@*****.**")); //IMAPSearchResult sResult = f.Search(IMAPSearchQuery.QuickSearchNew()); //IMAPFolder test = f.SubFolders["Test"]; //IMAPFolder del = client.Folders["Deleted Items"]; //f.CopyMessageToFolder(f.Messages[0], test); //test.DeleteMessage(test.Messages[0]); //f.MoveMessageToFolder(f.Messages[0], test); //test.EmptyFolder(); //Console.WriteLine("{0} - {1}", sResult.Query.Range.StartDate, sResult.Query.Range.EndDate); //foreach (IMAPMessage msg in sResult.Messages) //{ // msg.RefreshData(true, true, false); // Console.WriteLine("{0}: {1}", msg.Date, msg.Subject); // Console.WriteLine(msg.TextData.Data); //} //m.Attachments[1].SaveFile("C:\\"); Console.ReadLine(); foreach (IMAPMessage msg in client.Folders["INBOX"].Messages) { if (msg.BodyParts.Count == 0) { Console.WriteLine(msg.Uid); } } client.Logoff(); }