/// <summary> /// Constructor /// </summary> /// <param name="seq">Sequence file content </param> public ExecuteSequence(MailSimSequence seq) { typeFuncs[typeof(MailSimOperationsMailSend)] = (oper) => MailSend((MailSimOperationsMailSend)oper); typeFuncs[typeof(MailSimOperationsMailDelete)] = (oper) => MailDelete((MailSimOperationsMailDelete)oper); typeFuncs[typeof(MailSimOperationsMailReply)] = (oper) => MailReply((MailSimOperationsMailReply)oper); typeFuncs[typeof(MailSimOperationsMailForward)] = (oper) => MailForward((MailSimOperationsMailForward)oper); typeFuncs[typeof(MailSimOperationsMailMove)] = (oper) => MailMove((MailSimOperationsMailMove)oper); typeFuncs[typeof(MailSimOperationsFolderCreate)] = (oper) => FolderCreate((MailSimOperationsFolderCreate)oper); typeFuncs[typeof(MailSimOperationsFolderDelete)] = (oper) => FolderDelete((MailSimOperationsFolderDelete)oper); typeFuncs[typeof(MailSimOperationsEventMonitor)] = (oper) => EventMonitor((MailSimOperationsEventMonitor)oper); if (seq != null) { try { sequence = seq; // Disables the Outlook security prompt if specified if (sequence.DisableOutlookPrompt == true) { ConfigOutlookPrompts(false); } // Openes connection to Outlook with default profile, starts Outlook if it is not running olConnection = new MailConnection(); // Note: Currently only the default MailStore is supported. olMailStore = olConnection.GetDefaultStore(); // Initializes a random number randomNum = new Random(); } catch (Exception) { Log.Out(Log.Severity.Error, "Run", "Error encountered during initialization"); throw; } } }
/// <summary> /// Test module, focusing on Outlook (OOM) wrapper classes (Mail*) /// Also serves as an example for Mail* classes usage /// </summary> /// <param name="args">Command line argument. It is expected that the first argument is always "/t"</param> public void Execute(string[] args) { // Open connection to Outlook with default profile. Will start Outlook if it is not running MailConnection olConnection = new MailConnection(); MailStore mailStore = null; string mailboxName; if (args.Length > 1) { // We will use mailbox with display name specified in arg[1] mailboxName = args[1].ToLower(); // Get all mailboxes (stores) in the profile. //Returns only email stores (skips Public Folders, Delegates, Archives, PSTs) IEnumerable<MailStore> stores = olConnection.GetAllMailStores(); mailStore = stores.FirstOrDefault(x => x.DisplayName.ToLower() == mailboxName); if (mailStore == null) { Console.WriteLine("Cannot find store (mailbox) {0} in default profile", mailboxName); return; } } else // use default mailbox { mailStore = olConnection.GetDefaultStore(); mailboxName = mailStore.DisplayName; } // Display all top folders in the mailbox MailFolder rootFolder = mailStore.GetRootFolder(); MailFolders rootFolders = rootFolder.GetSubFolders(); foreach (MailFolder mailFolder in rootFolders) { Console.WriteLine(mailFolder.FolderPath); } // Open Inbox and loop through it's top folders MailFolder inbox = mailStore.GetDefaultFolder("olFolderInbox"); // Registering callback for Inbox "ItemAdd" event inbox.RegisterItemAddEventHandler(FolderEvent); Console.WriteLine("Inbox has {0} mail items", inbox.MailItemsCount); MailFolders inboxSubFolders = inbox.GetSubFolders(); MailFolder testFolder = null; const string testFolderName = "MailSim Test Folder"; Console.WriteLine("Exploring Inbox Folders"); if (null != inboxSubFolders) { foreach (MailFolder mailFolder in inboxSubFolders) { if( testFolderName == mailFolder.Name ) { testFolder = mailFolder; } Console.WriteLine(mailFolder.FolderPath); } } if (null == testFolder) { testFolder = inbox.AddSubFolder(testFolderName); } // Adding folder under Test Folder string folderName = "Test Subfolder " + (testFolder.SubFoldersCount + 1).ToString() + " - " + DateTime.Now.TimeOfDay.ToString(); testFolder.AddSubFolder(folderName); // Deleting folder under Test Folder if (testFolder.SubFoldersCount > 2) { testFolder.GetSubFolders().GetFirst().Delete(); } // Deleting email in inbox if (inbox.MailItemsCount > 2) { MailItem mailToDelete = inbox.GetMailItems().GetFirst(); Console.WriteLine("Deleting email {0}", mailToDelete.Subject); mailToDelete.Delete(); } // Moving email if (inbox.MailItemsCount > 2) { inbox.GetMailItems().GetFirst().Move(testFolder); } // Sending new email with message attachment to matching users Console.WriteLine("Sending new email to matching GAL users"); MailItem newMail = mailStore.NewMailItem(); newMail.Subject = "Test Mail from MailSim to GAL users " + (inbox.MailItemsCount + 1).ToString() + " - " + DateTime.Now.TimeOfDay.ToString(); newMail.Body = "Test from MailSim to matching users"; if (inbox.GetMailItems().Count > 0) { MailItem message = inbox.GetMailItems().GetFirst(); newMail.AddAttachment(message); } newMail.AddRecipient(mailboxName); OLAddressList gal = mailStore.GetGlobalAddressList(); if (gal != null) { List<string> users = gal.GetUsers("Mailsim"); foreach (string userAddress in users) { newMail.AddRecipient(userAddress); } } if (newMail.ValidateRecipients) { newMail.Send(); Console.WriteLine("Mail to specified users sent!"); } else { Console.WriteLine("Incorrect recipient(s), mail not sent"); } // Sending new email with to DL members Console.WriteLine("Sending new email to DL users"); newMail = mailStore.NewMailItem(); newMail.Subject = "Test Mail from MailSim to DL members " + (inbox.MailItemsCount + 1).ToString() + " - " + DateTime.Now.TimeOfDay.ToString(); newMail.Body = "Test from MailSim to DL members"; newMail.AddRecipient(mailboxName); if (gal != null) { List<string> members = gal.GetDLMembers("Mailsim Users"); if (members != null) { foreach (string userAddress in members) { newMail.AddRecipient(userAddress); } } else { Console.WriteLine("ERROR: Distribution list not found"); } } if (newMail.ValidateRecipients) { newMail.Send(); Console.WriteLine("Mail to distribution list members sent!"); } else { Console.WriteLine("Incorrect recipient(s), mail not sent"); } MailItems inboxMailItems = inbox.GetMailItems(); // Reply All if (inbox.MailItemsCount >= 1) { MailItem replyMail = inboxMailItems.GetFirst().Reply(true); replyMail.Body = "Reply All by MailSim" + replyMail.Body; Console.WriteLine("Message Body:"); Console.WriteLine(replyMail.Body); replyMail.Send(); Console.WriteLine("Reply All mail sent!"); } // Forward if (inbox.MailItemsCount >= 2) { MailItem forwardMail = inboxMailItems.GetNext().Forward(); forwardMail.Body = "Forward by MailSim" + forwardMail.Body; Console.WriteLine("Message Body:"); Console.WriteLine(forwardMail.Body); forwardMail.AddRecipient(mailboxName); if (forwardMail.ValidateRecipients) { forwardMail.Send(); Console.WriteLine("Forwarded the mail(s)"); } else { Console.WriteLine("Incorrect recipient(s), mail(s) cannot be forwarded"); } } Console.WriteLine("Press any key to exit"); Console.Read(); inbox.UnRegisterItemAddEventHandler(); return; }