Office 2007:以编程方式控制外出助理?

时间:2009-11-05 07:56:41

标签: c# visual-studio-2008 office-2007 outlook-addin

有人知道如何在Outlook 2007中以编程方式启用/禁用外出自动回复器的实际状态吗?

已经在VS 2008中搜索了对象浏览器并找到了枚举Microsoft.Office.Interop.Outlook.OlBusyStatus,但我没有找到任何类或其他任何使用它的内容。

任何想法都表示赞赏,感谢和问候

1 个答案:

答案 0 :(得分:3)

更新:使用从this blog post改编的示例代码更新了以下代码,该代码可以在更广泛的Outlook安装中更好地工作(例如,使用Exchange和PST或访问多个Exchange邮箱的代码)。

这是在Outlook 2007上为我工作的代码,用于从外部(到Outlook)EXE设置OOF状态:

Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.ApplicationClass();
Microsoft.Office.Interop.Outlook.NameSpace ns = app.Session;
foreach (Microsoft.Office.Interop.Outlook.Store store in ns.Stores)
{
    if (store.ExchangeStoreType == Microsoft.Office.Interop.Outlook.OlExchangeStoreType.olPrimaryExchangeMailbox)
    {
        store.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x661D000B", true); // false to turn off OOF
        break;
    }
}

确保您没有以管理员身份运行该代码,并以非管理员身份运行Outlook - 否则您可能会在Vista上遇到与安全相关的错误。

请注意,它会在Outlook中弹出安全对话框,以确保用户可以访问Outlook对象模型。从外部EXE访问Outlook对象模型时,这是正常的。

但是,如果您从加载项访问对象模型,则上面的代码并不完全正确:您需要获取对构造函数的新Outlook.Application对象的引用,而不是通过构造函数创建新的Outlook.Application对象。来自加载项内的受信任的Outlook.Application对象,如下所示:

Microsoft.Office.Interop.Outlook.NameSpace ns = this.Application.Session;
foreach (Microsoft.Office.Interop.Outlook.Store store in ns.Stores)
{
    if (store.ExchangeStoreType == Microsoft.Office.Interop.Outlook.OlExchangeStoreType.olPrimaryExchangeMailbox)
    {
        store.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x661D000B", true); // false to turn off OOF
        break;
    }
}

顺便说一句,加载项的安全性有一个很好的MSDN article,如果您遇到安全对话框或错误,这可能很有用。