Получить mailitem из подпапки VSTO - PullRequest
0 голосов
/ 20 марта 2020

Сегодня у меня есть код ниже для фильтрации почты по теме в общем почтовом ящике. Информация из элементов вставляется в таблицу данных.

Код работает нормально, но мне нужно также включить подпапки. Я пытался решить, но полностью застрял.

Вся помощь приветствуется.

 try
        {
            DataTable dtForExport = new DataTable();
            dtForExport.Clear();
            dtForExport.Columns.Add("Typ");
            dtForExport.Columns.Add("Inkom");
            dtForExport.Columns.Add("Orsak");

            Outlook.Application outlookapp = new Outlook.Application();
            Outlook.NameSpace ns = outlookapp.GetNamespace("MAPI");

            // additional email address 
            string recipientName = "Foo@bar.com";

            Outlook.Recipient recip = ns.CreateRecipient(recipientName);
            recip.Resolve();



                Outlook.MAPIFolder inbox = ns.GetSharedDefaultFolder(recip, Outlook.OlDefaultFolders.olFolderInbox);

            Outlook.Items items = inbox.Items;
            Outlook.MailItem mailItem = null;
            object folderItem;
            string subjectName = string.Empty;

            string filter = "[Subject] = 'Sjukanmälan' OR [Subject] = 'Friskanmälan'";
            folderItem = items.Find(filter);

            string pattern = ".*Orsak.*";
            Regex r = new Regex(pattern);

            while (folderItem != null)
            {
                mailItem = folderItem as Outlook.MailItem;
                MessageBox.Show(folderItem.ToString());
                if (mailItem != null)
                {
                    var SickType = "";
                    foreach (Match m in r.Matches(mailItem.Body))
                    {
                        SickType = m.Value.Replace("Orsak: ", "");
                    }
                    dtForExport.Rows.Add(mailItem.Subject, mailItem.ReceivedTime, SickType);
                }
                folderItem = items.FindNext();
            }

1 Ответ

0 голосов
/ 21 марта 2020

Перечисление всех папок Outlook рекурсивно

 private void LoadTree()
        {
            Microsoft.Office.Interop.Outlook.Application app = null;
            Microsoft.Office.Interop.Outlook._NameSpace ns = null;
            Microsoft.Office.Interop.Outlook.PostItem item = null;
            Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
            Microsoft.Office.Interop.Outlook.MAPIFolder subFolder = null;

            try
            {
                app = new Microsoft.Office.Interop.Outlook.Application();
                ns = app.GetNamespace("MAPI");
                ns.Logon(null, null, false, false);

                TreeNode root = new TreeNode();
                root.Text = "MAPI";

                Microsoft.Office.Interop.Outlook.Folders folders = ns.Folders;

                foreach (Microsoft.Office.Interop.Outlook.Folder folder in folders)
                {
                    TreeNode newnode = new TreeNode();
                    newnode.Text = folder.Name;

                    LoadSubFolder(ref newnode, folder.Folders);

                    //foreach (Microsoft.Office.Interop.Outlook.Folder subfolder in folder.Folders)
                    //{
                    //    TreeNode newsub = new TreeNode();
                    //    newsub.Text = subfolder.Name;
                    //    newnode.Nodes.Add(newsub);
                    //}

                    root.Nodes.Add(newnode);
                }

                root.Expand();
                treeView1.Nodes.Add(root);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                ns = null;
                app = null;
                inboxFolder = null;
            }
        }

        private void LoadSubFolder(ref TreeNode node, Microsoft.Office.Interop.Outlook.Folders folders)
        {
            try
            {
                foreach (Microsoft.Office.Interop.Outlook.Folder subfolder in folders)
                {
                    TreeNode newNode = new TreeNode();
                    newNode.Text = subfolder.Name;
                    LoadSubFolder(ref newNode, subfolder.Folders);

                    node.Nodes.Add(newNode);
                }
            }
            catch (Exception ex) { }
        }
...