Category Archives: Outlook

Learn about Top 5 Exchange OST Recovery Tools of 2016

With the development of various tools for recovering Exchange OST data, choosing a right one maybe quite confusing for users. Nevertheless, their motive is to be able to restore data from damaged OST files without affecting its integrity. Now-a-days, OST recovery Tools are in high demand among users as the Exchange OST file is very prone to corruption, mainly due to the synchronization issues. In such situations, one reliable way to restore back our data like emails, calendar, contacts, etc. from such OST files is to use automated recovery software. This article will guide users in choosing the right tool by discussing the Top 5 Exchange OST Recovery Tools of 2016. Continue reading Learn about Top 5 Exchange OST Recovery Tools of 2016

Deleted Items Folder is not visible in OWA or Outlook

One of our teams experienced a weird problem yesterday. One of the users was experiencing issues with him mailbox size. Mailbox Stats on the mailbox server (Exchange 2007) was showing his total mailbox item size as 1.3GB but the items in outlook were definitely not even close to that size as a sum of size of all items. I am sure a lot of us have already experienced similar issues already.

While taking a little closer look the team found that the problem was with the Deleted Items folder of that particular mailbox. The said folder was neither visible in outlook nor in OWA and contained most of the items in it, approximately 1 gig of data :-O. Yes, and that is why the mailbox size was exceeding the quota size limits.

We tried using Outlook.Exe /ResetFolders but that did not help either. The next step was to find out what is wrong with the deleted items folder that it is visible via powershell when Get-MailboxStatistics but not in outlook or OWA. If nothing is visible through conventional clients, the only way to manage/fix the things is to use MFCMAPI. Download latest version of MFCMAPI from http://mfcmapi.codeplex.com

Warning: MFCMAPI can cause severe damages to the mailbox if it is used incorrectly. Use this tool at your own risk.

1. Open MFCMAPI and logon to the problem mailbox.

2. Navigate to Deleted Items folder and simply highlight the Deleted Items Folder in left side pane of the utility.

image

3. Sort the property names in ascending order in the right hand side pane of MFCMAPI and locate the property named PR_ATTR_HIDDEN

This is a Boolean property which accepts the values as True or False. Objects with this property value set to True become invisible to clients and that is exactly what happened in our case too. For some reasons the value of this prop was set to True. Due to time constraints we could not find out the reason why it got changed.

4. The next step is to change the value to False so that the folder / object becomes visible in the client. To change the value simply double click on the prop PR_ATTR_HIDDEN and a pop up box comes up.

image

Check the checkbox Boolean and hit Ok button. Checking or un-checking the checkbox on above dialog box toggles the value between True and False.

 

Well that is it! you should get your lost folder visible back in mailbox using outlook / OWA.

Exchange 2010 Outlook Calendar Duplication – Another Weird Thing

Before I start, I must tell that there are several articles related to this kind of behavior but they do not really elaborate much about how to reach the resolution. I thought I would take few minutes to write up and help people. 🙂

Here is the scenario:

CEO of one of our customer companies was facing a long time unresolved issue with calendar item duplication. His secretary observed that she used to see duplication of some random meeting requests. Interestingly, she was not a delegate of his calendar and used his mailbox as an additional mailbox in outlook. This configuration ruled out the possibility of a corrupt rule in the mailbox that might have caused this behavior. In fact there was no corrupt rule in either of the mailboxes.

Here is what we did to investigate it in details:

MFCMAPI is my all-time favorite tool when it comes to troubleshooting complex client side issues. Another tool that was used in the entire troubleshooting is an internal tool to Microsoft so we could not really get hold of it. But, one of the PSS engineers helped us parsing the log files with correct information that was needed.

Using MFCMAPI:

Use MFCMAPI to locate the calendar items which seem to be getting duplicated in target mailbox. Export both messages into an XML file and look for the difference between two messages. Each object stored in Exchange Database gets a unique GUID stamped on it. If you open the XML file that is exported using MFCMAPI, you will see what the ID is stamped as a value of Prop LID_GLOBAL_OBJID value of this prop is unique on each item.

 

Using Exchange Server Store Trace:

In some complex issues you need to enable Exchange Server store trace. This procedure produces .etl files which are unreadable unless they are parsed. I would suggest you catch hold of someone in Microsoft to take some help to get the logs parsed. Technet Support Forums can be a good help there.

