public Authenticate ( Portable.Text.Encoding encoding, ICredentials credentials, |
||
encoding | Portable.Text.Encoding | The text encoding to use for the user's credentials. |
credentials | ICredentials | The user's credentials. |
cancellationToken | The cancellation token. | |
Результат | void |
public ActionResult Index(int currentPageNumber, int nextPageNumber) { int startSerialNumber = ((nextPageNumber - 1) * 30) + 1; int endSerialNumber = ((nextPageNumber) * 30); List<Email> emails = new List<Email>(); try { userGmailConfig = FetchUserGmailProfile(); using (ImapClient client = new ImapClient()) { client.Connect(userGmailConfig.IncomingServerAddress, userGmailConfig.IncomingServerPort, true); client.Authenticate(new NetworkCredential(userGmailConfig.GmailUsername, userGmailConfig.GmailPassword)); var inbox = client.Inbox; inbox.Open(FolderAccess.ReadOnly); if (inbox.Count > 0) { int pageEndIndex = Math.Max(inbox.Count - startSerialNumber, 0); int pageStartIndex = Math.Max(inbox.Count - endSerialNumber, 0); var messages = inbox.Fetch(pageStartIndex, pageEndIndex, MessageSummaryItems.Envelope); messages = messages.OrderByDescending(message => message.Envelope.Date.Value.DateTime).ToList(); foreach (var message in messages) { if (startSerialNumber <= endSerialNumber) { Email tempEmail = new Email() { SerialNo = startSerialNumber, Uid = message.UniqueId, FromDisplayName = message.Envelope.From.First().Name, FromEmail = message.Envelope.From.First().ToString(), To = message.Envelope.To.ToString(), Subject = message.NormalizedSubject, TimeReceived = message.Envelope.Date.Value.DateTime, HasAttachment = message.Attachments.Count() > 0 ? true : false }; emails.Add(tempEmail); startSerialNumber++; } } } } ViewBag.EmailId = userGmailConfig.GmailUsername; ViewBag.NoOfEmails = endSerialNumber; if (currentPageNumber > nextPageNumber) { ViewBag.PageNumber = currentPageNumber - 1; } else { ViewBag.PageNumber = currentPageNumber + 1; } } catch (Exception ex) { ViewBag.ErrorMessage = "There was an error in processing your request. Exception: " + ex.Message; } return View(emails); }
public static void DownloadMessages () { using (var client = new ImapClient (new ProtocolLogger ("imap.log"))) { client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect); client.Authenticate ("username", "password"); client.Inbox.Open (FolderAccess.ReadOnly); var uids = client.Inbox.Search (SearchQuery.All); foreach (var uid in uids) { var message = client.Inbox.GetMessage (uid); // write the message to a file message.WriteTo (string.Format ("{0}.msg", uid)); } client.Disconnect (true); } }
public void login() { result.credential = GoogleWebAuthorizationBroker.AuthorizeAsync( new ClientSecrets { ClientId = "316924129116-efm2iopj3strkrpbjkf7oeqmptn8ph27.apps.googleusercontent.com", ClientSecret = "MAxnno9YGxGTdtNiEqItt8-n" }, new[] { "https://mail.google.com/ email" }, "Tiramisu", CancellationToken.None, new FileDataStore("Analytics.Auth.Store")).Result; if (result.credential != null) { result.service = new PlusService(new BaseClientService.Initializer() { HttpClientInitializer = result.credential, ApplicationName = "Google mail", }); Google.Apis.Plus.v1.Data.Person me = result.service.People.Get("me").Execute(); Google.Apis.Plus.v1.Data.Person.EmailsData myAccountEmail = me.Emails.Where(a => a.Type == "account").FirstOrDefault(); imapClient = new MailKit.Net.Imap.ImapClient(); var credentials = new NetworkCredential(myAccountEmail.Value, result.credential.Token.AccessToken); imapClient.Connect("imap.gmail.com", 993, true, CancellationToken.None); imapClient.Authenticate(credentials, CancellationToken.None); } }
public static void Capabilities () { using (var client = new ImapClient ()) { client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect); var mechanisms = string.Join (", ", client.AuthenticationMechanisms); Console.WriteLine ("The IMAP server supports the following SASL authentication mechanisms: {0}", mechanisms); client.Authenticate ("username", "password"); if (client.Capabilities.HasFlag (ImapCapabilities.Id)) { var clientImplementation = new ImapImplementation { Name = "MailKit", Version = "1.0" }; var serverImplementation = client.Identify (clientImplementation); Console.WriteLine ("Server implementation details:"); foreach (var property in serverImplementation.Properties) Console.WriteLine (" {0} = {1}", property.Key, property.Value); } if (client.Capabilities.HasFlag (ImapCapabilities.Acl)) { Console.WriteLine ("The IMAP server supports Access Control Lists."); Console.WriteLine ("The IMAP server supports the following access rights: {0}", client.Rights); Console.WriteLine ("The Inbox has the following access controls:"); var acl = client.Inbox.GetAccessControlList (); foreach (var ac in acl) Console.WriteLine (" {0} = {1}", ac.Name, ac.Rights); var myRights = client.Inbox.GetMyAccessRights (); Console.WriteLine ("Your current rights for the Inbox folder are: {0}", myRights); } if (client.Capabilities.HasFlag (ImapCapabilities.Quota)) { Console.WriteLine ("The IMAP server supports quotas."); Console.WriteLine ("The current quota for the Inbox is:"); var quota = client.Inbox.GetQuota (); if (quota.StorageLimit.HasValue && quota.StorageLimit.Value) Console.WriteLine (" Limited by storage space. Using {0} out of {1} bytes.", quota.CurrentStorageSize.Value, quota.StorageLimit.Value); if (quota.MessageLimit.HasValue && quota.MessageLimit.Value) Console.WriteLine (" Limited by the number of messages. Using {0} out of {1} bytes.", quota.CurrentMessageCount.Value, quota.MessageLimit.Value); Console.WriteLine ("The quota root is: {0}", quota.QuotaRoot); } if (client.Capabilities.HasFlag (ImapCapabilities.Thread)) { if (client.ThreadingAlgorithms.Contains (ThreadingAlgorithm.OrderedSubject)) Console.WriteLine ("The IMAP server supports threading by subject."); if (client.ThreadingAlgorithms.Contains (ThreadingAlgorithm.References)) Console.WriteLine ("The IMAP server supports threading by references."); } client.Disconnect (true); } }
public ImapClient Init() { if (BindingInfo == null) { throw new MissingFieldException("BindingInfo is missing"); } Client = new ImapClient(); Client.Timeout = 10000; Client.Connect(host: BindingInfo.Server, port: BindingInfo.Port, useSsl: BindingInfo.EnableSSL); Client.AuthenticationMechanisms.Remove("XOAUTH2"); Client.Authenticate(userName: BindingInfo.Mail, password: BindingInfo.Token); return Client; }
public ActionResult Index() { long noOfEmails = 1; UniqueId lastUid = new UniqueId(); List<Email> emails = new List<Email>(); try { userGmailConfig = FetchUserGmailProfile(); using (ImapClient client = new ImapClient()) { client.Connect(userGmailConfig.IncomingServerAddress, userGmailConfig.IncomingServerPort, true); client.Authenticate(new NetworkCredential(userGmailConfig.GmailUsername, userGmailConfig.GmailPassword)); var inbox = client.Inbox; inbox.Open(FolderAccess.ReadOnly); if (inbox.Count > 0) { int index = Math.Max(inbox.Count - 30, 0); var uids = (from c in inbox.Fetch(index, -1, MessageSummaryItems.UniqueId) select c.UniqueId).ToList(); var messages = inbox.Fetch(uids, MessageSummaryItems.Envelope); messages = messages.OrderByDescending(message => message.Envelope.Date.Value.DateTime).ToList(); foreach (var message in messages) { Email tempEmail = new Email() { SerialNo = noOfEmails, Uid = message.UniqueId, FromDisplayName = message.Envelope.From.First().Name, FromEmail = message.Envelope.From.First().ToString(), To = message.Envelope.To.ToString(), Subject = message.NormalizedSubject, TimeReceived = message.Envelope.Date.Value.DateTime, HasAttachment = message.Attachments.Count() > 0 ? true : false }; lastUid = tempEmail.Uid; emails.Add(tempEmail); noOfEmails++; } } } ViewBag.EmailId = userGmailConfig.GmailUsername; } catch (Exception ex) { ViewBag.ErrorMessage = "There was an error in processing your request. Exception: " + ex.Message; } ViewBag.NoOfEmails = 30; ViewBag.PageNumber = 1; return View(emails); }
public void TestMessageCount() { 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")); //INBOX has 1 message present in this test commands.Add (new ImapReplayCommand ("A00000005 EXAMINE INBOX (CONDSTORE)\r\n", "gmail.count.examine.txt")); //next command simulates one expunge + one new message commands.Add (new ImapReplayCommand ("A00000006 NOOP\r\n", "gmail.count.noop.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."); 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); } var count = -1; client.Inbox.Open(FolderAccess.ReadOnly); client.Inbox.CountChanged += delegate { count = client.Inbox.Count; }; client.NoOp(); Assert.AreEqual(1, count, "Count is not correct"); } }
public JsonResult Delete(string csEmailUids) { JsonResult jsonResult = new JsonResult(); var outputMessage = ""; try { userGmailConfig = FetchUserGmailProfile(); using (ImapClient client = new ImapClient()) { client.Connect(userGmailConfig.IncomingServerAddress, userGmailConfig.IncomingServerPort, true); client.Authenticate(new NetworkCredential(userGmailConfig.GmailUsername, userGmailConfig.GmailPassword)); var inbox = client.Inbox; inbox.Open(FolderAccess.ReadWrite); var uids = new List<UniqueId>(); if (csEmailUids.Contains(',')) { foreach (var item in csEmailUids.Split(',')) { uids.Add(new UniqueId(Convert.ToUInt32(item))); } } else { uids.Add(new UniqueId(Convert.ToUInt32(csEmailUids))); } client.Inbox.AddFlags(uids, MessageFlags.Deleted, true); if (client.Capabilities.HasFlag(ImapCapabilities.UidPlus)) { client.Inbox.Expunge(uids); } else { client.Inbox.Expunge(); } outputMessage = "Email(s) deleted successfully!"; } } catch (Exception ex) { outputMessage = "There was an error in processing your request. Exception: " + ex.Message; } jsonResult.Data = new { message = outputMessage, }; return jsonResult; }
private static IMailFolder AuthenticateAndgetInbox(MailReceiverSettings settings, ImapClient client) { client.Connect(settings.Server, port: settings.Port, useSsl: settings.UseSsl); client.AuthenticationMechanisms.Remove(item: "XOAUTH2"); client.Authenticate(settings.User, settings.Password); IMailFolder inbox = client.Inbox; inbox.Open(FolderAccess.ReadOnly); return inbox; }
private void CheckImapMail() { try { using (ImapClient imapClient = new ImapClient()) { imapClient.Connect(_configuration.ServerName, _configuration.Port, _configuration.SSL); imapClient.AuthenticationMechanisms.Remove("XOAUTH2"); imapClient.Authenticate(_configuration.UserName, _configuration.Password); IMailFolder inbox = imapClient.Inbox; inbox.Open(FolderAccess.ReadWrite); foreach (UniqueId msgUid in inbox.Search(SearchQuery.NotSeen)) { MimeMessage msg = inbox.GetMessage(msgUid); ProcessMail(msg); inbox.SetFlags(msgUid, MessageFlags.Seen, true); } } } catch (Exception ex) { // Sometimes an error occures, e.g. if the network was disconected or a timeout occured. Logger.Instance.LogException(this, ex); } }
public bool CheckAndSend(string user, string pwd, string imapUri, string smtpUri) { using (var client = new ImapClient()) { var credentials = new NetworkCredential(user, pwd); var uriObj = new Uri(imapUri); using (var cancel = new CancellationTokenSource()) { client.Connect(uriObj, cancel.Token); // Note: since we don't have an OAuth2 token, disable // the XOAUTH2 authentication mechanism. client.AuthenticationMechanisms.Remove("XOAUTH"); client.Authenticate(credentials, cancel.Token); // The Inbox folder is always available on all IMAP servers... var draftBox = client.GetFolder(SpecialFolder.Drafts); if (draftBox == null) draftBox = client.GetFolder("Drafts"); draftBox.Open(FolderAccess.ReadWrite, cancel.Token); Console.WriteLine("Total messages: {0}", draftBox.Count); Console.WriteLine("Recent messages: {0}", draftBox.Recent); SearchQuery query = SearchQuery.All; //query = SearchQuery.ToContains("*****@*****.**"); UniqueId[] uids = draftBox.Search(query); int count = 0; for (int i = uids.Length - 1; i >= 0; i--) { UniqueId uid = uids[i]; var message = draftBox.GetMessage(uid, cancel.Token); DateTimeOffset dto1 = DateTimeOffset.UtcNow; if (dto1.AddHours(-12) >= message.Date) break; Console.WriteLine("Subject: {0}", message.Subject); Console.WriteLine("Date: {0}", message.Date); if (message.Bcc.Count > 0) { foreach (InternetAddress addr in message.Bcc) { string addrString = addr.Name; if (string.IsNullOrEmpty(addrString)) { addrString = addr.ToString(); if (addrString.Contains("<")) addrString = addrString.Substring(addrString.LastIndexOf("<") + 1, addrString.LastIndexOf(">") - addrString.LastIndexOf("<") -1); } //if (addr.Name.Contains("send@")) if (addrString.Contains("send@")) { //string time = addr.Name.Replace("send@", ""); string time = addrString.Replace("send@", ""); Console.WriteLine("Scheduled mail is found. Scheduled time: {0}", time); count++; string[] parts = time.Split(new char[] { '.' }); if (parts.Length != 2) continue; int hour = 0; int minute = 0; DateTimeOffset dt2 = message.Date; DateTimeOffset offset2; if (int.TryParse(parts[0], out hour)) { if (int.TryParse(parts[1], out minute)) { dt2 = dt2.AddHours(hour - dt2.Hour); dt2 = dt2.AddMinutes(minute - dt2.Minute); dt2 = dt2.AddSeconds(0 - dt2.Second); if (dt2 <= DateTimeOffset.UtcNow && dt2 >= DateTimeOffset.UtcNow.AddHours(-1)) { message.Bcc.Remove(addr); this.Send(message, user, pwd, smtpUri); for (int retry = 1, maxRetry = 10; retry <= maxRetry; i++) { Thread.Sleep(20 * 1000); try { Console.WriteLine("{0} in {1} trys to delete draft", retry, maxRetry); draftBox.SetFlags(new UniqueId[] { uid }, MessageFlags.Deleted, true); draftBox.Expunge(); } catch (IOException e) { retry++; continue; } break; } Console.WriteLine("Scheduled mail is sent. Subject: {0}", message.Subject); break; } else Console.WriteLine("Scheduled time is not satisfied. Mail is not sent. Subject: {0}", message.Subject); } } } } } } Console.WriteLine("Total count for scheduled mails: {0}", count); client.Disconnect(true, cancel.Token); } } return false; }
public void TestExtractingPrecisePangolinAttachment() { 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 EXAMINE INBOX (CONDSTORE)\r\n", "gmail.examine-inbox.txt")); commands.Add (new ImapReplayCommand ("A00000007 FETCH 270 (BODY.PEEK[])\r\n", "gmail.precise-pangolin-message.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."); client.Inbox.Open (FolderAccess.ReadOnly, CancellationToken.None); var message = client.Inbox.GetMessage (269, CancellationToken.None); foreach (var attachment in message.Attachments) { using (var stream = File.Create ("attachment.txt")) { var options = FormatOptions.Default.Clone (); options.NewLineFormat = NewLineFormat.Dos; attachment.WriteTo (options, stream); } using (var stream = File.Create (attachment.FileName)) { attachment.ContentObject.DecodeTo (stream); stream.Close (); } } client.Disconnect (false, CancellationToken.None); } }
public JsonResult Read(uint emailUid) { JsonResult email = new JsonResult(); var outputMessage = ""; try { userGmailConfig = FetchUserGmailProfile(); using (ImapClient client = new ImapClient()) { client.Connect(userGmailConfig.IncomingServerAddress, userGmailConfig.IncomingServerPort, true); client.Authenticate(new NetworkCredential(userGmailConfig.GmailUsername, userGmailConfig.GmailPassword)); var inbox = client.Inbox; inbox.Open(FolderAccess.ReadOnly); MimeMessage message = inbox.GetMessage(new UniqueId(emailUid)); email.Data = new { FromDisplayName = message.From.FirstOrDefault().Name, FromEmail = message.From.FirstOrDefault().ToString(), To = message.To.FirstOrDefault().ToString(), Subject = message.Subject, Body = message.HtmlBody, message = "Email fetched successfully" }; } } catch (Exception ex) { outputMessage = "There was an error in processing your request. Exception: " + ex.Message; } email.Data = new { message = outputMessage, }; return email; }
public void TestImapClientFeatures () { 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 ID (\"name\" \"MailKit\" \"version\" \"1.0\" \"vendor\" \"Xamarin Inc.\")\r\n", "common.id.txt")); commands.Add (new ImapReplayCommand ("A00000006 GETQUOTAROOT INBOX\r\n", "common.getquota.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"); try { var credentials = new NetworkCredential ("username", "password"); // Note: Do not try XOAUTH2 client.AuthenticationMechanisms.Remove ("XOAUTH2"); client.Authenticate (credentials); } catch (Exception ex) { Assert.Fail ("Did not expect an exception in Authenticate: {0}", ex); } Assert.AreEqual (GMailAuthenticatedCapabilities, client.Capabilities); var implementation = new ImapImplementation { Name = "MailKit", Version = "1.0", Vendor = "Xamarin Inc." }; implementation = client.Identify (implementation); Assert.IsNotNull (implementation, "Expected a non-null ID response."); Assert.AreEqual ("GImap", implementation.Name); Assert.AreEqual ("Google, Inc.", implementation.Vendor); Assert.AreEqual ("http://support.google.com/mail", implementation.SupportUrl); Assert.AreEqual ("gmail_imap_150623.03_p1", implementation.Version); Assert.AreEqual ("127.0.0.1", implementation.Properties["remote-host"]); var personal = client.GetFolder (client.PersonalNamespaces[0]); 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."); var quota = inbox.GetQuota (); Assert.IsNotNull (quota, "Expected a non-null GETQUOTAROOT response."); Assert.AreEqual (personal.FullName, quota.QuotaRoot.FullName); Assert.AreEqual (personal, quota.QuotaRoot); Assert.AreEqual (3783, quota.CurrentStorageSize.Value); Assert.AreEqual (15728640, quota.StorageLimit.Value); Assert.IsFalse (quota.CurrentMessageCount.HasValue); Assert.IsFalse (quota.MessageLimit.HasValue); client.Disconnect (false); } }
public void TestExtractingPrecisePangolinAttachment () { 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 EXAMINE INBOX (CONDSTORE)\r\n", "gmail.examine-inbox.txt")); commands.Add (new ImapReplayCommand ("A00000007 FETCH 270 (BODY.PEEK[])\r\n", "gmail.precise-pangolin-message.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"); try { var credentials = new NetworkCredential ("username", "password"); // Note: Do not try XOAUTH2 client.AuthenticationMechanisms.Remove ("XOAUTH2"); client.Authenticate (credentials); } 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); } } var personal = client.GetFolder (client.PersonalNamespaces[0]); var folders = personal.GetSubfolders ().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."); client.Inbox.Open (FolderAccess.ReadOnly); var message = client.Inbox.GetMessage (269); using (var jpeg = new MemoryStream ()) { var attachment = message.Attachments.OfType<MimePart> ().FirstOrDefault (); attachment.ContentObject.DecodeTo (jpeg); jpeg.Position = 0; using (var md5 = new MD5CryptoServiceProvider ()) { var md5sum = HexEncode (md5.ComputeHash (jpeg)); Assert.AreEqual ("167a46aa81e881da2ea8a840727384d3", md5sum, "MD5 checksums do not match."); } } client.Disconnect (false); } }
public void TestAccessControlLists () { var commands = new List<ImapReplayCommand> (); commands.Add (new ImapReplayCommand ("", "gmail.greeting.txt")); commands.Add (new ImapReplayCommand ("A00000000 CAPABILITY\r\n", "acl.capability.txt")); commands.Add (new ImapReplayCommand ("A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\r\n", "acl.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 GETACL INBOX\r\n", "acl.getacl.txt")); commands.Add (new ImapReplayCommand ("A00000006 LISTRIGHTS INBOX smith\r\n", "acl.listrights.txt")); commands.Add (new ImapReplayCommand ("A00000007 MYRIGHTS INBOX\r\n", "acl.myrights.txt")); commands.Add (new ImapReplayCommand ("A00000008 SETACL INBOX smith +lrswida\r\n", ImapReplayCommandResponse.OK)); commands.Add (new ImapReplayCommand ("A00000009 SETACL INBOX smith -lrswida\r\n", ImapReplayCommandResponse.OK)); commands.Add (new ImapReplayCommand ("A00000010 SETACL INBOX smith lrswida\r\n", ImapReplayCommandResponse.OK)); commands.Add (new ImapReplayCommand ("A00000011 DELETEACL INBOX smith\r\n", ImapReplayCommandResponse.OK)); 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 (AclInitialCapabilities, 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); } catch (Exception ex) { Assert.Fail ("Did not expect an exception in Authenticate: {0}", ex); } Assert.AreEqual (AclAuthenticatedCapabilities, 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); } } // GETACL INBOX var acl = client.Inbox.GetAccessControlList (); Assert.AreEqual (2, acl.Count, "The number of access controls does not match."); Assert.AreEqual ("Fred", acl[0].Name, "The identifier for the first access control does not match."); Assert.AreEqual ("rwipslxetad", acl[0].Rights.ToString (), "The access rights for the first access control does not match."); Assert.AreEqual ("Chris", acl[1].Name, "The identifier for the second access control does not match."); Assert.AreEqual ("lrswi", acl[1].Rights.ToString (), "The access rights for the second access control does not match."); // LISTRIGHTS INBOX smith var rights = client.Inbox.GetAccessRights ("smith"); Assert.AreEqual ("lrswipkxtecda0123456789", rights.ToString (), "The access rights do not match for user smith."); // MYRIGHTS INBOX rights = client.Inbox.GetMyAccessRights (); Assert.AreEqual ("rwiptsldaex", rights.ToString (), "My access rights do not match."); // SETACL INBOX smith +lrswida client.Inbox.AddAccessRights ("smith", new AccessRights ("lrswida")); // SETACL INBOX smith -lrswida client.Inbox.RemoveAccessRights ("smith", new AccessRights ("lrswida")); // SETACL INBOX smith lrswida client.Inbox.SetAccessRights ("smith", new AccessRights ("lrswida")); // DELETEACL INBOX smith client.Inbox.RemoveAccess ("smith"); client.Disconnect (false); } }
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", 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 () 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", 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"); try { var credentials = new NetworkCredential ("username", "password"); // Note: Do not try XOAUTH2 client.AuthenticationMechanisms.Remove ("XOAUTH2"); client.Authenticate (credentials); } 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); } } var personal = client.GetFolder (client.PersonalNamespaces[0]); var folders = personal.GetSubfolders ().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); 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 = created.Open (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 = created.Append (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 = created.Search (query); const MessageSummaryItems items = MessageSummaryItems.Full | MessageSummaryItems.UniqueId; var summaries = created.Fetch (matches, items); foreach (var summary in summaries) { if (summary.UniqueId.IsValid) created.GetMessage (summary.UniqueId); else created.GetMessage (summary.Index); } created.SetFlags (matches, MessageFlags.Seen | MessageFlags.Answered, false); created.RemoveFlags (matches, MessageFlags.Answered, true); created.AddFlags (matches, MessageFlags.Deleted, true); created.Close (); Assert.IsFalse (created.IsOpen, "Expected the UnitTests folder to be closed."); created.Subscribe (); Assert.IsTrue (created.IsSubscribed, "Expected IsSubscribed to be true after subscribing to the folder."); var subscribed = personal.GetSubfolders (true).ToList (); Assert.IsTrue (subscribed.Contains (created), "Expected the list of subscribed folders to contain the UnitTests folder."); created.Unsubscribe (); Assert.IsFalse (created.IsSubscribed, "Expected IsSubscribed to be false after unsubscribing from the folder."); var dummy = created.Create ("Dummy", true); bool dummyRenamed = false; bool renamed = false; dummy.Renamed += (sender, e) => { dummyRenamed = true; }; created.Renamed += (sender, e) => { renamed = true; }; created.Rename (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.Delete (CancellationToken.None); client.Disconnect (true); } }
public static void Main(string[] args) { var logger = new ProtocolLogger (Console.OpenStandardError ()); using (var client = new ImapClient (logger)) { var credentials = new NetworkCredential ("*****@*****.**", "password"); var uri = new Uri ("imaps://imap.gmail.com"); client.Connect (uri); // Remove the XOAUTH2 authentication mechanism since we don't have an OAuth2 token. client.AuthenticationMechanisms.Remove ("XOAUTH2"); client.Authenticate (credentials); client.Inbox.Open (FolderAccess.ReadOnly); // keep track of the messages var messages = client.Inbox.Fetch (0, -1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId).ToList (); // connect to some events... client.Inbox.MessagesArrived += (sender, e) => { // Note: the CountChanged event will fire when new messages arrive in the folder. var folder = (ImapFolder) sender; // New messages have arrived in the folder. Console.WriteLine ("{0}: {1} new messages have arrived.", folder, e.Count); // Note: your first instict may be to fetch these new messages now, but you cannot do // that in an event handler (the ImapFolder is not re-entrant). }; client.Inbox.MessageExpunged += (sender, e) => { var folder = (ImapFolder) sender; if (e.Index < messages.Count) { var message = messages[e.Index]; Console.WriteLine ("{0}: expunged message {1}: Subject: {2}", folder, e.Index, message.Envelope.Subject); // Note: If you are keeping a local cache of message information // (e.g. MessageSummary data) for the folder, then you'll need // to remove the message at e.Index. messages.RemoveAt (e.Index); } else { Console.WriteLine ("{0}: expunged message {1}: Unknown message.", folder, e.Index); } }; client.Inbox.MessageFlagsChanged += (sender, e) => { var folder = (ImapFolder) sender; Console.WriteLine ("{0}: flags for message {1} have changed to: {2}.", folder, e.Index, e.Flags); }; Console.WriteLine ("Hit any key to end the IDLE loop."); using (var done = new CancellationTokenSource ()) { var thread = new Thread (IdleLoop); thread.Start (new IdleState (client, done.Token)); Console.ReadKey (); done.Cancel (); thread.Join (); } if (client.Inbox.Count > messages.Count) { Console.WriteLine ("The new messages that arrived during IDLE are:"); foreach (var message in client.Inbox.Fetch (messages.Count, -1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId)) Console.WriteLine ("Subject: {0}", message.Envelope.Subject); } client.Disconnect (true); } }
public void TestArgumentExceptions () { using (var client = new ImapClient ()) { // Connect Assert.Throws<ArgumentNullException> (() => client.Connect ((Uri) null)); Assert.Throws<ArgumentNullException> (async () => await client.ConnectAsync ((Uri) null)); Assert.Throws<ArgumentNullException> (() => client.Connect (null, 143, false)); Assert.Throws<ArgumentNullException> (async () => await client.ConnectAsync (null, 143, false)); Assert.Throws<ArgumentException> (() => client.Connect (string.Empty, 143, false)); Assert.Throws<ArgumentException> (async () => await client.ConnectAsync (string.Empty, 143, false)); Assert.Throws<ArgumentOutOfRangeException> (() => client.Connect ("host", -1, false)); Assert.Throws<ArgumentOutOfRangeException> (async () => await client.ConnectAsync ("host", -1, false)); Assert.Throws<ArgumentNullException> (() => client.Connect (null, 143, SecureSocketOptions.None)); Assert.Throws<ArgumentNullException> (async () => await client.ConnectAsync (null, 143, SecureSocketOptions.None)); Assert.Throws<ArgumentException> (() => client.Connect (string.Empty, 143, SecureSocketOptions.None)); Assert.Throws<ArgumentException> (async () => await client.ConnectAsync (string.Empty, 143, SecureSocketOptions.None)); Assert.Throws<ArgumentOutOfRangeException> (() => client.Connect ("host", -1, SecureSocketOptions.None)); Assert.Throws<ArgumentOutOfRangeException> (async () => await client.ConnectAsync ("host", -1, SecureSocketOptions.None)); // Authenticate Assert.Throws<ArgumentNullException> (() => client.Authenticate (null)); Assert.Throws<ArgumentNullException> (async () => await client.AuthenticateAsync (null)); Assert.Throws<ArgumentNullException> (() => client.Authenticate (null, "password")); Assert.Throws<ArgumentNullException> (async () => await client.AuthenticateAsync (null, "password")); Assert.Throws<ArgumentNullException> (() => client.Authenticate ("username", null)); Assert.Throws<ArgumentNullException> (async () => await client.AuthenticateAsync ("username", 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); 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) { var message = 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 RC getMessages(bool bUsePop3 = false, int iPortToUse = 0) { try { if (bUsePop3) { using (var client = new Pop3Client ()) { if (iPortToUse == 0) { client.Connect (m_EmailServiceDescription.Pop3Url, 110, true); } else { client.Connect (m_EmailServiceDescription.Pop3Url, iPortToUse, true); } // Note: since we don't have an OAuth2 token, disable // the XOAUTH2 authentication mechanism. client.AuthenticationMechanisms.Remove ("XOAUTH2"); client.Authenticate (m_AuthInfo.m_sId, m_AuthInfo.m_sPassword); for (int i = 0; i < client.Count; i++) { var message = client.GetMessage (i); string sPlainBody = m_OpenPgpCrypter.DecryptPgpString(message.GetTextBody(MimeKit.Text.TextFormat.Text)); m_ConversationManager.addMessage (m_sProtocol, message.Subject + " " + sPlainBody, message.Sender.Address, m_AuthInfo.m_sId); } client.Disconnect(true); return RC.RC_OK; } } else //use IMAP { using (var client = new ImapClient ()) { if (iPortToUse == 0) { client.Connect (m_EmailServiceDescription.ImapUrl, 993, true); } else { client.Connect (m_EmailServiceDescription.ImapUrl, iPortToUse, true); } // Note: since we don't have an OAuth2 token, disable // the XOAUTH2 authentication mechanism. client.AuthenticationMechanisms.Remove ("XOAUTH2"); client.Authenticate (m_AuthInfo.m_sId, m_AuthInfo.m_sPassword); // The Inbox folder is always available on all IMAP servers... var inbox = client.Inbox; inbox.Open (FolderAccess.ReadOnly); //TODO: delete writeline Console.WriteLine ("Total messages: {0}", inbox.Count); Console.WriteLine ("Recent messages: {0}", inbox.Recent); for (int i = 0; i < inbox.Count; i++) { var message = inbox.GetMessage (i); m_ConversationManager.addMessage (m_sProtocol, message.Subject + message.Body, message.Sender.Address, m_AuthInfo.m_sId); } client.Disconnect (true); return RC.RC_OK; } } } catch(Exception e) { m_Logger.log (ELogLevel.LVL_WARNING, e.Message, m_sModuleName); return RC.RC_INBOX_NOT_AVAILABLE; } }
public static void Main (string[] args) { using (var client = new ImapClient (new ProtocolLogger (Console.OpenStandardError ()))) { client.Connect ("imap.gmail.com", 993, true); // Remove the XOAUTH2 authentication mechanism since we don't have an OAuth2 token. client.AuthenticationMechanisms.Remove ("XOAUTH2"); client.Authenticate ("*****@*****.**", "password"); client.Inbox.Open (FolderAccess.ReadOnly); // Get the summary information of all of the messages (suitable for displaying in a message list). var messages = client.Inbox.Fetch (0, -1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId).ToList (); // Keep track of messages being expunged so that when the CountChanged event fires, we can tell if it's // because new messages have arrived vs messages being removed (or some combination of the two). client.Inbox.MessageExpunged += (sender, e) => { var folder = (ImapFolder) sender; if (e.Index < messages.Count) { var message = messages[e.Index]; Console.WriteLine ("{0}: expunged message {1}: Subject: {2}", folder, e.Index, message.Envelope.Subject); // Note: If you are keeping a local cache of message information // (e.g. MessageSummary data) for the folder, then you'll need // to remove the message at e.Index. messages.RemoveAt (e.Index); } else { Console.WriteLine ("{0}: expunged message {1}: Unknown message.", folder, e.Index); } }; // Keep track of changes to the number of messages in the folder (this is how we'll tell if new messages have arrived). client.Inbox.CountChanged += (sender, e) => { // Note: the CountChanged event will fire when new messages arrive in the folder and/or when messages are expunged. var folder = (ImapFolder) sender; Console.WriteLine ("The number of messages in {0} has changed.", folder); // Note: because we are keeping track of the MessageExpunged event and updating our // 'messages' list, we know that if we get a CountChanged event and folder.Count is // larger than messages.Count, then it means that new messages have arrived. if (folder.Count > messages.Count) { Console.WriteLine ("{0} new messages have arrived.", folder.Count - messages.Count); // Note: your first instict may be to fetch these new messages now, but you cannot do // that in this event handler (the ImapFolder is not re-entrant). // // If this code had access to the 'done' CancellationTokenSource (see below), it could // cancel that to cause the IDLE loop to end. } }; // Keep track of flag changes. client.Inbox.MessageFlagsChanged += (sender, e) => { var folder = (ImapFolder) sender; Console.WriteLine ("{0}: flags for message {1} have changed to: {2}.", folder, e.Index, e.Flags); }; Console.WriteLine ("Hit any key to end the IDLE loop."); using (var done = new CancellationTokenSource ()) { // Note: when the 'done' CancellationTokenSource is cancelled, it ends to IDLE loop. var thread = new Thread (IdleLoop); thread.Start (new IdleState (client, done.Token)); Console.ReadKey (); done.Cancel (); thread.Join (); } if (client.Inbox.Count > messages.Count) { Console.WriteLine ("The new messages that arrived during IDLE are:"); foreach (var message in client.Inbox.Fetch (messages.Count, -1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId)) Console.WriteLine ("Subject: {0}", message.Envelope.Subject); } client.Disconnect (true); } }
private List<string> checkMail() { var users = settings.accountsDict.Keys.ToArray(); var clientkeys = clients.Keys; var intersect = users.Intersect(clientkeys); List<string> mails = new List<string>(users.Count()); foreach (var item in clientkeys) { if (!intersect.Contains(item)) { ImapClient c = clients[item]; c.Disconnect(true, token); c.Dispose(); clients.Remove(item); } if (token.IsCancellationRequested) { break; } } if (token.IsCancellationRequested) { return null; } foreach (var user in users) { if (!clients.ContainsKey(user)) { //create client ImapClient c = new ImapClient(); if (settings.accountsDict[user] != null) { var credentials = new NetworkCredential(user, settings.accountsDict[user].Token.AccessToken); var uri = new Uri("imaps://imap.gmail.com"); c.Connect(uri, token); c.Authenticate(credentials, token); c.Inbox.Open(FolderAccess.ReadOnly, token); clients[user] = c; } else { logging.TraceEvent(TraceEventType.Error, 1, "User credentials is null for: " + user); } } if (token.IsCancellationRequested) { break; } if (clients.ContainsKey(user)) { ImapClient client = clients[user]; int unread; try { unread = client.Inbox.Search(SearchQuery.NotSeen, token).Length; } catch (ImapProtocolException) { logging.TraceEvent(TraceEventType.Error, 1, "IMAP not enabled for: " + user); continue; } //inbox.Open(FolderAccess.ReadOnly, token); if (unread != 0) { mails.Add(user + "(" + unread + ")"); } } else { logging.TraceEvent(TraceEventType.Error, 1, "No client for user: " + user); } if (token.IsCancellationRequested) { break; } } if (mails.Count == 0) return null; else return mails; }
public void TestArgumentExceptions () { var commands = new List<ImapReplayCommand> (); commands.Add (new ImapReplayCommand ("", "dovecot.greeting.txt")); commands.Add (new ImapReplayCommand ("A00000000 LOGIN username password\r\n", "dovecot.authenticate.txt")); commands.Add (new ImapReplayCommand ("A00000001 NAMESPACE\r\n", "dovecot.namespace.txt")); commands.Add (new ImapReplayCommand ("A00000002 LIST \"\" \"INBOX\"\r\n", "dovecot.list-inbox.txt")); commands.Add (new ImapReplayCommand ("A00000003 LIST (SPECIAL-USE) \"\" \"*\"\r\n", "dovecot.list-special-use.txt")); commands.Add (new ImapReplayCommand ("A00000004 SELECT INBOX (CONDSTORE)\r\n", "common.select-inbox.txt")); using (var client = new ImapClient ()) { var credentials = new NetworkCredential ("username", "password"); // Connect Assert.Throws<ArgumentNullException> (() => client.Connect ((Uri) null)); Assert.Throws<ArgumentNullException> (async () => await client.ConnectAsync ((Uri) null)); Assert.Throws<ArgumentNullException> (() => client.Connect (null, 143, false)); Assert.Throws<ArgumentNullException> (async () => await client.ConnectAsync (null, 143, false)); Assert.Throws<ArgumentException> (() => client.Connect (string.Empty, 143, false)); Assert.Throws<ArgumentException> (async () => await client.ConnectAsync (string.Empty, 143, false)); Assert.Throws<ArgumentOutOfRangeException> (() => client.Connect ("host", -1, false)); Assert.Throws<ArgumentOutOfRangeException> (async () => await client.ConnectAsync ("host", -1, false)); Assert.Throws<ArgumentNullException> (() => client.Connect (null, 143, SecureSocketOptions.None)); Assert.Throws<ArgumentNullException> (async () => await client.ConnectAsync (null, 143, SecureSocketOptions.None)); Assert.Throws<ArgumentException> (() => client.Connect (string.Empty, 143, SecureSocketOptions.None)); Assert.Throws<ArgumentException> (async () => await client.ConnectAsync (string.Empty, 143, SecureSocketOptions.None)); Assert.Throws<ArgumentOutOfRangeException> (() => client.Connect ("host", -1, SecureSocketOptions.None)); Assert.Throws<ArgumentOutOfRangeException> (async () => await client.ConnectAsync ("host", -1, SecureSocketOptions.None)); try { client.ReplayConnect ("localhost", new ImapReplayStream (commands, false)); } catch (Exception ex) { Assert.Fail ("Did not expect an exception in Connect: {0}", ex); } // Authenticate Assert.Throws<ArgumentNullException> (() => client.Authenticate (null)); Assert.Throws<ArgumentNullException> (async () => await client.AuthenticateAsync (null)); Assert.Throws<ArgumentNullException> (() => client.Authenticate (null, "password")); Assert.Throws<ArgumentNullException> (async () => await client.AuthenticateAsync (null, "password")); Assert.Throws<ArgumentNullException> (() => client.Authenticate ("username", null)); Assert.Throws<ArgumentNullException> (async () => await client.AuthenticateAsync ("username", null)); Assert.Throws<ArgumentNullException> (() => client.Authenticate (null, credentials)); Assert.Throws<ArgumentNullException> (async () => await client.AuthenticateAsync (null, credentials)); Assert.Throws<ArgumentNullException> (() => client.Authenticate (Encoding.UTF8, null)); Assert.Throws<ArgumentNullException> (async () => await client.AuthenticateAsync (Encoding.UTF8, null)); Assert.Throws<ArgumentNullException> (() => client.Authenticate (null, "username", "password")); Assert.Throws<ArgumentNullException> (async () => await client.AuthenticateAsync (null, "username", "password")); Assert.Throws<ArgumentNullException> (() => client.Authenticate (Encoding.UTF8, null, "password")); Assert.Throws<ArgumentNullException> (async () => await client.AuthenticateAsync (Encoding.UTF8, null, "password")); Assert.Throws<ArgumentNullException> (() => client.Authenticate (Encoding.UTF8, "username", null)); Assert.Throws<ArgumentNullException> (async () => await client.AuthenticateAsync (Encoding.UTF8, "username", null)); // Note: we do not want to use SASL at all... client.AuthenticationMechanisms.Clear (); try { client.Authenticate (credentials); } catch (Exception ex) { Assert.Fail ("Did not expect an exception in Authenticate: {0}", ex); } Assert.Throws<ArgumentNullException> (() => client.GetFolder ((string) null)); Assert.Throws<ArgumentNullException> (() => client.GetFolder ((FolderNamespace) null)); Assert.Throws<ArgumentNullException> (() => client.GetFolders (null)); Assert.Throws<ArgumentNullException> (() => client.GetFolders (null, false)); Assert.Throws<ArgumentNullException> (async () => await client.GetFoldersAsync (null)); Assert.Throws<ArgumentNullException> (async () => await client.GetFoldersAsync (null, false)); var personal = client.GetFolder (client.PersonalNamespaces[0]); var dates = new List<DateTimeOffset> (); var messages = new List<MimeMessage> (); var flags = new List<MessageFlags> (); var now = DateTimeOffset.Now; messages.Add (CreateThreadableMessage ("A", "<*****@*****.**>", null, now.AddMinutes (-7))); messages.Add (CreateThreadableMessage ("B", "<*****@*****.**>", "<*****@*****.**>", now.AddMinutes (-6))); messages.Add (CreateThreadableMessage ("C", "<*****@*****.**>", "<*****@*****.**> <*****@*****.**>", now.AddMinutes (-5))); messages.Add (CreateThreadableMessage ("D", "<*****@*****.**>", "<*****@*****.**>", now.AddMinutes (-4))); messages.Add (CreateThreadableMessage ("E", "<*****@*****.**>", "<*****@*****.**> <*****@*****.**> <*****@*****.**> <*****@*****.**>", now.AddMinutes (-3))); messages.Add (CreateThreadableMessage ("F", "<*****@*****.**>", "<*****@*****.**>", now.AddMinutes (-2))); messages.Add (CreateThreadableMessage ("G", "<*****@*****.**>", null, now.AddMinutes (-1))); messages.Add (CreateThreadableMessage ("H", "<*****@*****.**>", null, now)); for (int i = 0; i < messages.Count; i++) { dates.Add (DateTimeOffset.Now); flags.Add (MessageFlags.Seen); } var inbox = (ImapFolder) client.Inbox; inbox.Open (FolderAccess.ReadWrite); // ImapFolder .ctor Assert.Throws<ArgumentNullException> (() => new ImapFolder (null)); // Open Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Open ((FolderAccess) 500)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Open ((FolderAccess) 500, 0, 0, UniqueIdRange.All)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.OpenAsync ((FolderAccess) 500)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.OpenAsync ((FolderAccess) 500, 0, 0, UniqueIdRange.All)); // Create Assert.Throws<ArgumentNullException> (() => inbox.Create (null, true)); Assert.Throws<ArgumentException> (() => inbox.Create (string.Empty, true)); Assert.Throws<ArgumentException> (() => inbox.Create ("Folder./Name", true)); Assert.Throws<ArgumentNullException> (() => inbox.Create (null, SpecialFolder.All)); Assert.Throws<ArgumentException> (() => inbox.Create (string.Empty, SpecialFolder.All)); Assert.Throws<ArgumentException> (() => inbox.Create ("Folder./Name", SpecialFolder.All)); Assert.Throws<ArgumentNullException> (() => inbox.Create (null, new SpecialFolder[] { SpecialFolder.All })); Assert.Throws<ArgumentException> (() => inbox.Create (string.Empty, new SpecialFolder[] { SpecialFolder.All })); Assert.Throws<ArgumentException> (() => inbox.Create ("Folder./Name", new SpecialFolder[] { SpecialFolder.All })); Assert.Throws<ArgumentNullException> (() => inbox.Create ("ValidName", null)); Assert.Throws<NotSupportedException> (() => inbox.Create ("ValidName", SpecialFolder.All)); Assert.Throws<ArgumentNullException> (async () => await inbox.CreateAsync (null, true)); Assert.Throws<ArgumentException> (async () => await inbox.CreateAsync (string.Empty, true)); Assert.Throws<ArgumentException> (async () => await inbox.CreateAsync ("Folder./Name", true)); Assert.Throws<ArgumentNullException> (async () => await inbox.CreateAsync (null, SpecialFolder.All)); Assert.Throws<ArgumentException> (async () => await inbox.CreateAsync (string.Empty, SpecialFolder.All)); Assert.Throws<ArgumentException> (async () => await inbox.CreateAsync ("Folder./Name", SpecialFolder.All)); Assert.Throws<ArgumentNullException> (async () => await inbox.CreateAsync (null, new SpecialFolder[] { SpecialFolder.All })); Assert.Throws<ArgumentException> (async () => await inbox.CreateAsync (string.Empty, new SpecialFolder[] { SpecialFolder.All })); Assert.Throws<ArgumentException> (async () => await inbox.CreateAsync ("Folder./Name", new SpecialFolder[] { SpecialFolder.All })); Assert.Throws<ArgumentNullException> (async () => await inbox.CreateAsync ("ValidName", null)); Assert.Throws<NotSupportedException> (async () => await inbox.CreateAsync ("ValidName", SpecialFolder.All)); // Rename Assert.Throws<ArgumentNullException> (() => inbox.Rename (null, "NewName")); Assert.Throws<ArgumentNullException> (() => inbox.Rename (personal, null)); Assert.Throws<ArgumentException> (() => inbox.Rename (personal, string.Empty)); Assert.Throws<ArgumentNullException> (async () => await inbox.RenameAsync (null, "NewName")); Assert.Throws<ArgumentNullException> (async () => await inbox.RenameAsync (personal, null)); Assert.Throws<ArgumentException> (async () => await inbox.RenameAsync (personal, string.Empty)); // GetSubfolder Assert.Throws<ArgumentNullException> (() => inbox.GetSubfolder (null)); Assert.Throws<ArgumentException> (() => inbox.GetSubfolder (string.Empty)); Assert.Throws<ArgumentNullException> (async () => await inbox.GetSubfolderAsync (null)); Assert.Throws<ArgumentException> (async () => await inbox.GetSubfolderAsync (string.Empty)); // GetMetadata Assert.Throws<ArgumentNullException> (() => client.GetMetadata (null, new MetadataTag[] { MetadataTag.PrivateComment })); Assert.Throws<ArgumentNullException> (() => client.GetMetadata (new MetadataOptions (), null)); Assert.Throws<ArgumentNullException> (async () => await client.GetMetadataAsync (null, new MetadataTag[] { MetadataTag.PrivateComment })); Assert.Throws<ArgumentNullException> (async () => await client.GetMetadataAsync (new MetadataOptions (), null)); Assert.Throws<ArgumentNullException> (() => inbox.GetMetadata (null, new MetadataTag[] { MetadataTag.PrivateComment })); Assert.Throws<ArgumentNullException> (() => inbox.GetMetadata (new MetadataOptions (), null)); Assert.Throws<ArgumentNullException> (async () => await inbox.GetMetadataAsync (null, new MetadataTag[] { MetadataTag.PrivateComment })); Assert.Throws<ArgumentNullException> (async () => await inbox.GetMetadataAsync (new MetadataOptions (), null)); // SetMetadata Assert.Throws<ArgumentNullException> (() => client.SetMetadata (null)); Assert.Throws<ArgumentNullException> (async () => await client.SetMetadataAsync (null)); Assert.Throws<ArgumentNullException> (() => inbox.SetMetadata (null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetMetadataAsync (null)); // Expunge Assert.Throws<ArgumentNullException> (() => inbox.Expunge (null)); Assert.Throws<ArgumentNullException> (async () => await inbox.ExpungeAsync (null)); // Append Assert.Throws<ArgumentNullException> (() => inbox.Append (null)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (null)); Assert.Throws<ArgumentNullException> (() => inbox.Append (null, messages[0])); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (null, messages[0])); Assert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (FormatOptions.Default, null)); Assert.Throws<ArgumentNullException> (() => inbox.Append (null, MessageFlags.None, DateTimeOffset.Now)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (null, MessageFlags.None, DateTimeOffset.Now)); Assert.Throws<ArgumentNullException> (() => inbox.Append (null, messages[0], MessageFlags.None, DateTimeOffset.Now)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (null, messages[0], MessageFlags.None, DateTimeOffset.Now)); Assert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, null, MessageFlags.None, DateTimeOffset.Now)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (FormatOptions.Default, null, MessageFlags.None, DateTimeOffset.Now)); // MultiAppend Assert.Throws<ArgumentNullException> (() => inbox.Append (null, flags)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (null, flags)); Assert.Throws<ArgumentNullException> (() => inbox.Append (messages, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (messages, null)); Assert.Throws<ArgumentNullException> (() => inbox.Append (null, messages, flags)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (null, messages, flags)); Assert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, null, flags)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (FormatOptions.Default, null, flags)); Assert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, messages, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (FormatOptions.Default, messages, null)); Assert.Throws<ArgumentNullException> (() => inbox.Append (null, flags, dates)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (null, flags, dates)); Assert.Throws<ArgumentNullException> (() => inbox.Append (messages, null, dates)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (messages, null, dates)); Assert.Throws<ArgumentNullException> (() => inbox.Append (messages, flags, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (messages, flags, null)); Assert.Throws<ArgumentNullException> (() => inbox.Append (null, messages, flags, dates)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (null, messages, flags, dates)); Assert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, null, flags, dates)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (FormatOptions.Default, null, flags, dates)); Assert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, messages, null, dates)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (FormatOptions.Default, messages, null, dates)); Assert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, messages, flags, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.AppendAsync (FormatOptions.Default, messages, flags, null)); // CopyTo Assert.Throws<ArgumentNullException> (() => inbox.CopyTo ((IList<UniqueId>) null, inbox)); Assert.Throws<ArgumentNullException> (async () => await inbox.CopyToAsync ((IList<UniqueId>) null, inbox)); Assert.Throws<ArgumentNullException> (() => inbox.CopyTo (UniqueIdRange.All, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.CopyToAsync (UniqueIdRange.All, null)); Assert.Throws<ArgumentNullException> (() => inbox.CopyTo ((IList<int>) null, inbox)); Assert.Throws<ArgumentNullException> (async () => await inbox.CopyToAsync ((IList<int>) null, inbox)); Assert.Throws<ArgumentNullException> (() => inbox.CopyTo (new int[] { 0 }, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.CopyToAsync (new int[] { 0 }, null)); // MoveTo Assert.Throws<ArgumentNullException> (() => inbox.MoveTo ((IList<UniqueId>) null, inbox)); Assert.Throws<ArgumentNullException> (async () => await inbox.MoveToAsync ((IList<UniqueId>) null, inbox)); Assert.Throws<ArgumentNullException> (() => inbox.MoveTo (UniqueIdRange.All, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.MoveToAsync (UniqueIdRange.All, null)); Assert.Throws<ArgumentNullException> (() => inbox.MoveTo ((IList<int>) null, inbox)); Assert.Throws<ArgumentNullException> (async () => await inbox.MoveToAsync ((IList<int>) null, inbox)); Assert.Throws<ArgumentNullException> (() => inbox.MoveTo (new int[] { 0 }, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.MoveToAsync (new int[] { 0 }, null)); // Fetch var headers = new HashSet<HeaderId> (new HeaderId[] { HeaderId.Subject }); var fields = new HashSet<string> (new string[] { "SUBJECT" }); var uids = new UniqueId[] { UniqueId.MinValue }; var emptyHeaders = new HashSet<HeaderId> (); var emptyFields = new HashSet<string> (); var indexes = new int[] { 0 }; Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (-1, -1, MessageSummaryItems.All)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (-1, -1, MessageSummaryItems.All)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (5, 1, MessageSummaryItems.All)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (5, 1, MessageSummaryItems.All)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (0, 5, MessageSummaryItems.None)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (0, 5, MessageSummaryItems.None)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<UniqueId>) null, MessageSummaryItems.All)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<UniqueId>) null, MessageSummaryItems.All)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (uids, MessageSummaryItems.None)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (uids, MessageSummaryItems.None)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<int>) null, MessageSummaryItems.All)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<int>) null, MessageSummaryItems.All)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (indexes, MessageSummaryItems.None)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (indexes, MessageSummaryItems.None)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (-1, -1, MessageSummaryItems.All, headers)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (-1, -1, MessageSummaryItems.All, headers)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (5, 1, MessageSummaryItems.All, headers)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (5, 1, MessageSummaryItems.All, headers)); //Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (0, 5, MessageSummaryItems.None, headers)); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (0, 5, MessageSummaryItems.None, headers)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch (0, 5, MessageSummaryItems.All, (HashSet<HeaderId>) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync (0, 5, MessageSummaryItems.All, (HashSet<HeaderId>) null)); Assert.Throws<ArgumentException> (() => inbox.Fetch (0, 5, MessageSummaryItems.All, emptyHeaders)); Assert.Throws<ArgumentException> (async () => await inbox.FetchAsync (0, 5, MessageSummaryItems.All, emptyHeaders)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<UniqueId>) null, MessageSummaryItems.All, headers)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<UniqueId>) null, MessageSummaryItems.All, headers)); //Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (uids, MessageSummaryItems.None, headers)); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (uids, MessageSummaryItems.None, headers)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch (uids, MessageSummaryItems.All, (HashSet<HeaderId>) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync (uids, MessageSummaryItems.All, (HashSet<HeaderId>) null)); Assert.Throws<ArgumentException> (() => inbox.Fetch (uids, MessageSummaryItems.All, emptyHeaders)); Assert.Throws<ArgumentException> (async () => await inbox.FetchAsync (uids, MessageSummaryItems.All, emptyHeaders)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<int>) null, MessageSummaryItems.All, headers)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<int>) null, MessageSummaryItems.All, headers)); //Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (indexes, MessageSummaryItems.None, headers)); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (indexes, MessageSummaryItems.None, headers)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch (indexes, MessageSummaryItems.All, (HashSet<HeaderId>) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync (indexes, MessageSummaryItems.All, (HashSet<HeaderId>) null)); Assert.Throws<ArgumentException> (() => inbox.Fetch (indexes, MessageSummaryItems.All, emptyHeaders)); Assert.Throws<ArgumentException> (async () => await inbox.FetchAsync (indexes, MessageSummaryItems.All, emptyHeaders)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (-1, -1, MessageSummaryItems.All, fields)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (-1, -1, MessageSummaryItems.All, fields)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (5, 1, MessageSummaryItems.All, fields)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (5, 1, MessageSummaryItems.All, fields)); //Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (0, 5, MessageSummaryItems.None, fields)); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (0, 5, MessageSummaryItems.None, fields)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch (0, 5, MessageSummaryItems.All, (HashSet<string>) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync (0, 5, MessageSummaryItems.All, (HashSet<string>) null)); Assert.Throws<ArgumentException> (() => inbox.Fetch (0, 5, MessageSummaryItems.All, emptyFields)); Assert.Throws<ArgumentException> (async () => await inbox.FetchAsync (0, 5, MessageSummaryItems.All, emptyFields)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<UniqueId>) null, MessageSummaryItems.All, fields)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<UniqueId>) null, MessageSummaryItems.All, fields)); //Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (uids, MessageSummaryItems.None, fields)); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (uids, MessageSummaryItems.None, fields)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch (uids, MessageSummaryItems.All, (HashSet<string>) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync (uids, MessageSummaryItems.All, (HashSet<string>) null)); Assert.Throws<ArgumentException> (() => inbox.Fetch (uids, MessageSummaryItems.All, emptyFields)); Assert.Throws<ArgumentException> (async () => await inbox.FetchAsync (uids, MessageSummaryItems.All, emptyFields)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<int>) null, MessageSummaryItems.All, fields)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<int>) null, MessageSummaryItems.All, fields)); //Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (indexes, MessageSummaryItems.None, fields)); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (indexes, MessageSummaryItems.None, fields)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch (indexes, MessageSummaryItems.All, (HashSet<string>) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync (indexes, MessageSummaryItems.All, (HashSet<string>) null)); Assert.Throws<ArgumentException> (() => inbox.Fetch (indexes, MessageSummaryItems.All, emptyFields)); Assert.Throws<ArgumentException> (async () => await inbox.FetchAsync (indexes, MessageSummaryItems.All, emptyFields)); // Fetch + modseq Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (-1, -1, 31337, MessageSummaryItems.All)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (-1, -1, 31337, MessageSummaryItems.All)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (5, 1, 31337, MessageSummaryItems.All)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (5, 1, 31337, MessageSummaryItems.All)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (0, 5, 31337, MessageSummaryItems.None)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (0, 5, 31337, MessageSummaryItems.None)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<UniqueId>) null, 31337, MessageSummaryItems.All)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<UniqueId>) null, 31337, MessageSummaryItems.All)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (uids, 31337, MessageSummaryItems.None)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (uids, 31337, MessageSummaryItems.None)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<int>) null, 31337, MessageSummaryItems.All)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<int>) null, 31337, MessageSummaryItems.All)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (indexes, 31337, MessageSummaryItems.None)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (indexes, 31337, MessageSummaryItems.None)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (-1, -1, 31337, MessageSummaryItems.All, headers)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (-1, -1, 31337, MessageSummaryItems.All, headers)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (5, 1, 31337, MessageSummaryItems.All, headers)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (5, 1, MessageSummaryItems.All, headers)); //Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (0, 5, 31337, MessageSummaryItems.None, headers)); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (0, 5, 31337, MessageSummaryItems.None, headers)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch (0, 5, 31337, MessageSummaryItems.All, (HashSet<HeaderId>) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync (0, 5, 31337, MessageSummaryItems.All, (HashSet<HeaderId>) null)); Assert.Throws<ArgumentException> (() => inbox.Fetch (0, 5, 31337, MessageSummaryItems.All, emptyHeaders)); Assert.Throws<ArgumentException> (async () => await inbox.FetchAsync (0, 5, 31337, MessageSummaryItems.All, emptyHeaders)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<UniqueId>) null, 31337, MessageSummaryItems.All, headers)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<UniqueId>) null, 31337, MessageSummaryItems.All, headers)); //Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (uids, 31337, MessageSummaryItems.None, headers)); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (uids, 31337, MessageSummaryItems.None, headers)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch (uids, 31337, MessageSummaryItems.All, (HashSet<HeaderId>) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync (uids, 31337, MessageSummaryItems.All, (HashSet<HeaderId>) null)); Assert.Throws<ArgumentException> (() => inbox.Fetch (uids, 31337, MessageSummaryItems.All, emptyHeaders)); Assert.Throws<ArgumentException> (async () => await inbox.FetchAsync (uids, 31337, MessageSummaryItems.All, emptyHeaders)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<int>) null, 31337, MessageSummaryItems.All, headers)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<int>) null, 31337, MessageSummaryItems.All, headers)); //Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (indexes, 31337, MessageSummaryItems.None, headers)); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (indexes, 31337, MessageSummaryItems.None, headers)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch (indexes, 31337, MessageSummaryItems.All, (HashSet<HeaderId>) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync (indexes, 31337, MessageSummaryItems.All, (HashSet<HeaderId>) null)); Assert.Throws<ArgumentException> (() => inbox.Fetch (indexes, 31337, MessageSummaryItems.All, emptyHeaders)); Assert.Throws<ArgumentException> (async () => await inbox.FetchAsync (indexes, 31337, MessageSummaryItems.All, emptyHeaders)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (-1, -1, 31337, MessageSummaryItems.All, fields)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (-1, -1, 31337, MessageSummaryItems.All, fields)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (5, 1, 31337, MessageSummaryItems.All, fields)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (5, 1, 31337, MessageSummaryItems.All, fields)); //Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (0, 5, 31337, MessageSummaryItems.None, fields)); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (0, 5, 31337, MessageSummaryItems.None, fields)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch (0, 5, 31337, MessageSummaryItems.All, (HashSet<string>) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync (0, 5, 31337, MessageSummaryItems.All, (HashSet<string>) null)); Assert.Throws<ArgumentException> (() => inbox.Fetch (0, 5, 31337, MessageSummaryItems.All, emptyFields)); Assert.Throws<ArgumentException> (async () => await inbox.FetchAsync (0, 5, 31337, MessageSummaryItems.All, emptyFields)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<UniqueId>) null, 31337, MessageSummaryItems.All, fields)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<UniqueId>) null, 31337, MessageSummaryItems.All, fields)); //Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (uids, 31337, MessageSummaryItems.None, fields)); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (uids, 31337, MessageSummaryItems.None, fields)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch (uids, 31337, MessageSummaryItems.All, (HashSet<string>) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync (uids, 31337, MessageSummaryItems.All, (HashSet<string>) null)); Assert.Throws<ArgumentException> (() => inbox.Fetch (uids, 31337, MessageSummaryItems.All, emptyFields)); Assert.Throws<ArgumentException> (async () => await inbox.FetchAsync (uids, 31337, MessageSummaryItems.All, emptyFields)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<int>) null, 31337, MessageSummaryItems.All, fields)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<int>) null, 31337, MessageSummaryItems.All, fields)); //Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (indexes, 31337, MessageSummaryItems.None, fields)); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (indexes, 31337, MessageSummaryItems.None, fields)); Assert.Throws<ArgumentNullException> (() => inbox.Fetch (indexes, 31337, MessageSummaryItems.All, (HashSet<string>) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.FetchAsync (indexes, 31337, MessageSummaryItems.All, (HashSet<string>) null)); Assert.Throws<ArgumentException> (() => inbox.Fetch (indexes, 31337, MessageSummaryItems.All, emptyFields)); Assert.Throws<ArgumentException> (async () => await inbox.FetchAsync (indexes, 31337, MessageSummaryItems.All, emptyFields)); // GetMessage Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetMessage (-1)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetMessageAsync (-1)); Assert.Throws<ArgumentException> (() => inbox.GetMessage (UniqueId.Invalid)); Assert.Throws<ArgumentException> (async () => await inbox.GetMessageAsync (UniqueId.Invalid)); // GetBodyPart var bodyPart = new BodyPartText (); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetBodyPart (-1, bodyPart)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetBodyPartAsync (-1, bodyPart)); Assert.Throws<ArgumentNullException> (() => inbox.GetBodyPart (0, (BodyPart) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.GetBodyPartAsync (0, (BodyPart) null)); Assert.Throws<ArgumentException> (() => inbox.GetBodyPart (UniqueId.Invalid, bodyPart)); Assert.Throws<ArgumentException> (async () => await inbox.GetBodyPartAsync (UniqueId.Invalid, bodyPart)); Assert.Throws<ArgumentNullException> (() => inbox.GetBodyPart (UniqueId.MinValue, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.GetBodyPartAsync (UniqueId.MinValue, null)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetBodyPart (-1, "1.2")); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetBodyPartAsync (-1, "1.2")); Assert.Throws<ArgumentNullException> (() => inbox.GetBodyPart (0, (string) null)); //Assert.Throws<ArgumentNullException> (async () => await inbox.GetBodyPartAsync (0, (string) null)); Assert.Throws<ArgumentException> (() => inbox.GetBodyPart (UniqueId.Invalid, "1.2")); //Assert.Throws<ArgumentException> (async () => await inbox.GetBodyPartAsync (UniqueId.Invalid, "1.2")); Assert.Throws<ArgumentNullException> (() => inbox.GetBodyPart (UniqueId.MinValue, (string) null)); //Assert.Throws<ArgumentNullException> (async () => await inbox.GetBodyPartAsync (UniqueId.MinValue, (string) null)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetBodyPart (-1, bodyPart, true)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetBodyPartAsync (-1, bodyPart, true)); Assert.Throws<ArgumentNullException> (() => inbox.GetBodyPart (0, (BodyPart) null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.GetBodyPartAsync (0, (BodyPart) null, true)); Assert.Throws<ArgumentException> (() => inbox.GetBodyPart (UniqueId.Invalid, bodyPart, true)); Assert.Throws<ArgumentException> (async () => await inbox.GetBodyPartAsync (UniqueId.Invalid, bodyPart, true)); Assert.Throws<ArgumentNullException> (() => inbox.GetBodyPart (UniqueId.MinValue, (BodyPart) null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.GetBodyPartAsync (UniqueId.MinValue, (BodyPart) null, true)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetBodyPart (-1, "1.2", true)); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetBodyPartAsync (-1, "1.2", true)); Assert.Throws<ArgumentNullException> (() => inbox.GetBodyPart (0, (string) null, true)); //Assert.Throws<ArgumentNullException> (async () => await inbox.GetBodyPartAsync (0, (string) null, true)); Assert.Throws<ArgumentException> (() => inbox.GetBodyPart (UniqueId.Invalid, "1.2", true)); //Assert.Throws<ArgumentException> (async () => await inbox.GetBodyPartAsync (UniqueId.Invalid, "1.2", true)); Assert.Throws<ArgumentNullException> (() => inbox.GetBodyPart (UniqueId.MinValue, (string) null, true)); //Assert.Throws<ArgumentNullException> (async () => await inbox.GetBodyPartAsync (UniqueId.MinValue, (string) null, true)); // GetStream Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (-1, "1.2")); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (-1, "1.2")); Assert.Throws<ArgumentNullException> (() => inbox.GetStream (0, (string) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.GetStreamAsync (0, (string) null)); Assert.Throws<ArgumentException> (() => inbox.GetStream (UniqueId.Invalid, "1.2")); Assert.Throws<ArgumentException> (async () => await inbox.GetStreamAsync (UniqueId.Invalid, "1.2")); Assert.Throws<ArgumentNullException> (() => inbox.GetStream (UniqueId.MinValue, (string) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, (string) null)); //Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (-1, bodyPart)); //Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (-1, bodyPart)); //Assert.Throws<ArgumentNullException> (() => inbox.GetStream (0, (BodyPart) null)); //Assert.Throws<ArgumentNullException> (async () => await inbox.GetStreamAsync (0, (BodyPart) null)); //Assert.Throws<ArgumentException> (() => inbox.GetStream (UniqueId.Invalid, bodyPart)); //Assert.Throws<ArgumentException> (async () => await inbox.GetStreamAsync (UniqueId.Invalid, bodyPart)); //Assert.Throws<ArgumentNullException> (() => inbox.GetStream (UniqueId.MinValue, (BodyPart) null)); //Assert.Throws<ArgumentNullException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, (BodyPart) null)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (-1, 0, 1024)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (-1, 0, 1024)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (0, -1, 1024)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (0, -1, 1024)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (0, 0, -1)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (0, 0, -1)); Assert.Throws<ArgumentException> (() => inbox.GetStream (UniqueId.Invalid, 0, 1024)); Assert.Throws<ArgumentException> (async () => await inbox.GetStreamAsync (UniqueId.Invalid, 0, 1024)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (UniqueId.MinValue, -1, 1024)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, -1, 1024)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (UniqueId.MinValue, 0, -1)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, 0, -1)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (-1, "1.2", 0, 1024)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (-1, "1.2", 0, 1024)); Assert.Throws<ArgumentNullException> (() => inbox.GetStream (0, (string) null, 0, 1024)); Assert.Throws<ArgumentNullException> (async () => await inbox.GetStreamAsync (0, (string) null, 0, 1024)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (0, "1.2", -1, 1024)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (0, "1.2", -1, 1024)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (0, "1.2", 0, -1)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (0, "1.2", 0, -1)); Assert.Throws<ArgumentException> (() => inbox.GetStream (UniqueId.Invalid, "1.2", 0, 1024)); Assert.Throws<ArgumentException> (async () => await inbox.GetStreamAsync (UniqueId.Invalid, "1.2", 0, 1024)); Assert.Throws<ArgumentNullException> (() => inbox.GetStream (UniqueId.MinValue, (string) null, 0, 1024)); Assert.Throws<ArgumentNullException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, (string) null, 0, 1024)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (UniqueId.MinValue, "1.2", -1, 1024)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, "1.2", -1, 1024)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (UniqueId.MinValue, "1.2", 0, -1)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, "1.2", 0, -1)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (-1, bodyPart, 0, 1024)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (-1, bodyPart, 0, 1024)); Assert.Throws<ArgumentNullException> (() => inbox.GetStream (0, (BodyPart) null, -1, 1024)); Assert.Throws<ArgumentNullException> (async () => await inbox.GetStreamAsync (0, (BodyPart) null, -1, 1024)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (0, bodyPart, -1, 1024)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (0, bodyPart, -1, 1024)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (0, bodyPart, 0, -1)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (0, bodyPart, 0, -1)); Assert.Throws<ArgumentException> (() => inbox.GetStream (UniqueId.Invalid, bodyPart, 0, 1024)); Assert.Throws<ArgumentException> (async () => await inbox.GetStreamAsync (UniqueId.Invalid, bodyPart, 0, 1024)); Assert.Throws<ArgumentNullException> (() => inbox.GetStream (UniqueId.MinValue, (BodyPart) null, -1, 1024)); Assert.Throws<ArgumentNullException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, (BodyPart) null, -1, 1024)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (UniqueId.MinValue, bodyPart, -1, 1024)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, bodyPart, -1, 1024)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (UniqueId.MinValue, bodyPart, 0, -1)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, bodyPart, 0, -1)); // AddFlags Assert.Throws<ArgumentException> (() => inbox.AddFlags (-1, MessageFlags.Seen, true)); Assert.Throws<ArgumentException> (async () => await inbox.AddFlagsAsync (-1, MessageFlags.Seen, true)); Assert.Throws<ArgumentException> (() => inbox.AddFlags (0, MessageFlags.None, true)); Assert.Throws<ArgumentException> (async () => await inbox.AddFlagsAsync (0, MessageFlags.None, true)); Assert.Throws<ArgumentException> (() => inbox.AddFlags (UniqueId.MinValue, MessageFlags.None, true)); Assert.Throws<ArgumentException> (async () => await inbox.AddFlagsAsync (UniqueId.MinValue, MessageFlags.None, true)); Assert.Throws<ArgumentNullException> (() => inbox.AddFlags ((IList<int>) null, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.AddFlagsAsync ((IList<int>) null, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (() => inbox.AddFlags ((IList<UniqueId>) null, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.AddFlagsAsync ((IList<UniqueId>) null, MessageFlags.Seen, true)); Assert.Throws<ArgumentException> (() => inbox.AddFlags (new int[] { 0 }, MessageFlags.None, true)); Assert.Throws<ArgumentException> (async () => await inbox.AddFlagsAsync (new int[] { 0 }, MessageFlags.None, true)); Assert.Throws<ArgumentException> (() => inbox.AddFlags (UniqueIdRange.All, MessageFlags.None, true)); Assert.Throws<ArgumentException> (async () => await inbox.AddFlagsAsync (UniqueIdRange.All, MessageFlags.None, true)); Assert.Throws<ArgumentNullException> (() => inbox.AddFlags ((IList<int>) null, 1, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.AddFlagsAsync ((IList<int>) null, 1, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (() => inbox.AddFlags ((IList<UniqueId>) null, 1, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.AddFlagsAsync ((IList<UniqueId>) null, 1, MessageFlags.Seen, true)); Assert.Throws<ArgumentException> (() => inbox.AddFlags (new int[] { 0 }, 1, MessageFlags.None, true)); Assert.Throws<ArgumentException> (async () => await inbox.AddFlagsAsync (new int[] { 0 }, 1, MessageFlags.None, true)); Assert.Throws<ArgumentException> (() => inbox.AddFlags (UniqueIdRange.All, 1, MessageFlags.None, true)); Assert.Throws<ArgumentException> (async () => await inbox.AddFlagsAsync (UniqueIdRange.All, 1, MessageFlags.None, true)); // RemoveFlags Assert.Throws<ArgumentException> (() => inbox.RemoveFlags (-1, MessageFlags.Seen, true)); Assert.Throws<ArgumentException> (async () => await inbox.RemoveFlagsAsync (-1, MessageFlags.Seen, true)); Assert.Throws<ArgumentException> (() => inbox.RemoveFlags (0, MessageFlags.None, true)); Assert.Throws<ArgumentException> (async () => await inbox.RemoveFlagsAsync (0, MessageFlags.None, true)); Assert.Throws<ArgumentException> (() => inbox.RemoveFlags (UniqueId.MinValue, MessageFlags.None, true)); Assert.Throws<ArgumentException> (async () => await inbox.RemoveFlagsAsync (UniqueId.MinValue, MessageFlags.None, true)); Assert.Throws<ArgumentNullException> (() => inbox.RemoveFlags ((IList<int>) null, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.RemoveFlagsAsync ((IList<int>) null, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (() => inbox.RemoveFlags ((IList<UniqueId>) null, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.RemoveFlagsAsync ((IList<UniqueId>) null, MessageFlags.Seen, true)); Assert.Throws<ArgumentException> (() => inbox.RemoveFlags (new int[] { 0 }, MessageFlags.None, true)); Assert.Throws<ArgumentException> (async () => await inbox.RemoveFlagsAsync (new int[] { 0 }, MessageFlags.None, true)); Assert.Throws<ArgumentException> (() => inbox.RemoveFlags (UniqueIdRange.All, MessageFlags.None, true)); Assert.Throws<ArgumentException> (async () => await inbox.RemoveFlagsAsync (UniqueIdRange.All, MessageFlags.None, true)); Assert.Throws<ArgumentNullException> (() => inbox.RemoveFlags ((IList<int>) null, 1, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.RemoveFlagsAsync ((IList<int>) null, 1, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (() => inbox.RemoveFlags ((IList<UniqueId>) null, 1, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.RemoveFlagsAsync ((IList<UniqueId>) null, 1, MessageFlags.Seen, true)); Assert.Throws<ArgumentException> (() => inbox.RemoveFlags (new int[] { 0 }, 1, MessageFlags.None, true)); Assert.Throws<ArgumentException> (async () => await inbox.RemoveFlagsAsync (new int[] { 0 }, 1, MessageFlags.None, true)); Assert.Throws<ArgumentException> (() => inbox.RemoveFlags (UniqueIdRange.All, 1, MessageFlags.None, true)); Assert.Throws<ArgumentException> (async () => await inbox.RemoveFlagsAsync (UniqueIdRange.All, 1, MessageFlags.None, true)); // SetFlags Assert.Throws<ArgumentException> (() => inbox.SetFlags (-1, MessageFlags.Seen, true)); Assert.Throws<ArgumentException> (async () => await inbox.SetFlagsAsync (-1, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (() => inbox.SetFlags ((IList<int>) null, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetFlagsAsync ((IList<int>) null, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (() => inbox.SetFlags ((IList<UniqueId>) null, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetFlagsAsync ((IList<UniqueId>) null, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (() => inbox.SetFlags ((IList<int>) null, 1, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetFlagsAsync ((IList<int>) null, 1, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (() => inbox.SetFlags ((IList<UniqueId>) null, 1, MessageFlags.Seen, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetFlagsAsync ((IList<UniqueId>) null, 1, MessageFlags.Seen, true)); var labels = new string[] { "Label1", "Label2" }; var emptyLabels = new string[0]; // AddLabels Assert.Throws<ArgumentException> (() => inbox.AddLabels (-1, labels, true)); Assert.Throws<ArgumentException> (async () => await inbox.AddLabelsAsync (-1, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.AddLabels (0, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.AddLabelsAsync (0, null, true)); Assert.Throws<ArgumentNullException> (() => inbox.AddLabels (UniqueId.MinValue, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.AddLabelsAsync (UniqueId.MinValue, null, true)); Assert.Throws<ArgumentNullException> (() => inbox.AddLabels ((IList<int>) null, labels, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.AddLabelsAsync ((IList<int>) null, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.AddLabels ((IList<UniqueId>) null, labels, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.AddLabelsAsync ((IList<UniqueId>) null, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.AddLabels (new int[] { 0 }, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.AddLabelsAsync (new int[] { 0 }, null, true)); Assert.Throws<ArgumentNullException> (() => inbox.AddLabels (UniqueIdRange.All, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.AddLabelsAsync (UniqueIdRange.All, null, true)); Assert.Throws<ArgumentException> (() => inbox.AddLabels (new int[] { 0 }, emptyLabels, true)); Assert.Throws<ArgumentException> (async () => await inbox.AddLabelsAsync (new int[] { 0 }, emptyLabels, true)); Assert.Throws<ArgumentException> (() => inbox.AddLabels (UniqueIdRange.All, emptyLabels, true)); Assert.Throws<ArgumentException> (async () => await inbox.AddLabelsAsync (UniqueIdRange.All, emptyLabels, true)); Assert.Throws<ArgumentNullException> (() => inbox.AddLabels ((IList<int>) null, 1, labels, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.AddLabelsAsync ((IList<int>) null, 1, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.AddLabels ((IList<UniqueId>) null, 1, labels, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.AddLabelsAsync ((IList<UniqueId>) null, 1, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.AddLabels (new int[] { 0 }, 1, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.AddLabelsAsync (new int[] { 0 }, 1, null, true)); Assert.Throws<ArgumentNullException> (() => inbox.AddLabels (UniqueIdRange.All, 1, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.AddLabelsAsync (UniqueIdRange.All, 1, null, true)); Assert.Throws<ArgumentException> (() => inbox.AddLabels (new int[] { 0 }, 1, emptyLabels, true)); Assert.Throws<ArgumentException> (async () => await inbox.AddLabelsAsync (new int[] { 0 }, 1, emptyLabels, true)); Assert.Throws<ArgumentException> (() => inbox.AddLabels (UniqueIdRange.All, 1, emptyLabels, true)); Assert.Throws<ArgumentException> (async () => await inbox.AddLabelsAsync (UniqueIdRange.All, 1, emptyLabels, true)); // RemoveLabels Assert.Throws<ArgumentException> (() => inbox.RemoveLabels (-1, labels, true)); Assert.Throws<ArgumentException> (async () => await inbox.RemoveLabelsAsync (-1, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.RemoveLabels (0, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.RemoveLabelsAsync (0, null, true)); Assert.Throws<ArgumentNullException> (() => inbox.RemoveLabels (UniqueId.MinValue, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.RemoveLabelsAsync (UniqueId.MinValue, null, true)); Assert.Throws<ArgumentNullException> (() => inbox.RemoveLabels ((IList<int>) null, labels, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.RemoveLabelsAsync ((IList<int>) null, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.RemoveLabels ((IList<UniqueId>) null, labels, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.RemoveLabelsAsync ((IList<UniqueId>) null, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.RemoveLabels (new int[] { 0 }, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.RemoveLabelsAsync (new int[] { 0 }, null, true)); Assert.Throws<ArgumentNullException> (() => inbox.RemoveLabels (UniqueIdRange.All, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.RemoveLabelsAsync (UniqueIdRange.All, null, true)); Assert.Throws<ArgumentException> (() => inbox.RemoveLabels (new int[] { 0 }, emptyLabels, true)); Assert.Throws<ArgumentException> (async () => await inbox.RemoveLabelsAsync (new int[] { 0 }, emptyLabels, true)); Assert.Throws<ArgumentException> (() => inbox.RemoveLabels (UniqueIdRange.All, emptyLabels, true)); Assert.Throws<ArgumentException> (async () => await inbox.RemoveLabelsAsync (UniqueIdRange.All, emptyLabels, true)); Assert.Throws<ArgumentNullException> (() => inbox.RemoveLabels ((IList<int>) null, 1, labels, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.RemoveLabelsAsync ((IList<int>) null, 1, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.RemoveLabels ((IList<UniqueId>) null, 1, labels, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.RemoveLabelsAsync ((IList<UniqueId>) null, 1, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.RemoveLabels (new int[] { 0 }, 1, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.RemoveLabelsAsync (new int[] { 0 }, 1, null, true)); Assert.Throws<ArgumentNullException> (() => inbox.RemoveLabels (UniqueIdRange.All, 1, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.RemoveLabelsAsync (UniqueIdRange.All, 1, null, true)); Assert.Throws<ArgumentException> (() => inbox.RemoveLabels (new int[] { 0 }, 1, emptyLabels, true)); Assert.Throws<ArgumentException> (async () => await inbox.RemoveLabelsAsync (new int[] { 0 }, 1, emptyLabels, true)); Assert.Throws<ArgumentException> (() => inbox.RemoveLabels (UniqueIdRange.All, 1, emptyLabels, true)); Assert.Throws<ArgumentException> (async () => await inbox.RemoveLabelsAsync (UniqueIdRange.All, 1, emptyLabels, true)); // SetLabels Assert.Throws<ArgumentException> (() => inbox.SetLabels (-1, labels, true)); Assert.Throws<ArgumentException> (async () => await inbox.SetLabelsAsync (-1, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.SetLabels (0, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetLabelsAsync (0, null, true)); Assert.Throws<ArgumentNullException> (() => inbox.SetLabels (UniqueId.MinValue, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetLabelsAsync (UniqueId.MinValue, null, true)); Assert.Throws<ArgumentNullException> (() => inbox.SetLabels ((IList<int>) null, labels, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetLabelsAsync ((IList<int>) null, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.SetLabels ((IList<UniqueId>) null, labels, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetLabelsAsync ((IList<UniqueId>) null, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.SetLabels (new int[] { 0 }, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetLabelsAsync (new int[] { 0 }, null, true)); Assert.Throws<ArgumentNullException> (() => inbox.SetLabels (UniqueIdRange.All, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetLabelsAsync (UniqueIdRange.All, null, true)); Assert.Throws<ArgumentNullException> (() => inbox.SetLabels ((IList<int>) null, 1, labels, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetLabelsAsync ((IList<int>) null, 1, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.SetLabels ((IList<UniqueId>) null, 1, labels, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetLabelsAsync ((IList<UniqueId>) null, 1, labels, true)); Assert.Throws<ArgumentNullException> (() => inbox.SetLabels (new int[] { 0 }, 1, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetLabelsAsync (new int[] { 0 }, 1, null, true)); Assert.Throws<ArgumentNullException> (() => inbox.SetLabels (UniqueIdRange.All, 1, null, true)); Assert.Throws<ArgumentNullException> (async () => await inbox.SetLabelsAsync (UniqueIdRange.All, 1, null, true)); // Search var searchOptions = SearchOptions.All | SearchOptions.Min | SearchOptions.Max | SearchOptions.Count; var orderBy = new OrderBy[] { OrderBy.Arrival }; var emptyOrderBy = new OrderBy[0]; Assert.Throws<ArgumentNullException> (() => inbox.Search ((SearchQuery) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync ((SearchQuery) null)); Assert.Throws<ArgumentNullException> (() => inbox.Search ((SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync ((SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Search (SearchQuery.All, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync (SearchQuery.All, null)); Assert.Throws<ArgumentException> (() => inbox.Search (SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentException> (async () => await inbox.SearchAsync (SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Search ((IList<UniqueId>) null, SearchQuery.All)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync ((IList<UniqueId>) null, SearchQuery.All)); Assert.Throws<ArgumentNullException> (() => inbox.Search (UniqueIdRange.All, (SearchQuery) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync (UniqueIdRange.All, (SearchQuery) null)); Assert.Throws<ArgumentNullException> (() => inbox.Search ((IList<UniqueId>) null, SearchQuery.All, orderBy)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync ((IList<UniqueId>) null, SearchQuery.All, orderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Search (UniqueIdRange.All, (SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync (UniqueIdRange.All, (SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Search (UniqueIdRange.All, SearchQuery.All, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync (UniqueIdRange.All, SearchQuery.All, null)); Assert.Throws<ArgumentException> (() => inbox.Search (UniqueIdRange.All, SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentException> (async () => await inbox.SearchAsync (UniqueIdRange.All, SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Search (searchOptions, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync (searchOptions, null)); Assert.Throws<ArgumentNullException> (() => inbox.Search (searchOptions, (SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync (searchOptions, (SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Search (searchOptions, SearchQuery.All, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync (searchOptions, SearchQuery.All, null)); Assert.Throws<ArgumentException> (() => inbox.Search (searchOptions, SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentException> (async () => await inbox.SearchAsync (searchOptions, SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Search (searchOptions, (IList<UniqueId>) null, SearchQuery.All)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync (searchOptions, (IList<UniqueId>) null, SearchQuery.All)); Assert.Throws<ArgumentNullException> (() => inbox.Search (searchOptions, UniqueIdRange.All, (SearchQuery) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync (searchOptions, UniqueIdRange.All, (SearchQuery) null)); Assert.Throws<ArgumentNullException> (() => inbox.Search (searchOptions, (IList<UniqueId>) null, SearchQuery.All, orderBy)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync (searchOptions, (IList<UniqueId>) null, SearchQuery.All, orderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Search (searchOptions, UniqueIdRange.All, (SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync (searchOptions, UniqueIdRange.All, (SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Search (searchOptions, UniqueIdRange.All, SearchQuery.All, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync (searchOptions, UniqueIdRange.All, SearchQuery.All, null)); Assert.Throws<ArgumentException> (() => inbox.Search (searchOptions, UniqueIdRange.All, SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentException> (async () => await inbox.SearchAsync (searchOptions, UniqueIdRange.All, SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Search ((string) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SearchAsync ((string) null)); // Sort Assert.Throws<ArgumentNullException> (() => inbox.Sort ((SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (async () => await inbox.SortAsync ((SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Sort (SearchQuery.All, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SortAsync (SearchQuery.All, null)); Assert.Throws<ArgumentException> (() => inbox.Sort (SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentException> (async () => await inbox.SortAsync (SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Sort ((IList<UniqueId>) null, SearchQuery.All, orderBy)); Assert.Throws<ArgumentNullException> (async () => await inbox.SortAsync ((IList<UniqueId>) null, SearchQuery.All, orderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Sort (UniqueIdRange.All, (SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (async () => await inbox.SortAsync (UniqueIdRange.All, (SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Sort (UniqueIdRange.All, SearchQuery.All, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SortAsync (UniqueIdRange.All, SearchQuery.All, null)); Assert.Throws<ArgumentException> (() => inbox.Sort (UniqueIdRange.All, SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentException> (async () => await inbox.SortAsync (UniqueIdRange.All, SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Sort (searchOptions, (SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (async () => await inbox.SortAsync (searchOptions, (SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Sort (searchOptions, SearchQuery.All, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SortAsync (searchOptions, SearchQuery.All, null)); Assert.Throws<ArgumentException> (() => inbox.Sort (searchOptions, SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentException> (async () => await inbox.SortAsync (searchOptions, SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Sort (searchOptions, (IList<UniqueId>) null, SearchQuery.All, orderBy)); Assert.Throws<ArgumentNullException> (async () => await inbox.SortAsync (searchOptions, (IList<UniqueId>) null, SearchQuery.All, orderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Sort (searchOptions, UniqueIdRange.All, (SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (async () => await inbox.SortAsync (searchOptions, UniqueIdRange.All, (SearchQuery) null, orderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Sort (searchOptions, UniqueIdRange.All, SearchQuery.All, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SortAsync (searchOptions, UniqueIdRange.All, SearchQuery.All, null)); Assert.Throws<ArgumentException> (() => inbox.Sort (searchOptions, UniqueIdRange.All, SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentException> (async () => await inbox.SortAsync (searchOptions, UniqueIdRange.All, SearchQuery.All, emptyOrderBy)); Assert.Throws<ArgumentNullException> (() => inbox.Sort ((string) null)); Assert.Throws<ArgumentNullException> (async () => await inbox.SortAsync ((string) null)); // Thread Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Thread ((ThreadingAlgorithm) 500, SearchQuery.All)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.ThreadAsync ((ThreadingAlgorithm) 500, SearchQuery.All)); Assert.Throws<ArgumentNullException> (() => inbox.Thread (ThreadingAlgorithm.References, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.ThreadAsync (ThreadingAlgorithm.References, null)); Assert.Throws<ArgumentNullException> (() => inbox.Thread ((IList<UniqueId>) null, ThreadingAlgorithm.References, SearchQuery.All)); Assert.Throws<ArgumentNullException> (async () => await inbox.ThreadAsync ((IList<UniqueId>) null, ThreadingAlgorithm.References, SearchQuery.All)); Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Thread (UniqueIdRange.All, (ThreadingAlgorithm) 500, SearchQuery.All)); Assert.Throws<ArgumentOutOfRangeException> (async () => await inbox.ThreadAsync (UniqueIdRange.All, (ThreadingAlgorithm) 500, SearchQuery.All)); Assert.Throws<ArgumentNullException> (() => inbox.Thread (UniqueIdRange.All, ThreadingAlgorithm.References, null)); Assert.Throws<ArgumentNullException> (async () => await inbox.ThreadAsync (UniqueIdRange.All, ThreadingAlgorithm.References, null)); client.Disconnect (false); } }