Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从子文件夹VSTO获取邮件项_C#_Outlook_Vsto - Fatal编程技术网

C# 从子文件夹VSTO获取邮件项

C# 从子文件夹VSTO获取邮件项,c#,outlook,vsto,C#,Outlook,Vsto,今天,我用下面的代码在共享邮箱中按主题过滤邮件。 项目中的信息插入到数据表中 代码运行良好,但我需要包括子文件夹以及。 我试图解决这个问题,但完全是个傻瓜 感谢所有的帮助 try { DataTable dtForExport = new DataTable(); dtForExport.Clear(); dtForExport.Columns.Add("Typ"); dtForEx

今天,我用下面的代码在共享邮箱中按主题过滤邮件。 项目中的信息插入到数据表中

代码运行良好,但我需要包括子文件夹以及。 我试图解决这个问题,但完全是个傻瓜

感谢所有的帮助

 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();
            }


谢谢你的回答。但是我该如何把事情组合起来呢?我可以循环浏览并找出名称,但我的两个悬而未决的问题是:它列出了个人收件箱和共享收件箱,我认为行Outlook.MAPIFolder inbox=ns.GetSharedDefaultFolder(recip,Outlook.OlDefaultFolders.olFolderInbox);设置什么以使用共享邮箱。如何从所有文件夹中取出该项目?对不起,我不明白你写的是什么。您的代码正在搜索一个文件夹,因此我给了您一个链接,可以“递归地枚举所有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) { }
        }