To enable store tracing follow http://support.microsoft.com/default.aspx?scid=kb;EN-US;971878 after parsing the etl files the output looks somewhat like below.

– User A sent a meeting request to CEO on 06:35:41.528 AM 1/19/2012 UTC which seems to have hit the recipient’s mailbox at 06:35:41.528 AM 1/19/2012 (Thursday, 19 January 2012, 12:05:00 [+5:30 GMT])

– Details recorded on the server for above mentioned message ID are as below:

o StartTrace GUID=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 Time:1/19/2012 6:35:41 AM

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 ServerBuild=14.01.0218.015

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 UserDN=/o=Exchange/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=SDG003

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 WszMailboxOwnerName=CEO

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 PguidMailbox=BFD0F2A2-1896-48BA-BA0A-E84AA53FA1ED

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 Connecting host=<NULL>

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 Connecting protocol=MAPI

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 SzApplicationId=<NULL>

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 MapiClient_Type=ctTransport

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 MapiClient_MachineName=HT-01

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 MapiClient_ProcessName=edgetransport.exe

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 MapiClient_UserName=

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 ClientBuildNumber=3585.0.32986.15

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 Flags for Notification type=40000005

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 Dirty Properties Mask=0x95FFFFFF

o TGuid=2F91F24E-E4AB-4F31-B74B-93FC96FDEE17 FolderName=Calendar

– What confirms the duplication of messages at primary look is a property named PR_CONVERSATION_TOPIC_W on both the messages.

– The original message sent by User A show PR_CONVERSATION_TOPIC_W = Meeting with CFO and CIO

– However the duplicated message (calendar entry) shows PR_CONVERSATION_TOPIC_W = Contracts Management – Status Update

– On the other hand an even closer look shows that the PR_NORMALIZED_SUBJECT_W has a similar value showing up on both messages and it appears as Meeting with CFO and CIO

– This makes the viewer believe that both messages are same.

– Trace for the duplicated message shows

o StartTrace GUID=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 Time:1/19/2012 6:47:10 AM

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 ServerBuild=14.01.0218.015

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 UserDN=/o=Exchange/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=SDG003

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 WszMailboxOwnerName=CEO

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 PguidMailbox=BFD0F2A2-1896-48BA-BA0A-E84AA53FA1ED

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 Connecting host=<NULL>

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 Connecting protocol=MAPI

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 SzApplicationId=Client=ActiveSync;UserAgent=RoadSync-S60/5.0;Action=/Microsoft-Server-ActiveSync/default.eas?User=00010090&DeviceId=358741022338476&DeviceType=Samsungi8910&Cmd=Sync

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 MapiClient_Type=ctAirSync

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 MapiClient_MachineName=BLR-VCAS-02

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 MapiClient_ProcessName=w3wp.exe

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 MapiClient_UserName=

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 ClientBuildNumber=3585.0.32986.15

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 Flags for Notification type=40000005

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 Dirty Properties Mask=0x15FFFFFF

o TGuid=65F2FFE7-5246-43B4-9B82-5BA4DB1256A3 FolderName=Recoverable Items

– Digging further down to the duplicated entry shows that the message did exist in the affected mailbox on the date 06:40:52.128 AM 9/15/2011 (Saturday, 15 September 2012, 12:10:00 UTC) and was called the application that exists on the phone Samsung I8910.

– It is a real mystery to identify how phone can really mess up the times but the logs are showing the things clearly. Possibly, the local cache of the phone / handheld still maintains a list of appointments offline.

Conclusion:

Looks like Mr CEO’s handheld device is creating the issues more than anything else at the moment. We may have to request him to stop using the device for some time to see if that resolves this problem. If that is not possible then change his mobile device settings to store only recent and future appointments and not all. The other way is to request him wiping his device to factory defaults if that is possible (but the last option)

 

At last, this post is a publication out of a technical troubleshooting note so may not be well formed with words used in it. In case you find anything confusing or I can help you understanding please feel free to comment or drop me a note.

Outlook 2010 Nickname Cache – An insider Story

Name cache in Outlook is a great feature, we all know. I personally find it extremely very useful since it saves a lot of time while selecting recipients. It has also helped adding few of those recipients who were likely to get missed on an email.

Outlook 2003 and 2007 both used locally stored .NK2 files to hold these name cache. These NK2 files could be found at %APPDATA%\Microsoft\Outlook. It was easy to backup these files or import them back if there were any issues observed. That was pretty simple business there. But a pain of keeping a bakup of these files was always there. In most the cases when user changed their computer these files were most likely to get skipped and they would lose their nickname cache.

