如何从 MailItem 获取特定于任务的属性

2024-01-18

我一直在为自己做一个周末小项目,其中包括从 Outlook 获取所有 ToDo 任务,将它们放入 DataGridView 中,然后我就能够编辑和导出它们。

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

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

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

因此,我具体正在寻找“%完成”属性和状态属性,以及我能够解决的其他所有问题。

如果我能让它发挥作用,我的生活就会轻松得多:)

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

Jeffrey


您的意思是您需要从某个任务中检索特定于任务的属性吗?MailItem对象(相对于TaskItem目的)?

查看消息Outlook间谍软件 http://www.dimastr.com/outspy/(我是它的作者) - 单击 IMessage 按钮,查看 GetProps 选项卡中的 MAPI 属性。可以使用以下方式访问任何属性MailItem.PropertyAccessor.GetProperty。要使用的 DASL 名称GetProperty由 OutlookSpy 显示(在 IMessage 窗口中选择属性,请参阅 DASL 编辑框)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 MailItem 获取特定于任务的属性 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 按成员序列化

    我已经实现了template
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le

随机推荐