次の方法で共有


Understanding why error code 0X8004010F is thrown when trying to download an OAB

When it comes to downloading an OAB the following error code [ 0X8004010F ] is the biggest pain for everyone, and the most misunderstood error. The number one thing is to understand is that this error means MAPI_E_NOT_FOUND:

C:\dgoldman>err 0X8004010F
# for hex 0X8004010F / decimal -2147221233
ecNotFound ec.h
ecAttachNotFound ec.h
ecUnknownRecip ec.h
ecPropNotExistent ec.h
MAPI_E_NOT_FOUND mapicode.h
# 5 matches found for "0X8004010F"

With regards to downloading an OAB, if you see this error it means your OAB was not found. This can also be throw for a few different reasons based on your exchange configuration:

  1. A mixed organization that is going through a migration (2000- 2003), (2000-2007), etc
  2. You had public folder problems like: (replication, lost a public folder server and rebuilt it, had public folders rehomed)
  3. You just starting using Outlook 2007 and are trying to use HTTP/RPC (Outlook Anywhere).

Here is a high level overview on the client server interaction when downloading an OAB.

  1. Every morning at 5am or based on a custom schedule the Exchange server that is hosting the OAB will start an OABGen rebuild task.
  2. The System Attendant invokes oabgen.dll to start the rebuilt and pass along the OAB to be built.
  3. OABGen.dll will query a domain controller for the data needed to build an oab. While the data is being processed it will be split the data to different temp files residing on the c:\windows\temp directory.
  4. OABGen.dll will make a connection to a public folder store and download last nights public folder OAB files so they can be compared. This is where we will create the OAB differential files.
  5. OABGen.dll will make another connection to the public folder store it is associated with and posted a system message with the new files to the OAB Version 2, OAB Version 3 or OAB Version 4 folders. If you have Exchange 2007 the data will be posted to the local \\ExchangeOAB directory and then the FDS service on the CAS (Client Access Server) will copy over the new OAB files so they can be download by the client.
  6. The msExchUseOAB attribute. This attribute contains the DN of the offline address list to be downloaded. This attribute resides in two places (1. The user object in the active directory - Domain Naming Context Container, and 2. on the information store object). When the outlook client starts up it will look at its own user object in the active directory to see if there is anything in the msExchUseOAB attribute, and if there is this will override the information store settings. Having this set to an offline address list that no longer exists will cause the download to fail. If there is nothing on the user object then a query for the msExchUseOAB attribute on the server object where the mailbox resides. The MAPI property equivelant for this is called PR_ADDRBOOK_FOR_LOCAL_SITE_ENTRYID and contains an EntryID that looks like the following: 0000000001A447390AA6611CD9BC800AA002FC45A0300B4CF3F5BB03DC0499AB07A96F707B1AB0000000000080000
  7. The Outlook client will call the OpenFolder API on that EntryID which will corrosponds to the correct OAB root folder and then will try to open the OAB folders in the following format: OAB Version 4, OAB Version 3 or OAB Version 2.
  8. Based on the service pack, version of the Outlook cilent and version of the Exchange Information Store (store.exe) the client will connect to one of the OAB folders. In order for an Outlook client to connect to the OAB Version 4 folders it must be on Exchange 2003 SP2 and Outlook SP2 or Outlook 2007. Based on this service pack / hot fix combination the Outlook client will attempt to connect to the latest version is had knowledge about.

For Outlook 2003 (all service packs)

  1. For any reason if the client cannot connect to that the OAB folder it is looking for it will then attempt to connect to the next lowest version. Example (Connect to OAB Version 4 = failed, now try to connect to OAB Version 3 = failed, now try to connect to OAB Version 2 = failed), and now we throw the error: 0X8004010F.

