public void TestArgumentExceptions() { Assert.Throws <ArgumentNullException> (() => SearchQuery.And(null, SearchQuery.All)); Assert.Throws <ArgumentNullException> (() => SearchQuery.And(SearchQuery.All, null)); Assert.Throws <ArgumentNullException> (() => SearchQuery.BccContains(null)); Assert.Throws <ArgumentException> (() => SearchQuery.BccContains(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.BodyContains(null)); Assert.Throws <ArgumentException> (() => SearchQuery.BodyContains(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.CcContains(null)); Assert.Throws <ArgumentException> (() => SearchQuery.CcContains(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.DoesNotHaveCustomFlag(null)); Assert.Throws <ArgumentException> (() => SearchQuery.DoesNotHaveCustomFlag(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.DoesNotHaveCustomFlags(null)); Assert.Throws <ArgumentException> (() => SearchQuery.DoesNotHaveFlags(MessageFlags.None)); Assert.Throws <ArgumentNullException> (() => SearchQuery.Filter(null)); Assert.Throws <ArgumentException> (() => SearchQuery.Filter(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.FromContains(null)); Assert.Throws <ArgumentException> (() => SearchQuery.FromContains(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.Fuzzy(null)); Assert.Throws <ArgumentNullException> (() => SearchQuery.GMailRawSearch(null)); Assert.Throws <ArgumentException> (() => SearchQuery.GMailRawSearch(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.HasCustomFlag(null)); Assert.Throws <ArgumentException> (() => SearchQuery.HasCustomFlag(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.HasCustomFlags(null)); Assert.Throws <ArgumentException> (() => SearchQuery.HasFlags(MessageFlags.None)); Assert.Throws <ArgumentNullException> (() => SearchQuery.HasGMailLabel(null)); Assert.Throws <ArgumentException> (() => SearchQuery.HasGMailLabel(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.HeaderContains(null, "text")); Assert.Throws <ArgumentException> (() => SearchQuery.HeaderContains(string.Empty, "text")); Assert.Throws <ArgumentNullException> (() => SearchQuery.HeaderContains("name", null)); Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.LargerThan(-1)); Assert.Throws <ArgumentNullException> (() => SearchQuery.MessageContains(null)); Assert.Throws <ArgumentException> (() => SearchQuery.MessageContains(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.Not(null)); Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.OlderThan(-1)); Assert.Throws <ArgumentNullException> (() => SearchQuery.Or(null, SearchQuery.All)); Assert.Throws <ArgumentNullException> (() => SearchQuery.Or(SearchQuery.All, null)); Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.SmallerThan(-1)); Assert.Throws <ArgumentNullException> (() => SearchQuery.SubjectContains(null)); Assert.Throws <ArgumentException> (() => SearchQuery.SubjectContains(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.ToContains(null)); Assert.Throws <ArgumentException> (() => SearchQuery.ToContains(string.Empty)); Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.YoungerThan(-1)); Assert.Throws <ArgumentNullException> (() => SearchQuery.All.And(null)); Assert.Throws <ArgumentNullException> (() => SearchQuery.All.Or(null)); Assert.Throws <ArgumentNullException> (() => new BinarySearchQuery(SearchTerm.And, null, SearchQuery.All)); Assert.Throws <ArgumentNullException> (() => new BinarySearchQuery(SearchTerm.And, SearchQuery.All, null)); Assert.Throws <ArgumentNullException> (() => new FilterSearchQuery(null)); Assert.Throws <ArgumentException> (() => new FilterSearchQuery(string.Empty)); Assert.Throws <ArgumentNullException> (() => new HeaderSearchQuery(null, "text")); Assert.Throws <ArgumentException> (() => new HeaderSearchQuery(string.Empty, "text")); Assert.Throws <ArgumentNullException> (() => new HeaderSearchQuery("name", null)); Assert.Throws <ArgumentNullException> (() => new TextSearchQuery(SearchTerm.BodyContains, null)); Assert.Throws <ArgumentNullException> (() => new UidSearchQuery(null)); Assert.Throws <ArgumentException> (() => new UidSearchQuery(new UniqueIdSet())); Assert.Throws <ArgumentException> (() => new UidSearchQuery(UniqueId.Invalid)); Assert.Throws <ArgumentNullException> (() => new UnarySearchQuery(SearchTerm.Not, null)); }
public async void TestImapClientGMail() { var commands = new List <ImapReplayCommand> (); commands.Add(new ImapReplayCommand("", "gmail.greeting.txt")); commands.Add(new ImapReplayCommand("A00000000 CAPABILITY\r\n", "gmail.capability.txt")); commands.Add(new ImapReplayCommand("A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\r\n", "gmail.authenticate.txt")); commands.Add(new ImapReplayCommand("A00000002 NAMESPACE\r\n", "gmail.namespace.txt")); commands.Add(new ImapReplayCommand("A00000003 LIST \"\" \"INBOX\"\r\n", "gmail.list-inbox.txt")); commands.Add(new ImapReplayCommand("A00000004 XLIST \"\" \"*\"\r\n", "gmail.xlist.txt")); commands.Add(new ImapReplayCommand("A00000005 LIST \"\" \"%\"\r\n", "gmail.list-personal.txt")); commands.Add(new ImapReplayCommand("A00000006 CREATE UnitTests\r\n", ImapReplayCommandResponse.OK)); commands.Add(new ImapReplayCommand("A00000007 LIST \"\" UnitTests\r\n", "gmail.list-unittests.txt")); commands.Add(new ImapReplayCommand("A00000008 SELECT UnitTests (CONDSTORE)\r\n", "gmail.select-unittests.txt")); for (int i = 0; i < 50; i++) { MimeMessage message; string latin1; long length; using (var resource = GetResourceStream(string.Format("common.message.{0}.msg", i))) message = MimeMessage.Load(resource); using (var stream = new MemoryStream()) { var options = FormatOptions.Default.Clone(); options.NewLineFormat = NewLineFormat.Dos; message.WriteTo(options, stream); length = stream.Length; stream.Position = 0; using (var reader = new StreamReader(stream, Latin1)) latin1 = reader.ReadToEnd(); } var command = string.Format("A{0:D8} APPEND UnitTests (\\Seen) ", i + 9); command += "{" + length + "}\r\n"; commands.Add(new ImapReplayCommand(command, "gmail.go-ahead.txt")); commands.Add(new ImapReplayCommand(latin1 + "\r\n", string.Format("gmail.append.{0}.txt", i + 1))); } commands.Add(new ImapReplayCommand("A00000059 UID SEARCH RETURN () OR TO nsb CC nsb\r\n", "gmail.search.txt")); commands.Add(new ImapReplayCommand("A00000060 UID FETCH 1:3,5,7:9,11:14,26:29,31,34,41:43,50 (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY)\r\n", "gmail.search-summary.txt")); commands.Add(new ImapReplayCommand("A00000061 UID FETCH 1 (BODY.PEEK[])\r\n", "gmail.fetch.1.txt")); commands.Add(new ImapReplayCommand("A00000062 UID FETCH 2 (BODY.PEEK[])\r\n", "gmail.fetch.2.txt")); commands.Add(new ImapReplayCommand("A00000063 UID FETCH 3 (BODY.PEEK[])\r\n", "gmail.fetch.3.txt")); commands.Add(new ImapReplayCommand("A00000064 UID FETCH 5 (BODY.PEEK[])\r\n", "gmail.fetch.5.txt")); commands.Add(new ImapReplayCommand("A00000065 UID FETCH 7 (BODY.PEEK[])\r\n", "gmail.fetch.7.txt")); commands.Add(new ImapReplayCommand("A00000066 UID FETCH 8 (BODY.PEEK[])\r\n", "gmail.fetch.8.txt")); commands.Add(new ImapReplayCommand("A00000067 UID FETCH 9 (BODY.PEEK[])\r\n", "gmail.fetch.9.txt")); commands.Add(new ImapReplayCommand("A00000068 UID FETCH 11 (BODY.PEEK[])\r\n", "gmail.fetch.11.txt")); commands.Add(new ImapReplayCommand("A00000069 UID FETCH 12 (BODY.PEEK[])\r\n", "gmail.fetch.12.txt")); commands.Add(new ImapReplayCommand("A00000070 UID FETCH 13 (BODY.PEEK[])\r\n", "gmail.fetch.13.txt")); commands.Add(new ImapReplayCommand("A00000071 UID FETCH 14 (BODY.PEEK[])\r\n", "gmail.fetch.14.txt")); commands.Add(new ImapReplayCommand("A00000072 UID FETCH 26 (BODY.PEEK[])\r\n", "gmail.fetch.26.txt")); commands.Add(new ImapReplayCommand("A00000073 UID FETCH 27 (BODY.PEEK[])\r\n", "gmail.fetch.27.txt")); commands.Add(new ImapReplayCommand("A00000074 UID FETCH 28 (BODY.PEEK[])\r\n", "gmail.fetch.28.txt")); commands.Add(new ImapReplayCommand("A00000075 UID FETCH 29 (BODY.PEEK[])\r\n", "gmail.fetch.29.txt")); commands.Add(new ImapReplayCommand("A00000076 UID FETCH 31 (BODY.PEEK[])\r\n", "gmail.fetch.31.txt")); commands.Add(new ImapReplayCommand("A00000077 UID FETCH 34 (BODY.PEEK[])\r\n", "gmail.fetch.34.txt")); commands.Add(new ImapReplayCommand("A00000078 UID FETCH 41 (BODY.PEEK[])\r\n", "gmail.fetch.41.txt")); commands.Add(new ImapReplayCommand("A00000079 UID FETCH 42 (BODY.PEEK[])\r\n", "gmail.fetch.42.txt")); commands.Add(new ImapReplayCommand("A00000080 UID FETCH 43 (BODY.PEEK[])\r\n", "gmail.fetch.43.txt")); commands.Add(new ImapReplayCommand("A00000081 UID FETCH 50 (BODY.PEEK[])\r\n", "gmail.fetch.50.txt")); commands.Add(new ImapReplayCommand("A00000082 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 FLAGS (\\Answered \\Seen)\r\n", "gmail.set-flags.txt")); commands.Add(new ImapReplayCommand("A00000083 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 -FLAGS.SILENT (\\Answered)\r\n", ImapReplayCommandResponse.OK)); commands.Add(new ImapReplayCommand("A00000084 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 +FLAGS.SILENT (\\Deleted)\r\n", "gmail.add-flags.txt")); commands.Add(new ImapReplayCommand("A00000085 UNSELECT\r\n", ImapReplayCommandResponse.OK)); commands.Add(new ImapReplayCommand("A00000086 SUBSCRIBE UnitTests\r\n", ImapReplayCommandResponse.OK)); commands.Add(new ImapReplayCommand("A00000087 LSUB \"\" \"%\"\r\n", "gmail.lsub-personal.txt")); commands.Add(new ImapReplayCommand("A00000088 UNSUBSCRIBE UnitTests\r\n", ImapReplayCommandResponse.OK)); commands.Add(new ImapReplayCommand("A00000089 CREATE UnitTests/Dummy\r\n", ImapReplayCommandResponse.OK)); commands.Add(new ImapReplayCommand("A00000090 LIST \"\" UnitTests/Dummy\r\n", "gmail.list-unittests-dummy.txt")); commands.Add(new ImapReplayCommand("A00000091 RENAME UnitTests RenamedUnitTests\r\n", ImapReplayCommandResponse.OK)); commands.Add(new ImapReplayCommand("A00000092 DELETE RenamedUnitTests\r\n", ImapReplayCommandResponse.OK)); commands.Add(new ImapReplayCommand("A00000093 LOGOUT\r\n", "gmail.logout.txt")); using (var client = new ImapClient()) { try { client.ReplayConnect("localhost", new ImapReplayStream(commands, false)); } catch (Exception ex) { Assert.Fail("Did not expect an exception in Connect: {0}", ex); } Assert.IsTrue(client.IsConnected, "Client failed to connect."); Assert.AreEqual(GMailInitialCapabilities, client.Capabilities); Assert.AreEqual(4, client.AuthenticationMechanisms.Count); Assert.IsTrue(client.AuthenticationMechanisms.Contains("XOAUTH"), "Expected SASL XOAUTH auth mechanism"); Assert.IsTrue(client.AuthenticationMechanisms.Contains("XOAUTH2"), "Expected SASL XOAUTH2 auth mechanism"); Assert.IsTrue(client.AuthenticationMechanisms.Contains("PLAIN"), "Expected SASL PLAIN auth mechanism"); Assert.IsTrue(client.AuthenticationMechanisms.Contains("PLAIN-CLIENTTOKEN"), "Expected SASL PLAIN-CLIENTTOKEN auth mechanism"); // Note: Do not try XOAUTH2 client.AuthenticationMechanisms.Remove("XOAUTH2"); try { await client.AuthenticateAsync("username", "password"); } catch (Exception ex) { Assert.Fail("Did not expect an exception in Authenticate: {0}", ex); } Assert.AreEqual(GMailAuthenticatedCapabilities, client.Capabilities); var inbox = client.Inbox; Assert.IsNotNull(inbox, "Expected non-null Inbox folder."); Assert.AreEqual(FolderAttributes.Inbox | FolderAttributes.HasNoChildren, inbox.Attributes, "Expected Inbox attributes to be \\HasNoChildren."); foreach (var special in Enum.GetValues(typeof(SpecialFolder)).OfType <SpecialFolder> ()) { var folder = client.GetFolder(special); if (special != SpecialFolder.Archive) { var expected = GetSpecialFolderAttribute(special) | FolderAttributes.HasNoChildren; Assert.IsNotNull(folder, "Expected non-null {0} folder.", special); Assert.AreEqual(expected, folder.Attributes, "Expected {0} attributes to be \\HasNoChildren.", special); } else { Assert.IsNull(folder, "Expected null {0} folder.", special); } } // disable LIST-EXTENDED client.Capabilities &= ~ImapCapabilities.ListExtended; var personal = client.GetFolder(client.PersonalNamespaces[0]); var folders = (await personal.GetSubfoldersAsync()).ToList(); Assert.AreEqual(client.Inbox, folders[0], "Expected the first folder to be the Inbox."); Assert.AreEqual("[Gmail]", folders[1].FullName, "Expected the second folder to be [Gmail]."); Assert.AreEqual(FolderAttributes.NoSelect | FolderAttributes.HasChildren, folders[1].Attributes, "Expected [Gmail] folder to be \\Noselect \\HasChildren."); var created = await personal.CreateAsync("UnitTests", true); Assert.IsNotNull(created, "Expected a non-null created folder."); Assert.AreEqual(FolderAttributes.HasNoChildren, created.Attributes); Assert.IsNotNull(created.ParentFolder, "The ParentFolder property should not be null."); const MessageFlags ExpectedPermanentFlags = MessageFlags.Answered | MessageFlags.Flagged | MessageFlags.Draft | MessageFlags.Deleted | MessageFlags.Seen | MessageFlags.UserDefined; const MessageFlags ExpectedAcceptedFlags = MessageFlags.Answered | MessageFlags.Flagged | MessageFlags.Draft | MessageFlags.Deleted | MessageFlags.Seen; var access = await created.OpenAsync(FolderAccess.ReadWrite); Assert.AreEqual(FolderAccess.ReadWrite, access, "The UnitTests folder was not opened with the expected access mode."); Assert.AreEqual(ExpectedPermanentFlags, created.PermanentFlags, "The PermanentFlags do not match the expected value."); Assert.AreEqual(ExpectedAcceptedFlags, created.AcceptedFlags, "The AcceptedFlags do not match the expected value."); for (int i = 0; i < 50; i++) { using (var stream = GetResourceStream(string.Format("common.message.{0}.msg", i))) { var message = MimeMessage.Load(stream); var uid = await created.AppendAsync(message, MessageFlags.Seen); Assert.IsTrue(uid.HasValue, "Expected a UID to be returned from folder.Append()."); Assert.AreEqual((uint)(i + 1), uid.Value.Id, "The UID returned from the APPEND command does not match the expected UID."); } } var query = SearchQuery.ToContains("nsb").Or(SearchQuery.CcContains("nsb")); var matches = await created.SearchAsync(query); const MessageSummaryItems items = MessageSummaryItems.Full | MessageSummaryItems.UniqueId; var summaries = await created.FetchAsync(matches, items); foreach (var summary in summaries) { if (summary.UniqueId.IsValid) { await created.GetMessageAsync(summary.UniqueId); } else { await created.GetMessageAsync(summary.Index); } } await created.SetFlagsAsync(matches, MessageFlags.Seen | MessageFlags.Answered, false); await created.RemoveFlagsAsync(matches, MessageFlags.Answered, true); await created.AddFlagsAsync(matches, MessageFlags.Deleted, true); await created.CloseAsync(); Assert.IsFalse(created.IsOpen, "Expected the UnitTests folder to be closed."); await created.SubscribeAsync(); Assert.IsTrue(created.IsSubscribed, "Expected IsSubscribed to be true after subscribing to the folder."); var subscribed = (await personal.GetSubfoldersAsync(true)).ToList(); Assert.IsTrue(subscribed.Contains(created), "Expected the list of subscribed folders to contain the UnitTests folder."); await created.UnsubscribeAsync(); Assert.IsFalse(created.IsSubscribed, "Expected IsSubscribed to be false after unsubscribing from the folder."); var dummy = await created.CreateAsync("Dummy", true); bool dummyRenamed = false; bool renamed = false; bool deleted = false; dummy.Renamed += (sender, e) => { dummyRenamed = true; }; created.Renamed += (sender, e) => { renamed = true; }; await created.RenameAsync(created.ParentFolder, "RenamedUnitTests"); Assert.AreEqual("RenamedUnitTests", created.Name); Assert.AreEqual("RenamedUnitTests", created.FullName); Assert.IsTrue(renamed, "Expected the Rename event to be emitted for the UnitTests folder."); Assert.AreEqual("RenamedUnitTests/Dummy", dummy.FullName); Assert.IsTrue(dummyRenamed, "Expected the Rename event to be emitted for the UnitTests/Dummy folder."); created.Deleted += (sender, e) => { deleted = true; }; await created.DeleteAsync(); Assert.IsTrue(deleted, "Expected the Deleted event to be emitted for the UnitTests folder."); await client.DisconnectAsync(true); } }
public override void RunCommand(object sender) { var engine = (IAutomationEngineInstance)sender; string vIMAPHost = v_IMAPHost.ConvertUserVariableToString(engine); string vIMAPPort = v_IMAPPort.ConvertUserVariableToString(engine); string vIMAPUserName = v_IMAPUserName.ConvertUserVariableToString(engine); string vIMAPPassword = ((SecureString)v_IMAPPassword.ConvertUserVariableToObject(engine, nameof(v_IMAPPassword), this)).ConvertSecureStringToString(); string vIMAPSourceFolder = v_IMAPSourceFolder.ConvertUserVariableToString(engine); string vIMAPFilter = v_IMAPFilter.ConvertUserVariableToString(engine); string vIMAPMessageDirectory = v_IMAPMessageDirectory.ConvertUserVariableToString(engine); string vIMAPAttachmentDirectory = v_IMAPAttachmentDirectory.ConvertUserVariableToString(engine); using (var client = new ImapClient()) { client.ServerCertificateValidationCallback = (sndr, certificate, chain, sslPolicyErrors) => true; client.SslProtocols = SslProtocols.None; using (var cancel = new CancellationTokenSource()) { try { client.Connect(vIMAPHost, int.Parse(vIMAPPort), true, cancel.Token); //SSL } catch (Exception) { client.Connect(vIMAPHost, int.Parse(vIMAPPort)); //TLS } client.AuthenticationMechanisms.Remove("XOAUTH2"); client.Authenticate(vIMAPUserName, vIMAPPassword, cancel.Token); IMailFolder toplevel = client.GetFolder(client.PersonalNamespaces[0]); IMailFolder foundFolder = FindFolder(toplevel, vIMAPSourceFolder); if (foundFolder != null) { foundFolder.Open(FolderAccess.ReadWrite, cancel.Token); } else { throw new Exception("Source Folder not found"); } SearchQuery query; if (vIMAPFilter.ToLower() == "none") { query = SearchQuery.All; } else if (!string.IsNullOrEmpty(vIMAPFilter.Trim())) { query = SearchQuery.MessageContains(vIMAPFilter) .Or(SearchQuery.SubjectContains(vIMAPFilter)) .Or(SearchQuery.FromContains(vIMAPFilter)) .Or(SearchQuery.BccContains(vIMAPFilter)) .Or(SearchQuery.BodyContains(vIMAPFilter)) .Or(SearchQuery.CcContains(vIMAPFilter)) .Or(SearchQuery.ToContains(vIMAPFilter)); } else { throw new NullReferenceException("Filter not specified"); } if (v_IMAPGetUnreadOnly == "Yes") { query = query.And(SearchQuery.NotSeen); } var filteredItems = foundFolder.Search(query, cancel.Token); List <MimeMessage> outMail = new List <MimeMessage>(); foreach (UniqueId uid in filteredItems) { if (v_IMAPMarkAsRead == "Yes") { foundFolder.AddFlags(uid, MessageFlags.Seen, true); } MimeMessage message = foundFolder.GetMessage(uid, cancel.Token); if (v_IMAPSaveMessagesAndAttachments == "Yes") { ProcessEmail(message, vIMAPMessageDirectory, vIMAPAttachmentDirectory); } message.MessageId = $"{vIMAPSourceFolder}#{uid}"; outMail.Add(message); } outMail.StoreInUserVariable(engine, v_OutputUserVariableName, nameof(v_OutputUserVariableName), this); client.Disconnect(true, cancel.Token); client.ServerCertificateValidationCallback = null; } } }
public void TestImapClientGMail() { var commands = new List <ImapReplayCommand> (); commands.Add(new ImapReplayCommand("", "gmail.greeting.txt")); commands.Add(new ImapReplayCommand("A00000000 CAPABILITY\r\n", "gmail.capability.txt")); commands.Add(new ImapReplayCommand("A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\r\n", "gmail.authenticate.txt")); commands.Add(new ImapReplayCommand("A00000002 NAMESPACE\r\n", "gmail.namespace.txt")); commands.Add(new ImapReplayCommand("A00000003 LIST \"\" \"INBOX\"\r\n", "gmail.list-inbox.txt")); commands.Add(new ImapReplayCommand("A00000004 XLIST \"\" \"*\"\r\n", "gmail.xlist.txt")); commands.Add(new ImapReplayCommand("A00000005 LIST \"\" \"%\"\r\n", "gmail.list-personal.txt")); commands.Add(new ImapReplayCommand("A00000006 CREATE UnitTests\r\n", "gmail.create-unittests.txt")); commands.Add(new ImapReplayCommand("A00000007 LIST \"\" UnitTests\r\n", "gmail.list-unittests.txt")); commands.Add(new ImapReplayCommand("A00000008 SELECT UnitTests (CONDSTORE)\r\n", "gmail.select-unittests.txt")); for (int i = 0; i < 50; i++) { using (var stream = GetResourceStream(string.Format("common.message.{0}.msg", i))) { var message = MimeMessage.Load(stream); long length = stream.Length; string latin1; stream.Position = 0; using (var reader = new StreamReader(stream, Latin1)) latin1 = reader.ReadToEnd(); var command = string.Format("A{0:D8} APPEND UnitTests (\\Seen) ", i + 9); command += "{" + length + "}\r\n"; commands.Add(new ImapReplayCommand(command, "gmail.go-ahead.txt")); commands.Add(new ImapReplayCommand(latin1 + "\r\n", string.Format("gmail.append.{0}.txt", i + 1))); } } commands.Add(new ImapReplayCommand("A00000059 UID SEARCH RETURN () CHARSET US-ASCII OR TO nsb CC nsb\r\n", "gmail.search.txt")); commands.Add(new ImapReplayCommand("A00000060 UID FETCH 1:3,5,7:9,11:14,26:29,31,34,41:43,50 (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY)\r\n", "gmail.search-summary.txt")); commands.Add(new ImapReplayCommand("A00000061 UID FETCH 1 (BODY.PEEK[])\r\n", "gmail.fetch.1.txt")); commands.Add(new ImapReplayCommand("A00000062 UID FETCH 2 (BODY.PEEK[])\r\n", "gmail.fetch.2.txt")); commands.Add(new ImapReplayCommand("A00000063 UID FETCH 3 (BODY.PEEK[])\r\n", "gmail.fetch.3.txt")); commands.Add(new ImapReplayCommand("A00000064 UID FETCH 5 (BODY.PEEK[])\r\n", "gmail.fetch.5.txt")); commands.Add(new ImapReplayCommand("A00000065 UID FETCH 7 (BODY.PEEK[])\r\n", "gmail.fetch.7.txt")); commands.Add(new ImapReplayCommand("A00000066 UID FETCH 8 (BODY.PEEK[])\r\n", "gmail.fetch.8.txt")); commands.Add(new ImapReplayCommand("A00000067 UID FETCH 9 (BODY.PEEK[])\r\n", "gmail.fetch.9.txt")); commands.Add(new ImapReplayCommand("A00000068 UID FETCH 11 (BODY.PEEK[])\r\n", "gmail.fetch.11.txt")); commands.Add(new ImapReplayCommand("A00000069 UID FETCH 12 (BODY.PEEK[])\r\n", "gmail.fetch.12.txt")); commands.Add(new ImapReplayCommand("A00000070 UID FETCH 13 (BODY.PEEK[])\r\n", "gmail.fetch.13.txt")); commands.Add(new ImapReplayCommand("A00000071 UID FETCH 14 (BODY.PEEK[])\r\n", "gmail.fetch.14.txt")); commands.Add(new ImapReplayCommand("A00000072 UID FETCH 26 (BODY.PEEK[])\r\n", "gmail.fetch.26.txt")); commands.Add(new ImapReplayCommand("A00000073 UID FETCH 27 (BODY.PEEK[])\r\n", "gmail.fetch.27.txt")); commands.Add(new ImapReplayCommand("A00000074 UID FETCH 28 (BODY.PEEK[])\r\n", "gmail.fetch.28.txt")); commands.Add(new ImapReplayCommand("A00000075 UID FETCH 29 (BODY.PEEK[])\r\n", "gmail.fetch.29.txt")); commands.Add(new ImapReplayCommand("A00000076 UID FETCH 31 (BODY.PEEK[])\r\n", "gmail.fetch.31.txt")); commands.Add(new ImapReplayCommand("A00000077 UID FETCH 34 (BODY.PEEK[])\r\n", "gmail.fetch.34.txt")); commands.Add(new ImapReplayCommand("A00000078 UID FETCH 41 (BODY.PEEK[])\r\n", "gmail.fetch.41.txt")); commands.Add(new ImapReplayCommand("A00000079 UID FETCH 42 (BODY.PEEK[])\r\n", "gmail.fetch.42.txt")); commands.Add(new ImapReplayCommand("A00000080 UID FETCH 43 (BODY.PEEK[])\r\n", "gmail.fetch.43.txt")); commands.Add(new ImapReplayCommand("A00000081 UID FETCH 50 (BODY.PEEK[])\r\n", "gmail.fetch.50.txt")); commands.Add(new ImapReplayCommand("A00000082 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 FLAGS (\\Answered \\Seen)\r\n", "gmail.set-flags.txt")); commands.Add(new ImapReplayCommand("A00000083 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 -FLAGS.SILENT (\\Answered)\r\n", "gmail.remove-flags.txt")); commands.Add(new ImapReplayCommand("A00000084 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 +FLAGS.SILENT (\\Deleted)\r\n", "gmail.add-flags.txt")); commands.Add(new ImapReplayCommand("A00000085 UNSELECT\r\n", "gmail.unselect-unittests.txt")); commands.Add(new ImapReplayCommand("A00000086 DELETE UnitTests\r\n", "gmail.delete-unittests.txt")); commands.Add(new ImapReplayCommand("A00000087 LOGOUT\r\n", "gmail.logout.txt")); using (var client = new ImapClient()) { try { client.ReplayConnect("localhost", new ImapReplayStream(commands, false), CancellationToken.None); } catch (Exception ex) { Assert.Fail("Did not expect an exception in Connect: {0}", ex); } Assert.IsTrue(client.IsConnected, "Client failed to connect."); Assert.AreEqual(GMailInitialCapabilities, client.Capabilities); Assert.AreEqual(4, client.AuthenticationMechanisms.Count); Assert.IsTrue(client.AuthenticationMechanisms.Contains("XOAUTH"), "Expected SASL XOAUTH auth mechanism"); Assert.IsTrue(client.AuthenticationMechanisms.Contains("XOAUTH2"), "Expected SASL XOAUTH2 auth mechanism"); Assert.IsTrue(client.AuthenticationMechanisms.Contains("PLAIN"), "Expected SASL PLAIN auth mechanism"); Assert.IsTrue(client.AuthenticationMechanisms.Contains("PLAIN-CLIENTTOKEN"), "Expected SASL PLAIN-CLIENTTOKEN auth mechanism"); try { var credentials = new NetworkCredential("username", "password"); // Note: Do not try XOAUTH2 client.AuthenticationMechanisms.Remove("XOAUTH2"); client.Authenticate(credentials, CancellationToken.None); } catch (Exception ex) { Assert.Fail("Did not expect an exception in Authenticate: {0}", ex); } Assert.AreEqual(GMailAuthenticatedCapabilities, client.Capabilities); var inbox = client.Inbox; Assert.IsNotNull(inbox, "Expected non-null Inbox folder."); Assert.AreEqual(FolderAttributes.HasNoChildren, inbox.Attributes, "Expected Inbox attributes to be \\HasNoChildren."); foreach (var special in Enum.GetValues(typeof(SpecialFolder)).OfType <SpecialFolder> ()) { var folder = client.GetFolder(special); if (special != SpecialFolder.Archive) { var expected = GetSpecialFolderAttribute(special) | FolderAttributes.HasNoChildren; Assert.IsNotNull(folder, "Expected non-null {0} folder.", special); Assert.AreEqual(expected, folder.Attributes, "Expected {0} attributes to be \\HasNoChildren.", special); } else { Assert.IsNull(folder, "Expected null {0} folder.", special); } } var personal = client.GetFolder(client.PersonalNamespaces[0]); var folders = personal.GetSubfolders(false, CancellationToken.None).ToList(); Assert.AreEqual(client.Inbox, folders[0], "Expected the first folder to be the Inbox."); Assert.AreEqual("[Gmail]", folders[1].FullName, "Expected the second folder to be [Gmail]."); Assert.AreEqual(FolderAttributes.NoSelect | FolderAttributes.HasChildren, folders[1].Attributes, "Expected [Gmail] folder to be \\Noselect \\HasChildren."); var created = personal.Create("UnitTests", true, CancellationToken.None); Assert.IsNotNull(created.ParentFolder, "The ParentFolder property should not be null."); created.Open(FolderAccess.ReadWrite, CancellationToken.None); for (int i = 0; i < 50; i++) { using (var stream = GetResourceStream(string.Format("common.message.{0}.msg", i))) { var message = MimeMessage.Load(stream); created.Append(message, MessageFlags.Seen, CancellationToken.None); } } var query = SearchQuery.ToContains("nsb").Or(SearchQuery.CcContains("nsb")); var matches = created.Search(query, CancellationToken.None); const MessageSummaryItems items = MessageSummaryItems.Full | MessageSummaryItems.UniqueId; var summaries = created.Fetch(matches, items, CancellationToken.None); foreach (var summary in summaries) { created.GetMessage(summary.UniqueId, CancellationToken.None); } created.SetFlags(matches, MessageFlags.Seen | MessageFlags.Answered, false, CancellationToken.None); created.RemoveFlags(matches, MessageFlags.Answered, true, CancellationToken.None); created.AddFlags(matches, MessageFlags.Deleted, true, CancellationToken.None); created.Close(false, CancellationToken.None); created.Delete(CancellationToken.None); client.Disconnect(true, CancellationToken.None); } }
public SearchQuery CreateSearchQuery() { var query = new SearchQuery(); query = ApplyBool(query, Answered, SearchQuery.Answered, SearchQuery.NotAnswered); query = ApplyBool(query, Recent, SearchQuery.Recent, SearchQuery.NotRecent); query = ApplyBool(query, Deleted, SearchQuery.Deleted, SearchQuery.NotDeleted); query = ApplyBool(query, Flagged, SearchQuery.Flagged, SearchQuery.NotFlagged); query = ApplyBool(query, Seen, SearchQuery.Seen, SearchQuery.NotSeen); query = ApplyBool(query, New, SearchQuery.New, SearchQuery.Not(SearchQuery.New)); // TODO: Not(New) ?? if (Bcc != null) { query = query.And(SearchQuery.BccContains(Bcc)); } if (Cc != null) { query = query.And(SearchQuery.CcContains(Cc)); } if (To != null) { query = query.And(SearchQuery.ToContains(To)); } if (From != null) { query = query.And(SearchQuery.ToContains(From)); } if (Subject != null) { query = query.And(SearchQuery.ToContains(Subject)); } if (Text != null) { query = query.And(SearchQuery.ToContains(Text)); } if (Body != null) { query = query.And(SearchQuery.ToContains(Body)); } if (PostDating != null) { query = query.And(SearchQuery.SentOn((DateTime)PostDating)); } if (BeforeDateOfPosting != null) { query = query.And(SearchQuery.SentBefore((DateTime)BeforeDateOfPosting)); } if (AfterDateOfPosting != null) { query = query.And(SearchQuery.SentAfter((DateTime)AfterDateOfPosting)); } return(query); }
public void TestArgumentExceptions() { Assert.Throws <ArgumentNullException> (() => SearchQuery.And(null, SearchQuery.All)); Assert.Throws <ArgumentNullException> (() => SearchQuery.And(SearchQuery.All, null)); Assert.Throws <ArgumentNullException> (() => SearchQuery.AnnotationsContain(null, AnnotationAttribute.Value, "value")); Assert.Throws <ArgumentNullException> (() => SearchQuery.AnnotationsContain(AnnotationEntry.AltSubject, null, "value")); Assert.Throws <ArgumentException> (() => SearchQuery.AnnotationsContain(AnnotationEntry.AltSubject, AnnotationAttribute.Size, "value")); Assert.Throws <ArgumentNullException> (() => SearchQuery.BccContains(null)); Assert.Throws <ArgumentException> (() => SearchQuery.BccContains(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.BodyContains(null)); Assert.Throws <ArgumentException> (() => SearchQuery.BodyContains(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.CcContains(null)); Assert.Throws <ArgumentException> (() => SearchQuery.CcContains(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.DoesNotHaveCustomFlag(null)); Assert.Throws <ArgumentException> (() => SearchQuery.DoesNotHaveCustomFlag(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.DoesNotHaveCustomFlags(null)); Assert.Throws <ArgumentException> (() => SearchQuery.DoesNotHaveCustomFlags(new string[0])); Assert.Throws <ArgumentException> (() => SearchQuery.DoesNotHaveFlags(MessageFlags.None)); Assert.Throws <ArgumentNullException> (() => SearchQuery.Filter(null)); Assert.Throws <ArgumentException> (() => SearchQuery.Filter(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.FromContains(null)); Assert.Throws <ArgumentException> (() => SearchQuery.FromContains(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.Fuzzy(null)); Assert.Throws <ArgumentNullException> (() => SearchQuery.GMailRawSearch(null)); Assert.Throws <ArgumentException> (() => SearchQuery.GMailRawSearch(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.HasCustomFlag(null)); Assert.Throws <ArgumentException> (() => SearchQuery.HasCustomFlag(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.HasCustomFlags(null)); Assert.Throws <ArgumentException> (() => SearchQuery.HasCustomFlags(new string[0])); Assert.Throws <ArgumentException> (() => SearchQuery.HasFlags(MessageFlags.None)); Assert.Throws <ArgumentNullException> (() => SearchQuery.HasKeyword(null)); Assert.Throws <ArgumentException> (() => SearchQuery.HasKeyword(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.HasKeywords(null)); Assert.Throws <ArgumentException> (() => SearchQuery.HasKeywords(new string[0])); Assert.Throws <ArgumentException> (() => SearchQuery.HasKeywords(new string[] { "keyword", null })); Assert.Throws <ArgumentException> (() => SearchQuery.NotFlags(MessageFlags.None)); Assert.Throws <ArgumentNullException> (() => SearchQuery.NotKeyword(null)); Assert.Throws <ArgumentException> (() => SearchQuery.NotKeyword(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.NotKeywords(null)); Assert.Throws <ArgumentException> (() => SearchQuery.NotKeywords(new string[0])); Assert.Throws <ArgumentException> (() => SearchQuery.NotKeywords(new string [] { "keyword", null })); Assert.Throws <ArgumentNullException> (() => SearchQuery.HasGMailLabel(null)); Assert.Throws <ArgumentException> (() => SearchQuery.HasGMailLabel(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.HeaderContains(null, "text")); Assert.Throws <ArgumentException> (() => SearchQuery.HeaderContains(string.Empty, "text")); Assert.Throws <ArgumentNullException> (() => SearchQuery.HeaderContains("name", null)); Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.LargerThan(-1)); Assert.Throws <ArgumentNullException> (() => SearchQuery.MessageContains(null)); Assert.Throws <ArgumentException> (() => SearchQuery.MessageContains(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.Not(null)); Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.OlderThan(-1)); Assert.Throws <ArgumentNullException> (() => SearchQuery.Or(null, SearchQuery.All)); Assert.Throws <ArgumentNullException> (() => SearchQuery.Or(SearchQuery.All, null)); Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.SmallerThan(-1)); Assert.Throws <ArgumentNullException> (() => SearchQuery.SubjectContains(null)); Assert.Throws <ArgumentException> (() => SearchQuery.SubjectContains(string.Empty)); Assert.Throws <ArgumentNullException> (() => SearchQuery.ToContains(null)); Assert.Throws <ArgumentException> (() => SearchQuery.ToContains(string.Empty)); Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.YoungerThan(-1)); Assert.Throws <ArgumentNullException> (() => SearchQuery.All.And(null)); Assert.Throws <ArgumentNullException> (() => SearchQuery.All.Or(null)); Assert.Throws <ArgumentNullException> (() => new BinarySearchQuery(SearchTerm.And, null, SearchQuery.All)); Assert.Throws <ArgumentNullException> (() => new BinarySearchQuery(SearchTerm.And, SearchQuery.All, null)); Assert.Throws <ArgumentNullException> (() => new FilterSearchQuery(null)); Assert.Throws <ArgumentException> (() => new FilterSearchQuery(string.Empty)); Assert.Throws <ArgumentException> (() => new FilterSearchQuery(MetadataTag.Create("/dev/null"))); Assert.Throws <ArgumentNullException> (() => new HeaderSearchQuery(null, "text")); Assert.Throws <ArgumentException> (() => new HeaderSearchQuery(string.Empty, "text")); Assert.Throws <ArgumentNullException> (() => new HeaderSearchQuery("name", null)); Assert.Throws <ArgumentNullException> (() => new TextSearchQuery(SearchTerm.BodyContains, null)); Assert.Throws <ArgumentNullException> (() => new UidSearchQuery(null)); Assert.Throws <ArgumentException> (() => new UidSearchQuery(new UniqueIdSet())); Assert.Throws <ArgumentException> (() => new UidSearchQuery(UniqueId.Invalid)); Assert.Throws <ArgumentNullException> (() => new UnarySearchQuery(SearchTerm.Not, null)); }
private async void GetMessgesFromSenderMenuClick(Object sender, System.EventArgs e) { SearchRequestStringsWindow mySearchString = new SearchRequestStringsWindow("Enter Email Address To Sort Messages With It"); if (mySearchString.ShowDialog() == true) { if (mySearchString.SortRequestTbx.Text != "") { query = SearchQuery.FromContains(mySearchString.SortRequestTbx.Text).Or(SearchQuery.CcContains(mySearchString.SortRequestTbx.Text)); MessagesListTemp = await OperateData.Operating.CustomsDownloadBodyPartsAsync(OperateData.Operating.AccountsUpload()[IndexOfDynamicList], FolderName, query); messagesDetailsDataGrid.ItemsSource = MessagesListTemp; if (MessagesListTemp.Count > 0) { AddingMessagePartsToWindow(MessagesListTemp[0]); } else { MessageBox.Show("Selected folder is empty!"); } } else { MessageBox.Show("Enter a Request to Sort Messages!"); } } }