public void User_Can_Delete_Message() { // pick two users to send to var users = new LinqMetaData().Organization.First(x => x.Users.Count(y => y.Settings.Any(z => z.Name == "SupportUser")) > 1).Users; Assert.IsTrue(users.Count() > 1); var fromUser = users.First(x => x.Settings.Any(y => y.Name == "SupportUser")); var toUser = users.Last(x => x.Settings.Any(y => y.Name == "SupportUser")); var controller = Mock(); var request = controller.Mock(x => x.HttpContext.Request); request.SetupGet(x => x["Send"]).Returns("true"); controller.HttpContext.User = new RolePrincipal(new GenericIdentity(fromUser.Username)); controller.Invoke(x => x.Compose(new ComposeMail { Body = "This is a test.", Subject = "Test Subject", To = toUser.Settings.First(y => y.Name == "SupportUser").Value + '@' + SupportController.DOMAIN })); Thread.Sleep(5000); // give exchange time to deliver it // check the inbox of the receiver using (var imap = SupportController.EnsureConnection(toUser)) { var msgCount = imap.SelectMailbox("INBOX").NumMsg; Assert.IsTrue(msgCount > 0); var msgs = imap.Search(SearchCondition.Deleted().Not()).Select( x => imap.GetMessage(x, true, true, new[] { "date", "subject", "from", "content-type", "to", "cc", "message-id" })); var message = msgs.Where(x => x.Subject.Contains("Test Subject")). OrderByDescending(x => x.Date).FirstOrDefault(); Assert.IsNotNull(message); message = imap.GetMessage(message.Uid, false, false); Assert.IsTrue(message.Body.Contains("This is a test.")); controller = Mock(); controller.Invoke(x => x.Delete("INBOX", message.Uid)); } }