Now this can be for a few reasons:

    1. The mailbox store your client is residing on does not have an OAB associated with it.
    2. The msExchUseOAB attribute is populate with a DN of an OAB that doesnt exist.
    3. The msExchUseOAB attribute on the information store is blank.  If you look in the ESM this is the OAB that is associated with that mailbox store and this can be reset.
    4. Someone has deleted the Default Global Address List. In this case this will break the link between the Default Offline Address List and the Default Global Address List and remove it from the information store object.
    5. You have multiple public folder stores and the OAB generation process has posted them to a different public folder store than you thought. Replication has not taken effect yet, thus there will be no new files or OAB files to download.
    6. Make sure that your SMTP connectors do not have restrictions blocking replicas from being passed to different public folder servers.
    7. The OAB generation process had a problem and terminated. In this case the files would not be posted to the public folder store.
    8. An administrator decommissioned the last Exchange server in a site and never pushed the replicas to another Exchange server.
    9. A new OAB is created in the active directory and the information store never reads the active directory during its maintenance schedule. This will result in the OAB files never being generated and the Outlook client will fail to download anything.
    10. The information store has an invalid EntryID that points to the legacy EX:/ folders. Again there is nothing for the client to download.
    11. An outlook client logging in from one domain to another domain and attempting to log in to another users mailbox.
    12. The OAB was never generated or some OAB folders are missing from the public folder store.
    13. Multiple OAB Version folders exist of the same type.
    14. Clients are attempting to download the OAB files from a public folder store that have not received the replicated updates.
    15. The offline address book list object has a missing address list.
    16. The offline address book list object has an incorrect address list.
    17. Send/As changes in the store affect users accounts with no mailbox full rights to another mailbox.

For Outlook 2007 (all service packs)

  1. If you have installed Exchange 2007 in to an Exchange 2003 organization you need to make sure that you have added the replicas of OAB to the Exchange 2007 server.

  2. Make sure public folder replication is working between servers. 

  3. An Autodiscover DNS record has not be setup by your ISP therefor will break HTTP/RPC because you will not be able to connect.

  4. You have set an invalid proxy setting in IE. Windows, Outlook and IE all use the same WinHTTP Proxy settings and if this proxy is incorrect all Outlook WinHTTP calls fill fail.

  5. Make sure the OAB is public folder enabled and you have OAB Version 2, OAB Version 3 and OAB Version 4 checked off so your legacy clients can download the OAB files from the public folder store. 

  6. Make sure that if you are using an Outlook 2007 client, your OAB is Web Distribution enabled and the OAB files have been replicated over to the Client Access Server. For more information on this process please see this blog:

    https://blogs.msdn.com/dgoldman/archive/2006/10/23/outlook-client-fails-to-download-the-oab-with-error-0x8004011b.aspx and
    https://blogs.msdn.com/dgoldman/archive/2006/08/25/How-Exchange-2007-OAB-Files-are-replicated-to-a-Client-Access-Server-for-download.aspx

  7. If you are removing your last Exchange 2003 server from the org, please make sure that you follow our documentation on this process.

  8. The OAB may not exist is if you have a cluster and that node that is currently inactive, and also is the only one set to generate the OAB.  For more information please see: https://blogs.msdn.com/dgoldman/archive/2007/02/08/oab-generation-on-a-cluster-server-fails-with-event-id-9395-or-9396.aspx

  Dave

Comments

  • Anonymous
    October 01, 2008
    PingBack from http://www.easycoded.com/understanding-why-error-code-0x8004010f-is-thrown-when-trying-to-download-an-oab/

  • Anonymous
    October 01, 2008
    OAB is copied by CAS from Mailbox Server. Not "copied to". By default CAS checks every 8 hours (Polling Interval), which might not correlate a new OALGen by a Mailbox Server. If for instance CAS checks at 4:00, then next check is at 12:00. If OAB is present in Public Folders, then it'll be available faster through PFs than through WebServices, insane :) Also the insane Windows 2008 cluster bug isn't yet resolved, if the CMS (esp if CCR) is the only Mailbox Server around, then it's very painful :(

  • Anonymous
    October 01, 2008
    This is one of those subjects that keep on coming back. A while ago, we had a post on how to troubleshoot

  • Anonymous
    October 01, 2008
    Hey Benoit, are you sure you see "copied to" on my blog? because I don't :) By the way on the semantics its actually the FDS service that gets the DS Status Notification so it knows when to start the file transfer. I think I know just a little about how OAB works :)

  • Anonymous
    October 01, 2008
    BTW, the cluster bug for CCR was fixed. We just submitted another one for SCR :)

  • Anonymous
    October 02, 2008
    David, I have 2 gals and my OAB is getting the list from the wrong gal even after pointing it to the right gal.

  • Anonymous
    October 02, 2008
    John, what is your setup? Are you in a mixed org? Were you trying to self host?

  • Anonymous
    October 03, 2008
    Why Google Should Enable Exchange Support for Android Is virtualizing Microsoft Exchange Server a good

  • Anonymous
    December 25, 2008
    I only get this error from external clients going through ISA Server 2006 Standard addition.  Any ideas on that?

  • Anonymous
    December 27, 2008
    This is typically because of too restrictive ISA rules and the clients not being permitted to have access to the CAS servers OAB directory.