检查交换连接状态

时间:2013-08-15 17:10:27

标签: outlook exchange-server outlook-vba

我想在继续编写脚本之前检查配置了Outlook帐户的Exchange服务器是否可用。目前,我没有检查,如果存在连接问题,脚本将永远挂在此行

Set m_objNS = m_objOutlook.GetNamespace("MAPI")

并且似乎没有反应。

如果在Outlook API中无法做到这一点,有没有办法可以检索交换服务器地址并对其进行ping操作或在.GetNameSpace函数上设置20秒超时?

更新:如果网络适配器出现问题(如果已禁用),则代码可以访问命名空间对象。交换模式将始终为400,直到有提示授权代码并且用户接受它。但是,如果有一个真实的(非测试目的问题),如交换服务器已关闭(目标主机无法访问),Outlook处于“尝试连接”状态并且您无法访问.Session对象或MAPI。

必须有办法判断服务器是否已关闭。

2 个答案:

答案 0 :(得分:3)

Excel可以使用一系列值返回状态。您可以执行If,然后以不同方式响应状态。值得注意的是,如果它是"试图连接"它至少在Outlook 2010中报告它已断开连接(300)。

这是返回值的代码(msgbox只是为了便于测试)。代码注释中的参考值,但也可在此处获得: http://msdn.microsoft.com/en-us/library/office/ff868474(v=office.14).aspx

Sub CheckExchangeStatus()
'olCachedConnectedDrizzle    olCachedConnectedFull   olCachedConnectedHeaders    olCachedDisconnected    olCachedOffline olDisconnected  olNoExchange    olOffline   olOnline
'600                           700                      500                         400                     200             300             0               100         800

 Dim olApp As New Outlook.Application
 Dim olNameSpace As Outlook.NameSpace

 Set olNameSpace = olApp.GetNamespace("MAPI")
 Dim ExchangeStatus  As OlExchangeConnectionMode

 ExchangeStatus = olNameSpace.ExchangeConnectionMode
 MsgBox (ExchangeStatus)

End Sub

答案 1 :(得分:1)

不确定你的脚本是做什么的,不知道这是我的建议。

使用会话对象来确定帐户是否处于脱机状态。

假设m_objOutlook是一个Outlook.Application对象

m_objOutlook.Session.Offline

或使用ExchangeConnectionMode

objOutlook.Session.ExchangeConnectionMode 

并检查以下其中一项

            olOffline
            olNoExchange
            olDisconnected
            olCachedOffline
            olCachedDisconnected