When Outlook 2010 was launched it also changed the way the name cache is used by outlook. Instead of using a local NK2 file, outlook 2010 stores the name cache directly in the mail account’s delivery store (in simple words – “Mailbox”).

This post does not provide any troubleshooting information but a little more insight of this changed method of storing nick name cache directly into mailbox. Although it does not outline any troubleshooting steps, the information in this post should be helpful enough if you are troubleshooting a problem related to nickname cache.

The way nickname cache is stored in one of the portions of extremely complex structure in an exchange server 2010 mailbox is in the form of an attribute on a mailbox rule. To understand and to see the way this thing works; you require the very famous geeky tool, MFCMAPI. I must say Stephen Griffin has done an extra ordinary job by developing this utility and keeping it all the way updated over so many year. Thanks Steve 🙂

Let us take a look at how does this thing look like and how to see it.

1. Download MFCMAPI from http://mfcmapi.codeplex.com . Latest the better.

2. If you do not wish to do all configurations for running MFCMAPI without outlook, use it on a computer where outlook is installed. I would prefer outlook 2010 on the computer where I am going to use MFCMAPI.

3. Once you have the utility downloaded, open your mailbox by logging on to the profile you wish to explore.

Logon Screen

4. Select the profile that is already configured on the computer.

image

5. After you select the profile, you would see your mailbox, archives and public folder store in the window. In my case I do not have any PST files and PF store on my exchange server. Now, right click on your mailbox and select Open Store

image

6. That brings up another window, which is an invisible view of the mailbox using any known MAPI, NON-MAPI client. Expand Root – Mailbox –> IPM_SUBTREE in this newly opened window and you would see the similar folder structure that you see using outlook. If you are connected to exchange server in online mode the structure would look a very little different and IPM_SUBTREE is replaced with another folder named Top of Information Store.

A few more folders are made visible by MFCMAPI. I strongly recommend you do not play around them unless you really understand why they are there.

7. Select your Inbox folder, right click, and select Open associated contents table from the context menu.

8. Above action brings up another window of MFCMAPI, which shows hidden, visible rules in your mailbox.

image

You may not see the similar screen as above since I have adjusted the columns as per my convenience. Yet, the key bit here is the rule that stores your nickname cache information. By expanding columns and scrolling horizontally in the rules pane; you should be able to figure out a rule that’s message class is IPM.Configuration.Autocomplete. Yes, that is the one which manages your nickname cache.

Question is, where is the actual information? Why is it not visible in above screen shot if the message class IPM.Configuration.Autocomplete holds all my nickname cache data? Well, do  you see that red mark in the properties pane?

The nickname cache is stored in a property of the rule IPM.Configuration.Autocomplete named PR_ROAMING_BINARYSTREAM. That is correct. It is a binary stream that is stored in your mailbox as a property of the rule mentioned / highlighted above.

I think the data you are interested in is still not visible to you. This is the real trick. The property PR_ROAMING_BINARYSTREAM is the property of type PT_BINARY. Since it holds a binary stream of information it may not be displayed directly when you are on the screen shown above.

9. To see what is inside the scoop; right click on the property 0x7C09000A and select Smart View.

image

10. In Structure Picker window, select structure to interpret as Nickname Cache

11. A new window that will show up on your screen is the information you perhaps did not know. 🙂

image

Whoa! What is that information?

Looks weird first time but if you take a closer look at the information that is displayed, it looks like some structured information represented in a plain text format. This binary stream is nothing but a structure that is similar to a database consisting of rows and properties on each row which has further properties again. Lets dive a little deeper into this information

Nickname Cache
Metadata1 = cb: 4 lpb: 0DF0ADBA
Major Version = 12
Minor Version = 0
Row Count = 11

Row Count tells you about how many records are stored in your nickname cache.

 

Below is a dump of single record that appears in your nickname cache when you start typing a name in outlook To, CC, BCC fields (Names and Email Addresses changed by me)

  • A closer analysis of below dump would make you understand that each row is represented by an unique number starting from 0. Each name that appears after you start typing a recipient’s name is equal to a Row in the below information. If you have 100 names stored, the first row would be Row 0 and the last would be Row 99
  • Each row represents a unique record itself.
  • Each row has few more properties represented by Property[0], Property[1], and so on. These properties have their own properties again. Just like what you see in below dump.
  • Each of these properties represent a specific block of information about the cached nickname by outlook.

