Ejemplo n.º 1
0
        /// <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;
                }
            }
        }
Ejemplo n.º 2
0
        /// <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;
        }