Error "Cannot open Mailbox" when attempting to open an Exchange 2007 mailbox from Exchange 2010
The scenario is that you are logged into a Exchange 2010 mailbox and want to access a shared calendar or mailbox on Exchange 2007.
When attempting to open the mailbox, you may receive the following error/ (full call stack below):
Request
Url:
https://server.company.com:443/owa/proxyLogon.owa
Exception
Exception type:
Microsoft.Exchange.Data.Storage.StoragePermanentException
Exception message: Cannot open mailbox /o=Company/ou=Administrative Group/cn=Recipients/cn=testuser1.
First, we want to look at the Exception that failed inside of the callstack.
In the Inner Exception:
Exception type: Microsoft.Mapi.MapiExceptionCallFailed
Exception message: MapiExceptionCallFailed: Unable to make
connection to the server. (hr=0x80004005, ec=2084) Diagnostic context: Lid:
23065 EcDoConnectEx called [length=86] Lid: 17913 EcDoConnectEx returned
[ec=0x824][length=56][latency=58] Lid: 19778 Lid: 27970 StoreEc: 0x824 Lid:
17730 Lid: 25922 StoreEc: 0x824
80004005 = Generic Error (MAPI_E_CALL_FAILED)
2084 = ERROR_DS_CANT_REM_MISSING_ATT (An attribute cannot be retrieved from AD for the logon)
In troubleshooting the issue, we were able to figure out that the attribute that was missing was SharedCalendarTimezoneSetting.
Background:
There was new functionality that was added to Exchange 2007 SP3 RU1. This new functionality forces Exchange 2007 to check the delegate user's SharedCalendarTimeZone, which is used to determine what time zone to show the mailbox in. This works fine against an Exchange 2007 delegate mailboxes, but unfortunately it doesn’t work against Exchange 2010 mailboxes. The failure happens when the Exchange 2010 user attempts to access the Exchange 2007 mailbox and on login, we attempt to check this value in an attempt to learn how to present the data. This data doesn't exist and therefore the error is generated.
Resolution:
On Exchange 2007, set the default time zone setting:
set-organizationalconfig -sharecalendartimezonesetting principal
Note: This can be set to principal or delegate as the article explains, either will resolve the issue if we are running into this problem.
If the parameter value is set to Principal, the time zone is shown in the principal’s time zone. If the parameter value is set to Delegate, the time zone is shown in the Delegate’s time zone.
The Full Call stack:
Microsoft.Exchange.Data.Storage.ConnectionCachePool.OpenMailbox(String
serverDn, String userDn, String mailboxDn, Guid mailboxGuid, Guid mdbGuid,
Object identity, ConnectFlag connectFlag, OpenStoreFlag openStoreFlag,
CultureInfo cultureInfo, String clientInfoString, Boolean secondTry)
Microsoft.Exchange.Data.Storage.ConnectionCachePool.OpenMailbox(String
serverDn, String userDn, String mailboxDn, Guid mailboxGuid, Guid mdbGuid,
Object identity, ConnectFlag connectFlag, OpenStoreFlag openStoreFlag,
CultureInfo cultureInfo, String clientInfoString, Boolean secondTry)
Microsoft.Exchange.Data.Storage.ConnectionCachePool.OpenMailbox(String
serverDn, String userDn, String mailboxDn, Guid mailboxGuid, Guid mdbGuid,
Object identity, ConnectFlag connectFlag, OpenStoreFlag openStoreFlag,
CultureInfo cultureInfo, String clientInfoString)
Microsoft.Exchange.Data.Storage.MailboxSession.Initialize(LogonType
logonType, ExchangePrincipal owner, DelegateLogonUser delegateUser, Object
identity, OpenMailboxSessionFlags flags)
Microsoft.Exchange.Data.Storage.MailboxSession.CreateMailboxSession(LogonType
logonType, ExchangePrincipal owner, DelegateLogonUser delegateUser, Object
identity, OpenMailboxSessionFlags flags, CultureInfo cultureInfo, String
clientInfoString)
Microsoft.Exchange.Data.Storage.MailboxSession.Open(ExchangePrincipal
mailboxOwner, IntPtr authenticatedUserHandle, CultureInfo cultureInfo, String
clientInfoString)
Microsoft.Exchange.Clients.Owa.Core.OwaClientSecurityContextIdentity.CreateMailboxSession(ExchangePrincipal
exchangePrincipal, CultureInfo cultureInfo)
Microsoft.Exchange.Clients.Owa.Core.UserOptions.LoadSharedCalendarTimezoneSetting(TimezoneSetting&
setting)
Microsoft.Exchange.Clients.Owa.Core.UserOptions.Load(IList`1
properties)
Microsoft.Exchange.Clients.Owa.Core.UserOptions.LoadAll()
Microsoft.Exchange.Clients.Owa.Core.UserContext.Load(OwaContext
owaContext)
Microsoft.Exchange.Clients.Owa.Core.RequestDispatcher.CreateUserContext(OwaContext
owaContext, UserContextKey userContextKey, UserContext& userContext)
Microsoft.Exchange.Clients.Owa.Core.RequestDispatcher.PrepareRequestWithoutSession(OwaContext
owaContext, UserContextCookie userContextCookie)
Microsoft.Exchange.Clients.Owa.Core.RequestDispatcher.InternalDispatchRequest(OwaContext
owaContext)
Microsoft.Exchange.Clients.Owa.Core.RequestDispatcher.DispatchRequest(OwaContext
owaContext)
System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
System.Web.HttpApplication.ExecuteStep(IExecutionStep step,
Boolean& completedSynchronously)
Inner Exception
Exception type: Microsoft.Mapi.MapiExceptionCallFailed
Exception message: MapiExceptionCallFailed: Unable to make
connection to the server. (hr=0x80004005, ec=2084) Diagnostic context: Lid:
23065 EcDoConnectEx called [length=86] Lid: 17913 EcDoConnectEx returned
[ec=0x824][length=56][latency=58] Lid: 19778 Lid: 27970 StoreEc: 0x824 Lid:
17730 Lid: 25922 StoreEc: 0x824
Call stack
Microsoft.Mapi.MapiExceptionHelper.ThrowIfError(String
message, Int32 hresult, Int32 ec, DiagnosticContext diagCtx)
Microsoft.Mapi.ExRpcConnection.Create(ConnectionCache
connectionCache, ExRpcConnectionCreateFlag createFlags, ConnectFlag connectFlags,
String serverDn, String userDn, String user, String domain, String password,
String httpProxyServerName, Int32 ulConMod, Int32 lcidString, Int32 lcidSort,
Int32 cpid, Int32 cReconnectIntervalInMins, Int32 cbRpcBufferSize, Int32
cbAuxBufferSize)
Microsoft.Mapi.ConnectionCache.OpenMapiStore(String
mailboxDn, Guid mailboxGuid, Guid mdbGuid, ClientIdentityInfo clientIdentity,
String userDnAs, OpenStoreFlag openStoreFlags, CultureInfo cultureInfo, String
applicationId)
Microsoft.Mapi.ConnectionCache.OpenMailbox(String mailboxDn,
Guid mailboxGuid, Guid mdbGuid, ClientIdentityInfo clientIdentity, String
userDnAs, OpenStoreFlag openStoreFlags, CultureInfo cultureInfo, String
applicationId)
Microsoft.Exchange.Data.Storage.ConnectionCachePool.OpenMailbox(String
serverDn, String userDn, String mailboxDn, Guid mailboxGuid, Guid mdbGuid,
Object identity, ConnectFlag connectFlag, OpenStoreFlag openStoreFlag,
CultureInfo cultureInfo, String clientInfoString, Boolean secondTry)