For Example:

Property[0] – Property Name
Property = 0x6001001F – Property Identifier
Exact Matches: PR_NICK_NAME_W – Property Name
Partial Matches: PR_NICK_NAME, PR_NICK_NAME_A, PR_DOTSTUFF_STATE – Other properties with similar structure to PR_NICK_NAME_W
PropString = Exchange.Geek@GEEKLABS.COM AltPropString = cb: 40 lpb: – Self Explanatory. This is the string value of the property [0] which is PR_NICK_NAME_W

    Row 0
    cValues = 0x00000017 = 23
    Property[0]
    Property = 0x6001001F
    Exact Matches: PR_NICK_NAME_W
    Partial Matches: PR_NICK_NAME, PR_NICK_NAME_A, PR_DOTSTUFF_STATE
    PropString = Exchange.Geek@GEEKLABS.COM AltPropString = cb: 40 lpb: 4F004D002E004900540046004D005300400067006D007200670072006F00750070002E0069006E00
    Property[1]
    Property = 0x39FE001F
    Exact Matches: PR_SMTP_ADDRESS_W, PidTagSmtpAddress
    Partial Matches: PR_SMTP_ADDRESS, PR_SMTP_ADDRESS_A, ptagPrimarySMTPAddress
    PropString = Exchange.Geek@GEEKLABS.COM AltPropString = cb: 40 lpb: 4F004D002E004900540046004D005300400067006D007200670072006F00750070002E0069006E00
    Property[2]
    Property = 0x3A00000A
    Partial Matches: PR_ACCOUNT, PR_ACCOUNT_A, PR_ACCOUNT_W, PidTagAccount
    PropString = Err:0x8004010F=MAPI_E_NOT_FOUND AltPropString =
    Property[3]
    Property = 0x0C150003
    Exact Matches: PR_RECIPIENT_TYPE, PidTagRecipientType, ptagRecipientType
    PropString = 2 AltPropString = 0x2
    Smart View: Flags: MAPI_CC
    Property[4]
    Property = 0x3001001F
    Exact Matches: PR_DISPLAY_NAME_W, PidTagDisplayName
    Partial Matches: PR_DISPLAY_NAME, PR_DISPLAY_NAME_A, ptagDisplayName
    PropString = Exchange Geek AltPropString = cb: 54 lpb: 530075006E0069006C0020004F007000650072006100740069006F006E0020004D0061006E006100670065007200200042004C005200
    Property[5]
    Property = 0x3002001F
    Exact Matches: PR_ADDRTYPE_W, PidTagAddressType
    Partial Matches: PR_ADDRTYPE, PR_ADDRTYPE_A, ptagAddrType
    PropString = EX AltPropString = cb: 4 lpb: 45005800
    Property[6]
    Property = 0x0FFF0102
    Exact Matches: PR_ENTRYID, PR_MEMBER_ENTRYID, PidTagEntryId, PidTagMemberEntryId, ptagEntryId
    PropString = cb: 116 lpb: 00000000DCA740C8C042101AB4B908002B2FE18201000000000000002F6F3D474D5247726F75702F6F753D45786368616E67652041646D696E6973747261746976652047726F7570202846594449424F484632335350444C54292F636E3D526563697069656E74732F636E3D434E4C5432363300 AltPropString = ….ܧ@ÈÀB..´¹..+/á?……../o=GEEKLABS/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=ExchangeGeek.
    Smart View: Exchange Address Entry ID:
    abFlags = 0x00000000
    Provider GUID = {C840A7DC-42C0-1A10-B4B9-08002B2FE182} = muidEMSAB
    Version = 0x00000001 = EMS_VERSION
    Type = 0x00000000 = DT_MAILUSER
    X500DN = /o=GEEKLABS/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=ExchangeGeek
    Property[7]
    Property = 0x3003001F
    Exact Matches: PR_EMAIL_ADDRESS_W, PidTagEmailAddress
    Partial Matches: PR_EMAIL_ADDRESS, PR_EMAIL_ADDRESS_A
    PropString = /O=GEEKLABS/OU=EXCHANGE ADMINISTRATIVE GROUP (FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=ExchangeGeek AltPropString = cb: 174 lpb: 2F004F003D0047004D005200470052004F00550050002F004F0055003D00450058004300480041004E00470045002000410044004D0049004E004900530054005200410054004900560045002000470052004F005500500020002800460059004400490042004F0048004600320033005300500044004C00540029002F0043004E003D0052004500430049005000490045004E00540053002F0043004E003D0043004E004C005400320036003300
    Property[8]
    Property = 0x300B0102
    Exact Matches: PR_SEARCH_KEY, PidTagSearchKey, ptagSearchKey
    PropString = cb: 91 lpb: 45583A2F4F3D474D5247524F55502F4F553D45584348414E47452041444D494E4953545241544956452047524F5550202846594449424F484632335350444C54292F434E3D524543495049454E54532F434E3D434E4C5432363300 AltPropString = EX:/O=GEEKLABS/OU=EXCHANGE ADMINISTRATIVE GROUP (FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=ExchangeGeek.
    Property[9]
    Property = 0x3D010102
    Exact Matches: PR_AB_PROVIDERS, PidTagAbProviders
    PropString = cb: 16 lpb: 64089B1A0053EC4995777ED6B1F7232A AltPropString = d.?..SìI?w~Ö±÷#*
    Property[10]
    Property = 0x5FFF0003
    Exact Matches: PR_RECIPIENT_TRACKSTATUS, PidTagRecipientTrackStatus, ptagRecipientTrackStatus
    PropString = 0 AltPropString = 0x0
    Smart View: Flags: respNone
    Property[11]
    Property = 0x5FDE0003
    Exact Matches: PR_RECIPIENT_RESOURCESTATE, PidTagRecipientResourceState
    PropString = 0 AltPropString = 0x0
    Property[12]
    Property = 0x5FFD0003
    Exact Matches: PR_RECIPIENT_FLAGS, PidTagRecipientFlags
    PropString = 1 AltPropString = 0x1
    Smart View: Flags: RECIP_SENDABLE
    Property[13]
    Property = 0x5FF6001F
    Exact Matches: PR_RECIPIENT_DISPLAY_NAME_W, PidTagRecipientDisplayName
    Partial Matches: PR_RECIPIENT_DISPLAY_NAME
    PropString = Exchange Geek AltPropString = cb: 54 lpb: 530075006E0069006C0020004F007000650072006100740069006F006E0020004D0061006E006100670065007200200042004C005200
    Property[14]
    Property = 0x5FF70102
    Exact Matches: PR_RECIPIENT_ENTRYID, PidTagRecipientEntryId, ptagRecipientEntryId
    PropString = cb: 116 lpb: 00000000DCA740C8C042101AB4B908002B2FE18201000000000000002F4F3D474D5247524F55502F4F553D45584348414E47452041444D494E4953545241544956452047524F5550202846594449424F484632335350444C54292F434E3D524543495049454E54532F434E3D434E4C5432363300 AltPropString = ….ܧ@ÈÀB..´¹..+/á?……../O=GEEKLABS/OU=EXCHANGE ADMINISTRATIVE GROUP (FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=ExchangeGeek.
    Smart View: Exchange Address Entry ID:
    abFlags = 0x00000000
    Provider GUID = {C840A7DC-42C0-1A10-B4B9-08002B2FE182} = muidEMSAB
    Version = 0x00000001 = EMS_VERSION
    Type = 0x00000000 = DT_MAILUSER
    X500DN = /O=GEEKLABS/OU=EXCHANGE ADMINISTRATIVE GROUP (FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=ExchangeGeek
    Property[15]
    Property = 0x5FF20003
    PropString = 0 AltPropString = 0x0
    Property[16]
    Property = 0x5FEF0003
    PropString = 0 AltPropString = 0x0
    Property[17]
    Property = 0x5FF50003
    PropString = 0 AltPropString = 0x0
    Property[18]
    Property = 0x5FEB0003
    PropString = 0 AltPropString = 0x0
    Property[19]
    Property = 0x5FDF0003
    Exact Matches: PR_RECIPIENT_ORDER, PidTagRecipientOrder, ptagRecipientOrder
    PropString = 8 AltPropString = 0x8
    Property[20]
    Property = 0x6002000B
    PropString = False AltPropString =
    Property[21]
    Property = 0x6003001F
    Exact Matches: PR_DROPDOWN_DISPLAY_NAME_W
    Partial Matches: PR_DROPDOWN_DISPLAY_NAME, PR_DROPDOWN_DISPLAY_NAME_A
    PropString = Exchange Geek <Exchange.Geek@GEEKLABS.COM> AltPropString = cb: 100 lpb: 530075006E0069006C0020004F007000650072006100740069006F006E0020004D0061006E006100670065007200200042004C00520020003C004F004D002E004900540046004D005300400067006D007200670072006F00750070002E0069006E003E00
    Property[22]
    Property = 0x60040003
    Exact Matches: PR_NICK_NAME_WEIGHT
    PropString = 16384 AltPropString = 0x4000

    Again, another question would start bothering you. Do I mean that outlook queries exchange server over MAPI all the times when someone start typing a name in To, CC or BCC fields?

    Answer is No!

    Unless your outlook profile is not configured in Online mode; outlook would not really go and ask for the information to the exchange server. Instead, it maintains a local replica of the nickname cache which is stored on the client computer at location %USERPROFILE%\AppData\Local\Microsoft\Outlook\RoamCache in one or more .dat files.

    This behavior makes it faster to access the information instead of making a MAPI call to the store every time someone types a name. This locally stored information stays in read only format though. Outlook can read from these files but cannot write back into them. Even if you manage to write something back to these files the updated information would not get written back in your mailbox on the server.

    Another aspect of the way nickname cache information is displayed in Exchange 2010 Outlook Web App. Since OWA works as a persistent session to CAS server / CAS Array from the client computer this information should ideally be streamed online every time someone tries to type a name in To, CC or BCC fields. But, interestingly, the way this information is handled by OWA is little different that you can imagine. Exchange 2010 OWA (premium mode only) also caches this binary stream stored in the prop PR_ROAMING_BINARYSTREAM locally to the client computer. That is why you may still see name cache available in OWA new message window, even after losing network connection to the server.

     

    image

     

    Well, that is all about it. I will keep few more things posted as and when get time. For now, enjoy this post and let me know if you find any documentation bugs :-). Feel free to leave your feedback in case you like / disliked this post.

    .

    NoReplyAll – Outlook Addin

    I do remember when one of my colleagues asked me to find out a way to hide the Reply To All button on outlook message form or place it somewhere else than it’s regular location on new message form. I have no clue why did they want to implement this (don’t even want to know :-P) but I think I don’t have to work on this 🙂

    MS Research has developed a addin for Microsoft Office Outlook which does the job. You can download this addin from here –> http://research.microsoft.com/en-us/downloads/60860f41-88ab-4bb4-8104-765feca9cfed/

    Thought should be shared so if someone wants something similar to this they should be able to find it on the web.

    Exchange 2010 Online Archive Support for Outlook 2007– Now Available

    I have seen many people asking a very common question in forums and restricted news groups, “Is there any support available for Outlook 2007 clients to access Exchange 2010 online archive?” Answer to this was no but now Yes. It is available now.

    Exchange team announced the support yesterday and the December 2010 cumulative update for Office 2007 family will add this feature in Outlook 2007 now.

    The update can be downloaded from: Office 2007 Cumulative Update for December 2010

    I am sure everyone knows the limitation but thought of reminding one more time. You need Exchange 2010 Enterprise CALs to avail the online archive mailbox feature. So it is very clear that if you are running exchange 2010 standard CALs.

    Additional Mailbox Auto Mapping in Exchange 2010 SP1

    A user having full mailbox access on another mailbox can have that mailbox added in outlook profile so that he/she don’t have to logon to that mailbox separately. This has been a regular practice for many organization. Normally a support mailbox where all support requests are stored is a common example of an additional mailbox added to outlook profiles.

    Outlook 2007 and earlier version did the job very well but there was always a limitation in case an outlook profile needs to reconfigured or the user’s computer changes. User or the IT support needed to add the additional mailbox back to user’s profile. How about an idea where user’s/IT support don’t need to add additional mailboxes once they are configured? Yes. That is very much possible if you are running Exchange 2010 SP1 and Outlook 2010.

    Let’s take a look at how to get this working.

    First you need grant Full Mailbox Access to the additional mailbox you are willing to add in outlook. In my case I have a support mailbox which is added in a user’s profile named Exchange Geek.

    Use EMC or EMS to grant full mailbox access permission to support mailbox.

    image

    Now click on Add button and add the user account which needs full access.

    image

    After this get back to the desktop where outlook is installed. I configure an outlook profile for user Exchange Geek and add the Support Mailbox in the profile.

    image

    So, How it works even after you lose your windows profile or outlook profile? Exchange 2010 stores the full access permission in active directory. Simply similar to what Exchange 2003 or 2007 did.

    If you open the additional mailbox properties in adsiedit.msc you will observe the attribute msExchDelegateListLink having its value as DN of the user account who has full access to the additional mailbox.

    image

    Outlook 2010 fetches this value automatically and configure an additional mailbox that you had added previously. When outlook profile is reconfigured, outlook picks up the additional information from your mailbox. Your mailbox now hold the information about the additional mailboxes that you added recently and didn’t remove them intentionally. A new folder named Shared Data is created within the mailbox table which contains all information about the additional mailboxes that you ever added.

    image

    I hope this helps people to prevent reconfiguring the mailboxes 😉 Please do let me know your comments and feedback if you have any.

    How to add Employee Numbers in ADUC and Exchange GAL

    Some companies need to use AD to store their Employee Numbers or Employee IDs but due to limitations in ADUC MMC most of the people don’t tend to do this.

    I am not very sure how frequently some company needs this but one of my friend needed it for sure. 🙂 I did this in my labs few months ago and worked on at least 3 production environments too. I thought I can share this with everyone who reads at my blog. However, the steps I am going to show in this blog post will only apply to Exchange 2007 and Exchange 2010 GAL. Also, the templates editor tool that we are going to use does not show Employee ID field in the bindings page.

    There are few steps involved in doing this:

    1. A simple VB script stored at some location on network.
    2. Schema Admin group membership to the user account you are going to carry out this operation with.
    3. Exchange Organization Administrator group membership.

    Using the Visual Basic Script

    • Copy and Paste the below text in a notepad file and save it as .vbs

    On Error Resume Next
    Dim objemployeeID
    Dim objUser
    Dim ObjTemp
    Set objemployeeID = Wscript.Arguments
    Set objUser = GetObject(objemployeeID(0))
    objTemp = InputBox("Current Employee ID: "& objUser.employeeNumber & "If you would like to enter a new number of modify the exisitng number, enter the new number in the textbox below")
    if objTemp <> "" then objUser.Put"employeeNumber",objTemp
    objuser.SetInfo
    If Err.Number = "-2147024891" Then
    MsgBox "Your current account does not have permissions to modify the Employee-ID attribute. Please log on with an account with appropriate permissions.",16,"Permission Denied"
    End If
    Set ObjUser = Nothing
    Set objemployeeID = Nothing
    Set objTemp = Nothing
    WSscript.Quit

    • Rename this file to .vbs and store at some network share e.g. \servernameADScriptsEmpID.vbs . The only idea behind storing this script on a network location is to keep this available even the ADUC is used from client computers.

    Editing Schema and User Display Configurations in AD configuration partition:

    Warning: It is highly recommended that you back up your Active Directory before modifying anything in schema. Incorrect changes in schema can cause undesired behavior of Active Directory Services.

    • Logon to any domain controller with Schema Admin privileges.
    • Click Start –> Run and type regsvr32 schmmgmt.dll and hit enter.
    • Click OK on the information dialog that appears on the screen
    • Click Start –> Run and type MMC and press enter.
    • In MMC click File menu and select Add/Remove Snap-In.
    • Click on Add button on Add/Remove Snap-in page.
    • Select Active Directory Schema from the list that appears on the screen.
    • Click Add and click Close and click Close.
    • Expand Classes in Active Directory Schema Snap-in and locate class person.
    • Right click on class person, select Properties and click on Attributes tab.

    image

    • Click on Add button and select employeeID

    image

    • Repeat above step to add employeeNumber as well.
    • Now open ADSIEDIT.MSC and locate CN=user-Display,CN=409,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=com
    • Right click on CN=user-Display and select Properties.
    • Locate the attribute adminContextMenu on Attribute Editor page and click Edit button.
    • Type ,&Employee-ID,\adpun3AD ScriptsEmpID.vbs exactly as shown in figure below and click Add button. (I recommend copy and paste the text in red color)

    image

    • Click OK button and exit the ADSIEDIT.msc
    • Now open Active Directory Users and Computers and locate the user account you want to modify the Employee ID for. You will see an additional context menu item in when you right click on the desired user object.

    image

    • A new pop up appears when you click the above context menu. You can enter or modify the Employee ID for the select user account using the the pop up.

    image

    Adding Employee ID field in Exchange 2007 Global Address List

    • Now to make this Employee ID field visible in Exchange 2007 Global Address list you can use Details Templates Editor tool from Exchange 2007 EMC.
    • Logon to your Exchange 2007 Server with Organization Administrator and open Exchange Management Console.
    • Locate and Open Details Templates Editor Tool from Toolbox node in EMC.
    • Locate the template for User type and Language English (United States) and click Edit from Actions pane. Refer below figure.

    image

    • A new Editor Opens on the screen. Select a Label and a Edit controls from Tools pane in the opened Editor window and place them at your desired location.

    image

    • Add details to the Label control using property editor pane in the editor tool. To do this, select The Label control that you just dragged and dropped on the template and add the text in properties pane.

    image

    • Add details to Edit control and bind it to specific attribute in AD. To do this, select the Listbox control and select Employee ID attribute from Properties pane.

    image

    • Save the edited template by selecting File Menu and Save.
    • Exchange GAL will show the details as shown below. If you are using outlook in cached mode then you will have to wait till the OAB is generated.

    image

    I hope you find this useful and can use when you require this. Do let me know if you have any comments on the post.

    Week Numbers 1 week ahead in Outlook

    Today when I came in office I saw an email from my boss. He was asked by one the bussiness heads that why the week numbers in outlook would show one week ahead?

    Here is a little background about the week numbers:

    Week number according to the ISO-8601 standard, weeks starting on Monday. The first week of the year is the week that contains that year’s first Thursday. The highest week number in a year is either 52 or 53 and outlook is fully compliant to this specification.

    Normally, when we configure the outlook profile we do not pay much attention to a very small calendar setting which actually manages all this week number related stuff. Its pretty simple to configure. In common situations the calendar is configured to use the 1 Jan of the year as the first week of the year. Which results in this mismatch of outlook calendar numbering.

     To correct it you can simply go to 

    Tools –> Options –> Calendar Options –>

     

    How to prevent users from delegating their own mailboxes

    Delegation is a great feature of outlook where users can allow their mailbox contents to be shared with their colleagues within the team. It also reduces the load on exchange administrators or the helpdesk to grant full mailbox permissions at the server level.

    Though this feature is greatly helpful in many scenarios it becomes a concern when users share their mailbox folders, calendars or contacts with folks who are not supposed to see the information and the information is also sensitive enough to be confidential. For many other reasons like server performance, IT department may not want their users to have the ability to share mailbox contents with others (though delegation may not cause heavy performance impact on servers compared to other things).

    Now the question is how to disable this for users in bulk? Delegation is an outlook feature and exchange supports it with few attributes on the delegated as well delegate’s user account in AD and rules in both mailboxes. Outlook deployment within your network is the only place where you can control this. But the trouble in doing so is that administrative templates in group policy for outlook and other office products do not have any provision for this. Here are few steps to make it possible:

    1. According to KB 948894 for a single user you can edit few registry keys and make it happen":

    A point to be noted here before proceeding is if you have outlook 2003 then you must, must have hotfix package 948893 installed. This hotfix provides some new policies in the form of new registry settings which will later needs to be created and modified.

    Once you have the above mentioned hotfix installed for an outlook 2003 client you can create and enable the registry settings written by this hotfix. The settings those need to be modified are below:

    Locate and then click the following registry subkey:

  • HKEY_CURRENT_USERSoftwareMicrosoftOffice11.0OutlookOptionsFolders

  • On the Edit menu, point to New, and then click DWORD Value.

     

    image

     

  • Type DisableEditPermissions, and then press ENTER.

     

    image

  • Right-click DisableEditPermissions, and then click Modify.
  • In the Value data box, type 1, and then click OK.

     

    The same method applies to Outlook 2007 as well. The only change in the procedure will be creating the Folders key under the path HKEY_CURRENT_USERSoftwareMicrosoftOffice12.0OutlookOptions

     

    Restart your outlook and you are good to go.

     

    2. For multiple users:

    Above configuration is feasible to be done for a single or up to 10 users but it will become a pain if this needs to be done organization wide and again, keeping track of users is not easy. So what you can do is deploy these registry settings by a GPO.

    Just to not duplicating the information I would not run through the whole process here when its already available at Microsoft DS team’s blog. Please refer the article below to deploy the registry changes.

    Deploying Custom Registry Changes through Group Policy

    Before you deploy this setting using GPO you need to understand that users not having their outlook configured on a domain joined machine and are using RPC/HTTP(S) to use access mailboxes will not be affected by this GPO.

    At last, I would like to highlight that when you open the registry editor you may not see the Folders key created automatically and you will have to create that manually.