如何从MailItem获取特定于任务的属性 [英] How can I get task-specific properties from a MailItem

查看:205
本文介绍了如何从MailItem获取特定于任务的属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在为自己做一个周末小项目,其中涉及从Outlook中获取我所有的ToDo任务,将它们放在DataGridView中,然后我就可以编辑和导出它们.

I've been having a little weekend project for myselff which involves getting all my ToDo tasks from Outlook, put them in a DataGridView and me being able to edit and export them.

我一直遇到的唯一问题是,当标记的电子邮件仍然存在时,我无法获取它们的任务特定属性,我只是看不到任何访问方式.

The only problem I've been running into is me being unable to get the task specific properties for flagged emails while they still exist, I just don't see any way to access them.

这是我当前代码的一部分.

Here is a portion of my current code.

private void retrieveTasks()
    {

        //Clear datagrid so we won't have duplicate information
        taskList.Rows.Clear();

        //Define some properties so we can use these to retrieve the tasks
        Outlook.Application app = null;
        _NameSpace ns = null;
        Store outlookStore = null;
        Outlook.MAPIFolder taskFolder = null;
        Outlook.MAPIFolder specialFolder = null;
        TaskItem task = null;
        DateTime nonDate = new DateTime(4501, 1, 1);

        try
        {
            //Connect to Outlook via MAPI
            app = new Outlook.Application();
            ns = app.GetNamespace("MAPI");
            ns.Logon(null, null, false, false);

            /*
            outlookStore = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox).Store;
            taskFolder = outlookStore.GetSpecialFolder(Microsoft.Office.Interop.Outlook.OlSpecialFolders.olSpecialFolderAllTasks);
            */

            //Get the taskfolder containing the Outlook tasks
            //taskFolder = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderTasks);
            outlookStore = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox).Store;
            taskFolder = outlookStore.GetSpecialFolder(OlSpecialFolders.olSpecialFolderAllTasks);
            //Console.WriteLine(specialFolder.Items[1].Subject.ToString());

            /*for (int i = 1; i <= specialFolder.Items.Count; i++)
            {
                //task = (Outlook.TaskItem)specialFolder.Items[i];
                Console.WriteLine(specialFolder.Items[i].ToString());
            }*/

            for (int i = 1; i <= taskFolder.Items.Count; i++)
            {
                //Get task from taskfolder
                Object item = taskFolder.Items[i];
                if (item is Outlook.MailItem)
                {
                    MailItem mail = (Outlook.MailItem)item;
                    if (mail.TaskCompletedDate.Equals(nonDate))
                    {
                        string percentComplete = "";
                        string taskPrio = "";
                        if (mail.UserProperties.Find("Prio") == null)
                        {
                            taskPrio = "";
                        }
                        else
                        {
                            taskPrio = mail.UserProperties.Find("Prio").Value.ToString();
                        }

                        //mail.UserProperties.

                        if (mail.UserProperties.Find("% Complete") == null)
                        {
                            percentComplete = "";
                        }
                        else
                        {
                            percentComplete = mail.UserProperties.Find("% Complete").Value.ToString();
                        }

                        //Add the tasks details to the datagrid
                        taskList.Rows.Add(
                            i.ToString(),
                            checkForNull(mail.Subject),
                            parseDate(mail.TaskStartDate.ToString()),
                            parseDate(mail.TaskDueDate.ToString()),
                            percentComplete, "Taak voltooid",
                            //statusToFriendlyName(mail.Status.ToString()),
                            taskPrio
                        );
                    }
                }
                else if (item is Outlook.TaskItem)
                {
                    task = (Outlook.TaskItem)item;
                    Console.WriteLine(task.Subject);
                    if (task.Complete == false)
                    {
                        string taskPrio = "";

                        //Make sure custom task property is failed or set it to empty text to prevent crashes
                        if (task.UserProperties.Find("Prio") == null)
                        {
                            taskPrio = "";
                        }
                        else
                        {
                            taskPrio = task.UserProperties.Find("Prio").Value.ToString();
                        }

                        //Add the tasks details to the datagrid
                        taskList.Rows.Add(
                            i.ToString(),
                            task.Subject.ToString(),
                            parseDate(task.StartDate.ToString()),
                            parseDate(task.DueDate.ToString()),
                            task.PercentComplete.ToString(),
                            statusToFriendlyName(task.Status.ToString()),
                            taskPrio
                        );
                    }
                }


            }
        }
        catch (System.Runtime.InteropServices.COMException ex)
        {
            MessageBox.Show(ex.ToString());
        }
        finally
        {
            //Release Outlook sources
            ns = null;
            app = null;
        }
    }

因此,我特别要寻找完成百分比"属性和status属性,以及我能解决的所有其他问题.

So specifically I am looking for the "% complete" property and the status property, everything else I am able to work around on.

如果我能使它正常工作,那将使我的生活变得如此轻松:)

It would make my life SO MUCH EASIER if I can get this to work :)

希望在这里听到任何人的声音!

Hope to hear from anyone on here!

杰弗里

推荐答案

您是说需要从MailItem对象(与TaskItem对象相对)中检索任务特定的属性吗?

Do you mean you need to retrieve the task specific properties from a MailItem object (as opposed to the TaskItem object)?

使用 OutlookSpy 查看消息-单击IMessage按钮,查看MAPI属性在"GetProps"选项卡中.可以使用MailItem.PropertyAccessor.GetProperty访问任何属性. GetProperty使用的DASL名称由OutlookSpy显示(在IMessage窗口中选择属性,请参见DASL编辑框).

Take a look at the message with OutlookSpy - click IMessage button, look at the MAPI properties in the GetProps tab. Any property can be accessed using MailItem.PropertyAccessor.GetProperty. The DASL name to be used by GetProperty is displayed by OutlookSpy (select the property in the IMessage window, see the DASL edit box).

这篇关于如何从MailItem获取特定于任务的属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