<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Brendon Lee’s Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/brenle/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/brenle/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 06:20:01 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>HTTP 500 Internal Server Error when logging into Exchange 2013 Exchange Control Panel (ECP)</title>
      <link>https://docs.microsoft.com/archive/blogs/brenle/http-500-internal-server-error-when-logging-into-exchange-2013-exchange-control-panel-ecp</link>
      <pubDate>Sat, 02 May 2015 10:11:00 GMT</pubDate>
      <dc:creator><![CDATA[brenle]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/brenle/2015/05/02/http-500-internal-server-error-when-logging-into-exchange-2013-exchange-control-panel-ecp/</guid>
      <description><![CDATA[Over the past several months, I&#39;ve seen an increased number of Exchange 2013 cases where certain...]]></description>
      <content:encoded><![CDATA[<p>Over the past several months, I&#39;ve seen an increased number of Exchange 2013 cases where certain admin users received a 500 status error when attempting to log in to ECP:</p>
<p></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/500error.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/500error.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/500error.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/500error.png" border="0" /></a></p>
<p></p>
<p>The first question I ask when I get these specific cases is &quot;<em>Does the admin account have a mailbox</em>&quot;?</p>
<p>&nbsp;In pretty much every case that I can remember, the response is &quot;<em>No</em>&quot;.&nbsp; And immediately, I know exactly where to look!</p>
<p>&nbsp;</p>
<p><strong>A little history&hellip;</strong></p>
<p>&nbsp;As you may know, because of the design of Exchange 2013 - the CAS role simply locates your mailbox, then proxies the request back to your mailbox server - an &quot;anchor mailbox&quot; is used.&nbsp; This anchor mailbox is simply your Exchange GUID, and is used for a number of reasons in Exchange 2013 connectivity.&nbsp; The most obvious, though, are:</p>
<p>&nbsp;</p>
<ul>
<li>As mentioned above, so that an Exchange 2013 CAS knows what mailbox server to proxy a request to</li>
<li>To prevent the &#39;Your administrator has made a change so you must restart Outlook&#39; message that you get when a mailbox is moved to a different site.</li>
</ul>
<p>&nbsp;</p>
<p>You can see evidence of the anchor mailbox when you configure an Outlook profile for an Exchange 2013 mailbox:</p>
<p></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/outlook.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/outlook.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/outlook.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/outlook.png" border="0" /></a></p>
<p></p>
<p></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/exchangeguid.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/exchangeguid.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/exchangeguid.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/exchangeguid.png" border="0" /></a></p>
<p></p>
<p>Notice the ExchangeGuid is used as the &#39;Server&#39; in the outlook profile, instead of an actual server name.</p>
<p>&nbsp;</p>
<p><strong>OK that&#39;s great and all, but what does that have to do with this&nbsp;status 500&nbsp;that I&#39;m getting?</strong></p>
<p>&nbsp;Well, let&#39;s think about it.&nbsp; If the Exchange 2013 CAS needs to know where to proxy a request, but the request is coming from an account that has no mailbox, and thus no ExchangeGuid associated with it, how does Exchange know which mailbox server to proxy?</p>
<p>&nbsp;In instances like this, Exchange 2013 uses the ExchangeGuid of system mailboxes to determine where to proxy the requests.&nbsp;&nbsp; In this specific scenario, Exchange uses the system mailbox SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}</p>
<p></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/systemmailbox.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/systemmailbox.png"><img width="530" height="68" style="width:599px;height:98px;" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/systemmailbox.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/systemmailbox.png" border="0" /></a></p>
<p></p>
<p>Note: When pulling up the system mailbox(es) using Get-Mailbox you must specify the -Arbitration parameter or the command will not work.</p>
<p>&nbsp;</p>
<p><strong>So how do I fix this?</strong></p>
<p>Typically, what I&#39;ve found is that this is caused by either the database with the system mailbox is unavailable, or some attribute on the system mailbox account has become corrupt or is missing.&nbsp;</p>
<p>Many times, this issue is accompanied by another - such as users unable to connect to Exchange, and the 500 error is discovered when the admin attempts to log in to ECP to try and figure out what is wrong.&nbsp; In this case, Exchange Management Shell is your friend as you will need to determine whether the database is mounted via shell.&nbsp;</p>
<p>In other instances, I&#39;ve found that system mailbox, for some reason has incorrect information, such as missing email addresses.&nbsp; You can either compare it to the other system mailboxes (Get-Mailbox -Arbitration) or compare to your lab environment (I hope you have a lab!)</p>
<p>Finally, I&#39;ve seen some companies simply deleted the database that had the system mailboxes on it.&nbsp; Or delete the AD account for the system mailbox.&nbsp; Or both.&nbsp; This isn&#39;t cool.&nbsp; Exchange uses these mailboxes for many things, including OAB generation, so it is critical to keep these mailboxes healthy!&nbsp; To fix this:</p>
<p>&nbsp;</p>
<p style="margin-left:30px;"><em>If the mailbox was deleted but the AD account still exists:</em></p>
<p style="margin-left:30px;">Run: Enable-Mailbox &quot;SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}&quot; -Arbitration</p>
<p style="margin-left:30px;">You may also need to specify the database parameter to assign a database.</p>
<p>&nbsp;</p>
<p style="margin-left:30px;"><em>If the AD account was deleted:</em></p>
<p style="margin-left:30px;">First, run: Setup /PrepareAD</p>
<p style="margin-left:30px;">Then run the above Enable-Mailbox command.</p>
<p>&nbsp;</p>
<p style="margin-left:30px;">Of course, the /PrepareAD switch does a lot more than just create system mailboxes, so proceed with caution.</p>
<p>&nbsp;</p>
<p><strong>Is there a workaround?</strong></p>
<p>Yup!&nbsp; Since we use the system mailbox for it&#39;s ExchangeGuid, you can simply just add a mailbox to your admin account, and that should get you up and running.&nbsp; I should stress again though that this is not the only thing system mailboxes are used for, so it is important to plan to fix whatever is wrong with them.</p>
<p>&nbsp;</p>
<p><span style="color:#808080;">Thanks to Chris Thevaos for assistance with investigating the root cause of this issue.</span></p>]]></content:encoded>
    </item>
    <item>
      <title>Modifying the Queue Length for Exchange App Pools in IIS</title>
      <link>https://docs.microsoft.com/archive/blogs/brenle/modifying-the-queue-length-for-exchange-app-pools-in-iis</link>
      <pubDate>Fri, 06 Mar 2015 04:42:00 GMT</pubDate>
      <dc:creator><![CDATA[brenle]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/brenle/2015/03/06/modifying-the-queue-length-for-exchange-app-pools-in-iis/</guid>
      <description><![CDATA[In support, we handle a large number of cases - many of which are performance related.&nbsp; A trend...]]></description>
      <content:encoded><![CDATA[<p>In support, we handle a large number of cases - many of which are performance related.&nbsp; A trend I&#39;ve seen involves administrators preparing their Exchange environment by making changes to settings that, unknowingly to them, may cause problems down the road.&nbsp; I decided to write this article regarding one of the more popular changes in IIS - increasing the Queue Length on individual app pools:</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/queuelength-activesync.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/queuelength_2D00_activesync.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/queuelength-activesync.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/queuelength_2D00_activesync.png" border="0" alt=" " /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>What is the Queue Length setting in IIS?</strong></p>
<p>&nbsp;</p>
<p>Benjamin Perkins has a <a href="https://blogs.msdn.com/b/benjaminperkins/archive/2011/11/15/modify-the-request-queue-limit-requestqueuelimit-in-iis-7.aspx">short blog post</a> briefly going over the queue length and how to change it (in IIS 7), however this post was written primarily for developers of web applications.&nbsp; Exchange utilizes IIS extensively for many services, so it is important to remember that while some IIS changes may be great for custom web applications, they can also severely impact how Exchange functions.</p>
<p>&nbsp;</p>
<p>So what exactly is the queue length setting in IIS and how does it work?&nbsp; Imagine each IIS application pool as a bucket.&nbsp; And requests from clients are placed into each corresponding bucket. As the request is added to the bucket, the CPU takes the request out of the bucket to process it.&nbsp; Now, imagine a large number of requests - more than the CPU can handle at once hitting the bucket.&nbsp; Or, maybe something else is holding up the CPU, so that it can&#39;t empty the bucket as quickly as it is filling up.&nbsp; This is a very high level view of how the queue length works.&nbsp; As the CPU is unable to keep up with incoming requests, the new requests are added to the queue.&nbsp; The request queue limit is basically, the limit on the number of requests the bucket can hold before IIS starts denying new requests.&nbsp;</p>
<p>&nbsp;</p>
<p><em>To put it simply, the queue length is NOT the number of concurrent requests a particular app pool can handle.&nbsp; It is only a precautionary measure to prevent the server from falling too far behind in processing requests.</em></p>
<p>&nbsp;</p>
<p><strong>So should I change it?</strong></p>
<p>&nbsp;</p>
<p>As Benjamin mentioned in his article, &quot;in most cases the default configuration will work best, therefore only make modifications when you are certain of the need and impact.&quot;&nbsp; This holds true with Exchange.&nbsp; The default queue length is 1000 for each app pool in all versions of IIS so far.&nbsp; And in most cases, 1000 is plenty.&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color:#ff6600;">The maximum value we typically ever recommend setting the queue length to is 10,000.</span></p>
<p>&nbsp;</p>
<p>In Exchange, we typically refer to raising the queue length on an app pool as a &#39;band aid fix.&#39;&nbsp; This is because we know, in most cases, raising this value is unnecessary - so why should it be necessary in this particular case?</p>
<p>&nbsp;</p>
<p>Let&#39;s consider a real world scenario:&nbsp; You start receive complaints that your company&#39;s ActiveSync devices are having intermittent issues synchronizing.&nbsp; After some fancy investigative research, you&#39;ve determined that a single CAS server is returning 503 errors very frequently to requests.&nbsp; More investigation finds that you are exceeding the queue length (more information on how to detect this below).&nbsp; The system appears to be healthy - CPU is averaging 30-60%, which is on par with your previous baseline performance data and no other application pools appear to be affected - so why not simply bump that queue length up to 5000 and let those devices get their sync on?</p>
<p>&nbsp;</p>
<p>Well - the more important question that I ask when I&#39;m investigating an issue for a customer is, why.&nbsp; Why did we all of a sudden exceed the queue length? And why are we queueing this many requests? CPU appears to not be adversely affected, so the server doesn&#39;t appear busy in that aspect.&nbsp; And most importantly, <strong>what changed?</strong></p>
<p>&nbsp;</p>
<p>Sure, band-aiding the issue by increasing the length may resolve the impact, but when you think later down the road - will increasing the number of queued requests that we allow for this one app pool potentially cause performance issues later, further complicating the end resolution?&nbsp; It&#39;s definitely a possibility.&nbsp;</p>
<p>&nbsp;</p>
<p>So, yes, you can increase the queue length - but unless you have specific guidance from Microsoft, it should generally be used to mitigate impact while you continue investigating the actual root cause of the issue.&nbsp;&nbsp; Additionally, it should be noted that <a href="https://technet.microsoft.com/en-us/library/cc770764(v=WS.10).aspx">recycling the app pool</a> will also clear the queue with little impact, but then allow the server to build that queue back up so that we can monitor and investigate the actual cause - this is probably a better method of troubleshooting the issue than simply increasing the queue length in most cases.</p>
<p>&nbsp;</p>
<p style="margin-left:30px;">As a side note - recycling the app pool is different from stopping and starting the app pool:</p>
<p>&nbsp;</p>
<p style="margin-left:60px;">From the TechNet article: <a href="https://technet.microsoft.com/en-us/library/cc770764(v=WS.10).aspx">https://technet.microsoft.com/en-us/library/cc770764(v=WS.10).aspx</a></p>
<p>&nbsp;</p>
<p style="margin-left:60px;"><em>&quot;Occasionally, you may have to immediately recycle an unhealthy worker process instead of waiting for the next configured recycle. Rather than abruptly stopping the worker process, which can cause service interruptions, you can use on-demand recycling. Overlapping recycling, the default, lets an unhealthy worker process become marked for recycling, but continues handling requests that this unhealthy process has already received. It does not accept new requests from HTTP.sys. When all existing requests are handled, the unhealthy worker process shuts down.&quot;</em></p>
<p>&nbsp;</p>
<p>The same goes with lowering the setting.&nbsp; I recently had a customer, whom, as a precaution, decided to set the limit to 120.&nbsp; Yes, that is 880<strong> less than default</strong>.&nbsp; As you could imagine, when they ended up having performance issues, this intensified the effect - and, of course, added another layer of symptoms that had nothing to do with the root cause.</p>
<p>&nbsp;</p>
<p><strong>How do I know if I&#39;m hitting the limit set by the Queue Length?</strong></p>
<p>&nbsp;</p>
<p>There are a few different methods that you can use to determine if you are hitting the limit.&nbsp;</p>
<p>&nbsp;</p>
<p>First, when the limit is reached, the server starts denying connections to that particular app pool by returning a 503, <a href="https://support.microsoft.com/kb/943891">which translates to &quot;Service Unavailable.&quot;</a>&nbsp; So the first question would be, are you getting 503 responses?&nbsp; If you are getting 401 responses, then you probably aren&#39;t hitting the limit - as <a href="https://support.microsoft.com/kb/943891">401 translates to &quot;Unauthorized,&quot;</a> which indicates IIS received your request, has attempted to authorize you, and was unable to.</p>
<p>&nbsp;</p>
<p>When the limit is reached however, the server is rejecting requests before they even reach IIS.&nbsp; Which means you won&#39;t see these 503 errors in the IIS logs.&nbsp; These 503&#39;s occur before the IIS logs, in the <a href="https://support2.microsoft.com/default.aspx?scid=kb;en-us;820729">HTTPERR logs</a>.</p>
<p>&nbsp;</p>
<p>The default location for the HTTPERR logs is C:\Windows\System32\LogFiles\HTTPERR</p>
<p>&nbsp;</p>
<p>HTTPERR logs are the log files for the HTTP.sys driver.&nbsp; As mentioned in <a href="https://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/a2a45c42-38bc-464c-a097-d7a202092a54.mspx?mfr=true">this TechNet article</a>:</p>
<p>&nbsp;</p>
<p style="margin-left:30px;"><em>&quot;When you create a Web site, IIS registers the site with HTTP.sys, which then receives any HTTP requests for the site. HTTP.sys functions like a forwarder, sending the Web requests it receives to the request queue for the user-mode process that runs the Web site or Web application. HTTP.sys also sends responses back to the client.&quot;</em></p>
<p>&nbsp;</p>
<p>So, when hitting the request queue limit, the request is being denied at the HTTP.sys driver level, thus logging the failure in the HTTPERR logs.&nbsp; When hitting the limit, you&#39;ll normally see a long list of 503&#39;s in these logs, such as:</p>
<p>&nbsp;</p>
<p style="margin-left:30px;"><em>014-03-05 20:41:52 10.0.0.24 56086 10.0.0.25 443 HTTP/1.1 POST /Microsoft-Server-ActiveSync/Proxy?User=jdoe&amp;DeviceId=ApplXXXXXXXXXXX&amp;DeviceType=iPhone&amp;Cmd=Sync <span style="color:#ff6600;"><strong>503 2</strong></span> <span style="color:#3366ff;"><strong>QueueFull</strong></span> <span style="color:#339966;"><strong>MSExchangeSyncAppPool</strong></span></em></p>
<p>&nbsp;</p>
<p>Notice the &quot;<span style="color:#ff6600;"><strong>503 2</strong></span>&quot;?&nbsp; That&#39;s a 503.2 (503 with a sub status of 2), which <a href="https://support.microsoft.com/kb/943891">translates to &quot;Service Unavailable: Concurrent request limit exceeded&quot;</a></p>
<p>&nbsp;</p>
<p>Note, you may also see 503.3, which <a href="https://support.microsoft.com/kb/943891">translates to &quot;Service Unavailable: ASP.NET queue full&quot;</a>.&nbsp; This is slightly different - see <a href="https://technet.microsoft.com/en-us/library/dd425294(v=office.13).aspx">this TechNet article</a>.</p>
<p>&nbsp;</p>
<p>IIS literally gives you the answer with the reason <span style="color:#3366ff;"><strong>QueueFull</strong></span>, but be aware that sometimes this can show N/A as well.</p>
<p>&nbsp;</p>
<p>And, of course, the logs also indicate <span style="color:#339966;"><strong>which app poo</strong>l</span> the rejected request was attempting to access, in this case being the MSExchangeSyncAppPool - or ActiveSync - matching up with our earlier scenario.&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Well - what if I want to monitor for this proactively?&nbsp;</strong></p>
<p>&nbsp;</p>
<p>We&#39;ve got you covered!&nbsp; As you may know, PerfMon offers thousands of counters that help identify baselines - and point out potential issues.&nbsp; Keep an eye on the following counter:</p>
<p>&nbsp;</p>
<p style="margin-left:30px;">Http Service Request Queues \ CurrentQueueSize</p>
<p>&nbsp;</p>
<p>There is a counter for each application pool (Exchange Web Services, ActiveSync, Default App Pool, etc).&nbsp; Any value that sustains greater than 0 should be investigated as this is a potential queue length limit hit for that particular app pool.</p>
<p>&nbsp;</p>
<p style="margin-left:30px;"><strong>NOTE</strong>: Regarding any performance data, spikes can be normal.&nbsp; You should monitor this counter over time and look for sustained values above 0; if the value is consistently above 0, then there may be something to investigate, for example - has your environment exceeded the initial server scale? Or is a user/device mis-behaving?&nbsp; Etc&hellip;</p>
<p>&nbsp;</p>
<p>In Exchange 2013, baseline performance is captured by default every 1 minute, and includes this counter.</p>
<p>The default location is C:\Program Files\Microsoft\Exchange Server\V15\Logging\Diagnostics\DailyPerformanceLogs.</p>
<p>&nbsp;</p>
<p>For previous versions of Exchange (Exchange 2007 or 2010), or if you want to customize the interval or location of files in Exchange 2013, you can use <a href="https://experfwiz.codeplex.com/">ExPerfWiz</a> to create a data collector set for you.</p>
<p>&nbsp;</p>
<p><em>Thanks to Sainath Vijayaraghavan for reviewing and suggesting content.</em></p>]]></content:encoded>
    </item>
    <item>
      <title>Calendar invites are not delivering to inbox, but show up as tentative in calendar after migration from Exchange 2010 to Exchange 2013.</title>
      <link>https://docs.microsoft.com/archive/blogs/brenle/calendar-invites-are-not-delivering-to-inbox-but-show-up-as-tentative-in-calendar-after-migration-from-exchange-2010-to-exchange-2013</link>
      <pubDate>Wed, 04 Mar 2015 08:13:00 GMT</pubDate>
      <dc:creator><![CDATA[brenle]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/brenle/2015/03/04/calendar-invites-are-not-delivering-to-inbox-but-show-up-as-tentative-in-calendar-after-migration-from-exchange-2010-to-exchange-2013/</guid>
      <description><![CDATA[I work in on-premises support for Microsoft Exchange, and had a peculiar issue come up...]]></description>
      <content:encoded><![CDATA[<p>I work in on-premises support for Microsoft Exchange, and had a peculiar issue come up recently.&nbsp; To be honest, I&#39;ve been wrestling with the idea of blogging about this or not, mostly because I don&#39;t have a root cause and I am unable to reproduce it.&nbsp; However, I decided I might as well share what I learned from this issue, and how to fix it, so that it may help others in the future.</p>
<p>&nbsp;</p>
<p><strong>Environment:</strong></p>
<ul>
<li><span>Exchange 2010 SP3 RU6 migrating users to Exchange 2013 CU6 (Note it may affect other versions)</span></li>
<li><span>A large number of Outlook for Mac users </span></li>
</ul>
<p>&nbsp;</p>
<p><strong>Problem:</strong></p>
<ol type="1">
<li><span>User, who is only a Mac Outlook 2011 user, is migrated to Exchange 2013.</span></li>
<li><span>After which, when a calendar meeting invite is received, the meeting is added to the calendar as tentative, but no message is received in the Inbox for the user to Accept/Decline/Tentatively accept it.</span></li>
<li><span>The same behavior occurs whether or not OWA or Outlook for PC is used when receiving the calendar meeting invite.</span></li>
<li><span>The same behavior occurs with meeting invites sent from any source.</span></li>
<li><span>There were no commonalities between the affected mailboxes, other than they all used Mac Outlook 2011 prior to being migrated (Different target/destination DBs/Servers)</span></li>
</ol>
<p>&nbsp;</p>
<p><strong>Workaround:</strong></p>
<p style="margin-left:30px;">We discovered that recreating the user&#39;s mailbox resolved the issue.&nbsp; This, of course, is rather destructive, time consuming, and causes major interruptions for the end user.</p>
<p>&nbsp;</p>
<p>So first, I thought - OK maybe this person previously used Outlook for Windows, and setup a Delegate, configuring calendar meeting requests to be sent to delegates only:</p>
<p></p>
<p></p>
<p style="margin-left:30px;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/Delegates.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/Delegates.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/Delegates.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/Delegates.png" border="0" alt=" " /></a></p>
<p></p>
<p></p>
<p>But, the customer was able to configure a Windows profile and confirmed, this was not set.</p>
<p></p>
<p>The second thing I suspected was CalendarProcessing (Get-CalendarProcessing &lt;User&gt; | fl):</p>
<p><a href="https://technet.microsoft.com/en-us/library/dd298137(v=exchg.150).aspx">https://technet.microsoft.com/en-us/library/dd298137(v=exchg.150).aspx</a></p>
<p>&nbsp;</p>
<p>However, after inspecting the results, it was found that the user had the same settings as everyone else in the company, including unaffected users.</p>
<p>&nbsp;</p>
<p>I then had the customer grab the EventHistory table for the affected mailbox.&nbsp; For more information on utilizing and accessing the EventHistory table for mailboxes and databases, a great read is here:</p>
<p><a href="/b/exchange/archive/2013/06/24/adventures-in-querying-the-eventhistory-table.aspx">https://blogs.technet.com/b/exchange/archive/2013/06/24/adventures-in-querying-the-eventhistory-table.aspx</a></p>
<p>&nbsp;</p>
<p>The EventHistory table essentially lets you see exactly what is changing (what events occur) within a mailbox or database.&nbsp; In this case, we wanted to trace what was happening to a calendar meeting invite when received by the mailbox, and whether something was deleting it, moving it, etc.</p>
<p>&nbsp;</p>
<p>After capturing the EventHistory table, we were able to locate the invite, and it&#39;s ParentEntryId.&nbsp; According to the blog above, the ParentEntryId is the folder which the item is current in.&nbsp; <strong>Great!</strong></p>
<p>&nbsp;</p>
<p>We went into MFCMapi (<a href="https://mfcmapi.codeplex.com/">https://mfcmapi.codeplex.com/</a>), and were able to use the ParentEntryid to figure out where the messages were going!</p>
<p></p>
<p style="margin-left:30px;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/OpenEntryId.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/OpenEntryId.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/OpenEntryId.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/OpenEntryId.png" border="0" alt=" " /></a></p>
<p></p>
<p></p>
<p>So, it turned out, the messages were going to&hellip;the Schedule folder.&nbsp; <em>Huh?</em></p>
<p>&nbsp;</p>
<p>The Schedule folder is a folder within the mailbox, located on the root (so hidden from Outlook and other clients).&nbsp; It is typically a folder used for Free/Busy information - but is not intended to have mail delivered to it.&nbsp; Why were we delivering to this folder?</p>
<p></p>
<p style="margin-left:30px;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/ScheduleFolder.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/ScheduleFolder.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/ScheduleFolder.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/ScheduleFolder.png" border="0" alt=" " /></a></p>
<p></p>
<p></p>
<p>I then had the customer collect an Extra trace.&nbsp; For those of you who are unaware, an Extra trace is a tool support uses to see what the code is doing at a very high level.&nbsp; Think of it as - reading the comments in code - they give you an idea of what is happening, but not necessarily why.&nbsp;</p>
<p>&nbsp;</p>
<p>But in this case, the Extra gave me gold. When the message was dropped off to the mailbox by Store Driver I could see the following:</p>
<p><em>&quot;overridden by receive-folder table: <strong>True</strong>&quot;</em></p>
<p>&nbsp;</p>
<p>In my lab, and with other calendar meeting invites sent to unaffected users in the Customer&#39;s environment, I always saw:</p>
<p><em>&quot;overridden by receive-folder table: <strong>False</strong>&quot;</em></p>
<p>&nbsp;</p>
<p>In the mailbox, there is a table, called the Receive Folder Table, which is exactly that - a table of message classes, and the folders that they should be delivered to.&nbsp; 3rd party software developers can tap into this, so that custom&nbsp; message types that a user doesn&#39;t need to see, can be delivered and picked up by their software (<a href="https://msdn.microsoft.com/en-us/library/office/cc815405.aspx">https://msdn.microsoft.com/en-us/library/office/cc815405.aspx</a>).&nbsp; You can see this table in MFCMapi:</p>
<p></p>
<p style="margin-left:30px;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/DisplayReceiveFolderTable.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/DisplayReceiveFolderTable.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/DisplayReceiveFolderTable.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/DisplayReceiveFolderTable.png" border="0" alt=" " /></a></p>
<p></p>
<p></p>
<p><em>And <strong>Bingo</strong></em> - there was the IPM.SCHEDULE.MEETING class association:</p>
<p></p>
<p style="margin-left:30px;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/ReceiveFolderTable.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/ReceiveFolderTable.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/ReceiveFolderTable.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/ReceiveFolderTable.png" border="0" alt=" " /></a></p>
<p></p>
<p></p>
<p>So, to remove the association in MFCMapi:</p>
<p></p>
<p style="margin-left:30px;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/SetReceiveFolder1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/SetReceiveFolder1.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/SetReceiveFolder1.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/SetReceiveFolder1.png" border="0" alt=" " /></a></p>
<p></p>
<p></p>
<p>Then:</p>
<p></p>
<p style="margin-left:30px;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/SetReceiveFolder2.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/SetReceiveFolder2.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/04/27/SetReceiveFolder2.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-04-27/SetReceiveFolder2.png" border="0" alt=" " /></a></p>
<p></p>
<p></p>
<p>After doing this, the user was finally getting calendar meeting invites delivered to their Inbox.</p>
<p>&nbsp;</p>
<p>Unfortunately, the customer had no more mailboxes in Exchange 2010 to try and reproduce the issue - and I was unable to reproduce the issue in a lab environment no matter how many times I tried.&nbsp; A quick search found only one other reported incident, and they simply used a script to remove the association - No root cause was found in that case either.</p>
<p>&nbsp;</p>
<p>So in the end - we have a solution, other than recreating the mailbox, however no actual root cause.&nbsp; All I know is that it appears to only occur to Mac Outlook 2011 users when migrating from Exchange 2010 to Exchange 2013.&nbsp; Hopefully this blog post will be useful to someone facing this issue in the future!</p>
<p>&nbsp;</p>
<p><em>Thanks to Sainath Vijayaraghavan for reviewing this for me!</em></p>]]></content:encoded>
    </item>
  </channel>
</rss>