c# - 使用 Exchange Web 服务托管 API 检测电子邮件移动?

标签 c# exchangewebservices ews-managed-api

我正在使用 EWS 托管 API 和 C#。

我想知道是否可以检测电子邮件何时移至另一个文件夹。

这是我目前所拥有的:

static void SetPullNotifications(ExchangeService service)
{

    PullSubscription subscription = service.SubscribeToPullNotificationsOnAllFolders(
      5, null,
      EventType.Moved, EventType.Deleted, EventType.Copied, EventType.Modified);

    GetEventsResults events = subscription.GetEvents();

    foreach (ItemEvent itemEvent in events)
    {
        switch (itemEvent.EventType)
        {
            case EventType.Moved:
                MessageBox.Show("Item Moved :" + itemEvent.ItemId.UniqueId);
                break;
            case EventType.Deleted:
                MessageBox.Show("Item deleted: " + itemEvent.ItemId.UniqueId);
                break;
            case EventType.Copied:
                MessageBox.Show("Item Copied :" + itemEvent.ItemId.UniqueId);
                break;
            case EventType.Modified:
                MessageBox.Show("Item Modified :" + itemEvent.ItemId.UniqueId);
                break;
        }
    }
}

如果我在方法 GetEvents() 上放置一个断点,然后移动一封电子邮件,这会很好地工作。但是没有断点它就不起作用。 事件 不包含任何结果。

有什么想法吗?

最佳答案

你的方法是正确的,但你遗漏了一些东西。您的代码将仅获取在创建订阅和获取事件之间发生的事件,这就是它仅适用于断点的原因。

要使您的代码正常工作,您应该做两件事。 首先:在启动应用程序时创建订阅并保留对它的引用。 在 Second Store 中,您从订阅中获取水印,并在应用程序启动时重新加载它。可能是这样的:

static PullSubscription s_Subscription;

static void Main()
{
    ExchangeService service = CreateService();
    CreateSubsciption(service);
    //DoSomething;
    GetEvents();
    //DoSomething;
    StoreWatermark(s_Subscription.Watermark);
}

static void CreateSubscription(ExchangeService Service)
{
    string watermarkt = LoadWatermark(); 
    s_Subscription = service.SubscribeToPullNotificationsOnAllFolders(
        5, watermark,
        EventType.Moved, EventType.Deleted, EventType.Copied, EventType.Modified);

}

static void GetEvents()
{

    GetEventsResults events = subscription.GetEvents();

    foreach (ItemEvent itemEvent in events)
    {
        switch (itemEvent.EventType)
        {
            case EventType.Moved:
                MessageBox.Show("Item Moved :" + itemEvent.ItemId.UniqueId);
                break;
            case EventType.Deleted:
                MessageBox.Show("Item deleted: " + itemEvent.ItemId.UniqueId);
                break;
            case EventType.Copied:
                MessageBox.Show("Item Copied :" + itemEvent.ItemId.UniqueId);
                break;
            case EventType.Modified:
                MessageBox.Show("Item Modified :" + itemEvent.ItemId.UniqueId);
                break;

        }
    }
}

关于c# - 使用 Exchange Web 服务托管 API 检测电子邮件移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17185881/

相关文章:

c# - WP7 - 衡量性能改进

C# Mongodb FindOneAndReplace 或 ReplaceOne 不起作用

c# - 加密 UDP 数据包

c#-4.0 - 如何使用 folderid 属性获取 Exchange 邮箱地址?

c# - 如何通过单击按钮向上或向下移动 ListView 项目

c# - 在混合 Exchange 版本上使用 EWS API 的问题

c# - Exchange Web Services 2010/自动完成或建议的联系人

oauth-2.0 - 使用 MSAL 库获取访问 token 时随机获取请求超时 "confidentialClientApplication.AcquireTokenForClient"

exchangewebservices - EWS 约会 ID。独特的?

iphone - 是否可以使用 Microsoft 管理的 EWS 通过 MonoTouch 构建 iPhone 应用程序?