.net 对2003、2007和2010年适用的Outlook执行编程发送/接收

.net 对2003、2007和2010年适用的Outlook执行编程发送/接收,.net,outlook,.net,Outlook,我正在尝试编写一些基本的Outlook代码,这些代码应该支持Outlook 2003、2007和2010。我正在使用Outlook 2010 PIAs。除了一个会导致Outlook执行发送/接收的方法外,其他方法都可以正常工作。我尝试了几种选择: 调用Namespace.SendAndReceive方法(适用于Outlook 2007和2010,在Outlook 2003上失败,AccessViolationException) 遍历Namespace.SyncObjects并调用其start方

我正在尝试编写一些基本的Outlook代码,这些代码应该支持Outlook 2003、2007和2010。我正在使用Outlook 2010 PIAs。除了一个会导致Outlook执行发送/接收的方法外,其他方法都可以正常工作。我尝试了几种选择:

  • 调用Namespace.SendAndReceive方法(适用于Outlook 2007和2010,在Outlook 2003上失败,AccessViolationException)
  • 遍历Namespace.SyncObjects并调用其start方法(在Outlook 2003和2007中工作,在Outlook 2010上失败,在我尝试调用应用程序对象上的GetNamespace(“MAPI”)时,RPC服务器不可用)

  • 有人能提出一种在所有版本上都能一致工作的方法吗?

    我相信
    sendandereceive()
    是在2007年作为一种方便的方法添加的,所以正如您所发现的那样,这种方法在2003年不起作用。根据,您应该仍然能够使用
    SyncObjects
    集合并调用
    Start()
    。是否有可能您的2010安装有一个坏邮件/新闻/任何配置文件?
    Start()
    是否在特定的
    SyncObject
    上失败


    您可能已经想到的另一个解决方案是在2003年使用
    SyncObjects
    ,在将来的版本中使用
    sendandereceive()

    我相信
    sendandereceive()
    是在2007年作为一种方便的方法添加的,因此,正如您所发现的,这种方法在2003年不起作用。根据,您应该仍然能够使用
    SyncObjects
    集合并调用
    Start()
    。是否有可能您的2010安装有一个坏邮件/新闻/任何配置文件?
    Start()
    是否在特定的
    SyncObject
    上失败

    //First Register the Sync Event     
    if (oApp.Session.SyncObjects.Count > 0)
    {
        _syncObj = oApp.Session.SyncObjects[1];
        _syncObj.SyncEnd += new Outlook.SyncObjectEvents_SyncEndEventHandler(_syncObj_SyncEnd);
        _syncObj.Start();
    }
    void _syncObj_SyncEnd()
    {
        _syncObj.Stop();
    }
    

    您可能已经想到的另一个解决方案是在2003年使用
    SyncObjects
    ,在将来的版本中使用
    sendandereceive()

    谢谢您的回复。我不认为我的安装有问题,因为我在一次新的安装之后已经做了几次了。我考虑过第二个选项,但它很难看,我宁愿不在我的代码上执行硬编码测试。我将尝试调查哪个项目失败,稍后将其添加到我的问题中。我已编辑了我的问题。当我尝试在Outlook 2010的应用程序类上调用GetNamespace(“MAPI”)时,引发RPC服务器不可用异常。发现当我尝试在测试应用程序外部执行发送和接收时,该异常有效。因此,我推断我的代码失败是由于我的应用程序上的另一个错误@谢谢你的回复。谢谢你的回复。我不认为我的安装有问题,因为我在一次新的安装之后已经做了几次了。我考虑过第二个选项,但它很难看,我宁愿不在我的代码上执行硬编码测试。我将尝试调查哪个项目失败,稍后将其添加到我的问题中。我已编辑了我的问题。当我尝试在Outlook 2010的应用程序类上调用GetNamespace(“MAPI”)时,引发RPC服务器不可用异常。发现当我尝试在测试应用程序外部执行发送和接收时,该异常有效。因此,我推断我的代码失败是由于我的应用程序上的另一个错误@克里斯:谢谢你的回复。
    //First Register the Sync Event     
    if (oApp.Session.SyncObjects.Count > 0)
    {
        _syncObj = oApp.Session.SyncObjects[1];
        _syncObj.SyncEnd += new Outlook.SyncObjectEvents_SyncEndEventHandler(_syncObj_SyncEnd);
        _syncObj.Start();
    }
    void _syncObj_SyncEnd()
    {
        _syncObj.Stop();
    }