繁体   English   中英

Outlook插件如何检测帐户何时被删除

[英]How can Outlook addin detect when an account is removed

我从 Outlook 获得帐户,如下所示。

    Outlook.NameSpace ns = null;
    Outlook.Accounts accounts = null;
    Outlook.Account account = null;
    string accountList = string.Empty;

    try
    {
        ns = OutlookApp.Session;
        accounts = ns.Accounts;
        for (int i = 1; i <= accounts.Count; i++)
        {
            account = accounts[i];
            accountList += String.Format("{0} - {1}{2}", 
                account.UserName,  
                account.SmtpAddress, 
                Environment.NewLine);
            if (account != null)
                Marshal.ReleaseComObject(account);
        }
        MessageBox.Show(accountList);
    }
    finally
    {
        if (accounts != null)
            Marshal.ReleaseComObject(accounts);
        if (ns != null)
            Marshal.ReleaseComObject(ns);
    }

但是,Outlook 会返回帐户,包括已删除的帐户。
删除帐户时似乎没有发生任何事件。

账户被移除后,有没有办法获取被移除账户以外的账户? 如何获取不包括已删除帐户的帐户?

Outlook object model 没有为此提供任何事件。 您可以做的最好的事情是处理Stores.BeforeStoreRemove事件,该事件在即将从当前Store中以编程方式或通过用户操作删除时触发。 以下是 MSDN 对该事件的说明:


Outlook 必须运行才能触发此事件。 当发生以下任何情况时,将触发此事件:

  • 用户通过单击快捷菜单上的Close命令来删除商店。

  • 通过调用Namespace.RemoveStore以编程方式删除存储。

当发生以下任何情况时,此事件不会触发:

  • 当 Outlook 关闭并关闭主存储或委托存储时。

  • 如果通过 Microsoft Windows 控制面板中的邮件小程序删除了商店,并且 Outlook 未运行。

  • Microsoft Exchange Server 对话框的高级选项卡上删除了委托存储。

  • 当 Outlook 未运行时,将通过帐户管理器对话框的数据文件选项卡删除存储。

  • 从配置文件中删除 IMAP 存储。

您可以使用此事件来确定商店已被删除,并在您的应用程序需要该商店时采取适当的措施(例如重新安装该商店)。 否则,您将不得不求助于轮询 Stores 集合。

在 MAPI 级别(C++ 或 Delphi),帐户事件是通过IOlkAccountManager::Advise方法实现的。 您可以在OutlookSpy中看到事件触发(单击 IOlkAccountManager 按钮,go 到 Advise 选项卡)。

Outlook Object Model 不公开这些事件。 如果使用Redemption是一个选项,它会通过RDOAccounts object - AccountChange, AccountAdd, AccountRemove, AccountBeforeRemove, AccountOrderChange公开所有帐户事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM