<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="www.w3.org/2005/Atom" xmlns:sy="purl.org/rss/1.0/modules/syndication/" xmlns:dc="purl.org/dc/elements/1.1/" xmlns:content="purl.org/rss/1.0/modules/content/" xmlns:wfw="wellformedweb.org/CommentAPI/" xmlns:slash="purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>For lack of a better word</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/dvespa/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/dvespa/feed.xml</link>
    <description />
    <lastBuildDate>Mon, 29 Oct 2018 16:52:13 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Outlook sends 3DES when I've chosen AES 256</title>
      <link>https://docs.microsoft.com/archive/blogs/dvespa/outlook-smime-encryption-3des-aes256</link>
      <pubDate>Mon, 29 Oct 2018 09:18:24 GMT</pubDate>
      <dc:creator><![CDATA[Dave V - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dvespa/?p=975</guid>
      <description><![CDATA[We see this as common question in Microsoft Support so I wanted to lay out the approach Outlook for...]]></description>
      <content:encoded><![CDATA[We see this as common question in Microsoft Support so I wanted to lay out the approach Outlook for Windows takes to determine what encryption algorithm is chosen when sending encrypted email to a recipient. First, know that when choosing algorithms Outlook determines what both the sender and recipient supports.  Although it will refer to the sender preference, it will not always send using that preference.  It does this to ensure that the recipient can actually read the encrypted message.  Here is the process Outlook takes to choose an algorithm:
<ol>
 	<li>It looks at the recipient's certificate and checks to see if it comes from a particular provider.  If it knows which provider generated the certificate, or can query the provider itself, then it can determine what algorithms the provider supports.</li>
 	<li>It looks at the recipient's certificate and checks for the presence of the <a href="https://tools.ietf.org/html/rfc5751#section-2.5.2">SMIME Capabilities attribute</a>.  If present, it will examine this attribute and look at the algorithms that the certificate supports.</li>
 	<li>If neither of these options are viable, it will default to a base default algorithm.  This will be 3DES if you're using Outlook 2007, 2010, 2013, 2016 MSI or a version of Office 2016 (C2R) less than <span>16.8518.1000</span>.  It'll be AES 256 if you're using a version greater than <span>16.8518.1000</span> (C2R).</li>
</ol>
Once it determines what algorithms the recipient can support, it finds the intersection of the recipient and the sender and chooses the best algorithm from there. This is where the sender's preference may be overridden.

Therefore, if you're seeing a chosen algorithm different than what you expect, you can use the steps above to determine how the algorithm was chosen.

The recommended approach for fixing this is for the recipient to change the certificate to include the <a href="https://tools.ietf.org/html/rfc5751#section-2.5.2">SMIME Capabilities attribute</a>.  This way the recipient can advertise to Outlook what algorithms the sender should use to send encrypted message to the recipient.

<strong>Note:</strong> Group Policy can also impact this decision, but that's not discussed in this article.]]></content:encoded>
    </item>
    <item>
      <title>Time Travel Debugging now in preview</title>
      <link>https://docs.microsoft.com/archive/blogs/dvespa/time-travel-debugging-in-preview</link>
      <pubDate>Tue, 24 Oct 2017 08:28:33 GMT</pubDate>
      <dc:creator><![CDATA[Dave V - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dvespa/?p=965</guid>
      <description><![CDATA[I know I'm a little late to the party, but I just came across this and I'm very excited about its...]]></description>
      <content:encoded><![CDATA[I know I'm a little late to the party, but I just came across this and I'm very excited about its release.  I've been using TTD for over 10 years internally and it is an awesome tool to capture issues that just won't reproduce themselves easily.  From a support perspective it's been amazing.

https://blogs.msdn.microsoft.com/windbg/2017/09/25/time-travel-debugging-in-windbg-preview/]]></content:encoded>
    </item>
    <item>
      <title>How to create an profile that uses MAPI/HTTP in Outlook 2013</title>
      <link>https://docs.microsoft.com/archive/blogs/dvespa/create-outlook-2013-profile-mapi-http</link>
      <pubDate>Mon, 19 Jun 2017 15:36:32 GMT</pubDate>
      <dc:creator><![CDATA[Dave V - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dvespa/?p=945</guid>
      <description><![CDATA[I had a case recently where the customer wanted to know how to programmatically create a MAPI over...]]></description>
      <content:encoded><![CDATA[I had a case recently where the customer wanted to know how to programmatically create a MAPI over HTTP profile using Outlook 2013. A few years ago I had developed a little sample to do just that, but I never posted it.  Therefore, today I'm fixing my omission.  You can view the sample code <a href="https://blogs.msdn.microsoft.com/dvespa/dd3bb684569d/">here</a>.]]></content:encoded>
    </item>
    <item>
      <title>Access to the Recovery Database in Exchange Server 2016 from an application</title>
      <link>https://docs.microsoft.com/archive/blogs/dvespa/how-to-access-recovery-database-ews</link>
      <pubDate>Mon, 20 Mar 2017 09:22:44 GMT</pubDate>
      <dc:creator><![CDATA[Dave V - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dvespa/?p=926</guid>
      <description><![CDATA[I have had several customers interested in how to access the Recovery Database (RDB)...]]></description>
      <content:encoded><![CDATA[I have had several customers interested in how to access the Recovery Database (RDB) programmatically in Exchange 2016.  Extended MAPI is the only way to access the Recovery Database programatically.  The Exchange MAPI subsystem (aka MAPI\CDO) is the only subsystem capable of accessing the Recovery Database.  This is because access to the Recovery database requires the use of the flag OPENSTORE_RECOVERY_DATABASE (0x100000).  This flag is not available in the Outlook MAPI subsystem.  If you try to use it from Outlook's MAPI, the call to IMAPISession::OpenMsgStore() will fail with MAPI_E_UNKNOWN_FLAGS (0x80040106). Therefore, you are forced to use the Exchange MAPI subsystem.  As you know, <a href="https://blogs.msdn.microsoft.com/dvespa/2015/06/18/mapi-cdo-will-not-be-supported-for-exchange-2016/">Exchange Server 2016 has an explicit block in place that prevents from clients using the Exchange MAPI subsystem.</a>

A programmatic alternative to MAPI  to access the RDB is through the use of Exchange Powershell's <a href="https://technet.microsoft.com/en-us/library/ff829875(v=exchg.160).aspx">New-MailboxRestoreRequest</a> cmdlet.  You could then restore the data to a temporary mailbox in a normal mailbox database.  Once there, you could use Exchange Web Services or the Outlook Mail REST APIs to access that data. The user of your application never has to know about this temporary mailbox.  It could only be accessible by your application.  Your application could then find whatever it is that it's looking for and then only restore that particular data to the end user's mailbox.  Previous versions of Exchange Server support both EWS and this cmdlet so this architecture could work going back to Exchange 2010. That's probably the furthest you'll want to go back anyhow.]]></content:encoded>
    </item>
    <item>
      <title>How to indicate that a profile targets a consumer account</title>
      <link>https://docs.microsoft.com/archive/blogs/dvespa/how-to-indicate-that-a-profile-targets-a-consumer-account</link>
      <pubDate>Thu, 16 Mar 2017 08:47:42 GMT</pubDate>
      <dc:creator><![CDATA[Dave V - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dvespa/?p=925</guid>
      <description><![CDATA[I had a case recently where the customer was using my post for creating a Outlook 2016 profile...]]></description>
      <content:encoded><![CDATA[I had a case recently where the customer was using my <a href="https://blogs.msdn.microsoft.com/dvespa/2015/10/28/how-to-configure-an-outlook-2016-profile-using-mfcmapi/">post for creating a Outlook 2016 profile programmatically</a> and found that the program would hang when performing certain MAPI operations.  This only happened when the profile was created programmatically (i.e. not through the Outlook UI or the Mail applet) and the target account was an Outlook.com account.  As you may be aware, Outlook.com addresses are being migrated to Exchange as the backend and Extended MAPI can be used to consume them.  The root cause of the issue was that Outlook uses the PR_PROFILE_EXCHANGE_CONSUMER_ACCOUNT property to determine if the target account is a "consumer account".  If so, certain MAPI operations are avoided.  For example, creation of a Global Address Book (GAL).  Thus, if you are programmatically creating a MAPI profile that targets an Outlook.com address you need to pre-populate this property yourself.  This begs the question, "How do you know if the account is a consumer account?"  There are several ways that you can tell: First, you could look at the domain, if it's Outlook.com or Hotmail.com, then chances are high that it's a consumer account. If you want to be 100% sure, you could perform an Autodiscover on the target address and let Exchange tell you.  In the Autodiscover response you'll consult the element 'ConsumerMailbox' in the Accounts section of the response.  True means that it is, otherwise False. Once you have that data, you'll need to set the PR_PROFILE_EXCHANGE_CONSUMER_ACCOUNT property to what the Autodiscover response was.  If the target account is not a consumer account you can omit it completely.  You'll need to set this property on the profile section identified as the "EMSMDB Section".  You can query for the property PR_PROFILE_EMSMDB_SECTIONID and that'll give you the MAPIUID of this profile section.  You must do this before you follow the instructions in my post.  Lastly, the profile must be a cached mode profile.  This property goes hand in hand with cached mode profiles.  Setting this property without indicating that the profile is a cached mode profile will result in undefined behavior.

<strong>Additional Information</strong>

You'll need to define the property in your application to use it.  This property is not included in any of the MAPI headers.  I've included that below:

<code>#define PR_PROFILE_EXCHANGE_CONSUMER_ACCOUNT PROP_TAG(0x00B, 0x665e)</code>

At the time of this writing, in order to get the property from Autodiscover, the Exchange Server must think that an Outlook for Windows client is asking for it.  Therefore, you must set the User-Agent of the program making the HTTP request to the value that an Outlook for Windows client would use.  I'll edit this post when this is addressed.]]></content:encoded>
    </item>
    <item>
      <title>Programmatically connecting to another mailbox when MAPI / HTTP is used</title>
      <link>https://docs.microsoft.com/archive/blogs/dvespa/connect-another-mailbox-mapi-http-mapi_e_call_failed</link>
      <pubDate>Tue, 13 Dec 2016 10:25:18 GMT</pubDate>
      <dc:creator><![CDATA[Dave V - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dvespa/?p=915</guid>
      <description><![CDATA[I've been meaning to create this post for a while, but haven't got around to it. I had a case...]]></description>
      <content:encoded><![CDATA[I've been meaning to create this post for a while, but haven't got around to it. I had a case recently where a customer wanted to connect to a user's Archive mailbox for which the service application had permissions.  However, the transport in use was MAPI over HTTP (MAPI/HTTP).  He was getting the error MAPI_E_CALL_FAILED (0x80004005) from the call to IMAPISession::OpenMsgStore().  His code worked when the transport was RPC over HTTP (ROH).

<strong>Introduction</strong>

When a MAPI client application attempts to connect to multiple mailboxes using a “hub and spoke” type approach, wherein the MAPI application connects to an initial mailbox and then connects to additional mailboxes for some sort of processing, if the transport in use is MAPI/HTTP, IMAPISession::OpenMsgStore() returns MAPI_E_CALL_FAILED (0x80004005).  This may be because the EntryID passed to OpenMsgStore() is not valid.  The EntryID needed to connect using MAPI/HTTP is a version 3 (v3) EntryID.  IExchangeManageStore::CreateStoreEntryID() can only create version 1 (v1) EntryIDs.  After all, this method was created for the early versions of Exchange Server.  Therefore, a new interface is needed in order to create v3 EntryIDs.  Enter IExchangeManageStoreEx.  This <a href="https://blogs.msdn.microsoft.com/dvespa/2014/01/15/a-new-mapi-interface-is-available-to-let-you-force-connections-to-go-to-a-specific-exchange-server/">interface was previously documented in a former blog post</a>.  However, the method CreateStoreEntryID2() takes additional data.

First,  you will need to define the new property PR_PROFILE_USER_SMTP_ADDRESS_W in your code base.
<pre class="csharpcode"><span class="rem" style="color: #008000">// 0x6641001F</span>
<span style="color: #3366ff">#define</span> <span style="color: #333399">PR_PROFILE_USER_SMTP_ADDRESS_W PROP_TAG</span>(<span style="color: #000080">PT_UNICODE</span>, 0x6641)</pre>
Next, you add that to the list of properties passed to the method CreateStoreEntryID2(). This property is what is used by Outlook to perform an Autodiscover to get the mailbox settings for the target mailbox.
<pre class="csharpcode">LPSPropValue         lpspv = nullptr;
MAPIAllocateBuffer((<span class="kwrd">sizeof</span>(SPropValue) * 4), (LPVOID*)&amp;lpspv);
ZeroMemory(lpspv, <span class="kwrd">sizeof</span>(SPropValue) * 4);

lpspv[0].ulPropTag = PR_PROFILE_MAILBOX;
lpspv[0].Value.lpszA = TargetMailboxDN;

lpspv[1].ulPropTag = PR_PROFILE_MDB_DN;
lpspv[1].Value.lpszA = TargetStoreDN;

lpspv[2].ulPropTag = PR_FORCE_USE_ENTRYID_SERVER;
lpspv[2].Value.b = <span class="kwrd">true</span>;

lpspv[3].ulPropTag = PR_PROFILE_USER_SMTP_ADDRESS_W;
lpspv[3].Value.lpszW = L"Susan@Contoso.com";

hres = m_pMsgPrivStore-&gt;QueryInterface(IID_IExchangeManageStoreEx,
                                                                     (LPVOID*)&amp;pManageStoreEx);
<span class="kwrd">if</span> (FAILED(hRes) || pManageStoreEx == nullptr)
{
    <span class="rem">// Handle the error</span>
    <span class="kwrd">goto</span> Cleanup;
}

hRes = pManageStoreEx-&gt;CreateStoreEntryID2(4, 
                        lpspv, 
                        ulCreateStoreEIDFlags, 
                        &amp;cbEID,
                        &amp;lpEntryId);
Cleanup:
MAPIFreeBuffer(lpsv);
</pre>
From there you call IMAPISession::OpenMsgStore() as you did before passing the v3 EntryID you obtained from the call to IExchangeManageStoreEx::CreateStoreEntryID2().

<strong>More Information</strong>
<ul>
 	<li><a href="https://support.microsoft.com/en-us/kb/3115279">This was added to Outlook 2016 in a product update</a>.</li>
 	<li><a href="https://support.microsoft.com/en-us/kb/3114941">This was added to Outlook 2013 in a product update</a>. For Outlook 2013, you must also enable the registry value "AllowAutoDiscoverForNonOutlook" documented <a href="https://support.microsoft.com/en-us/help/3114974/update-adds-ability-for-non-outlook-mapi-applications-to-use-the-autod">here</a>.</li>
 	<li>I didn't test for Outlook 2010. I'll use this as an exercise for the reader. However, if it's not there it won't be added since Outlook 2010 is no longer in main stream support.</li>
 	<li>MFCMAPI now supports supplying a SMTP address to create a v3 EntryID. <a href="https://github.com/stephenegriffin/mfcmapi/pull/3">I submitted this as a PR to MFCMAPI</a>.</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>MAPILogonEx() may appear to hang in Outlook 2016</title>
      <link>https://docs.microsoft.com/archive/blogs/dvespa/mapilogonex-hang-outlook-2016</link>
      <pubDate>Mon, 19 Sep 2016 19:49:13 GMT</pubDate>
      <dc:creator><![CDATA[Dave V - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dvespa/?p=885</guid>
      <description><![CDATA[I had a case recently where the customer was had written a service application using Extended MAPI....]]></description>
      <content:encoded><![CDATA[I had a case recently where the customer was had written a service application using Extended MAPI.  The customer found that in his test environment the call to <code> MAPILogonEx()</code> was hanging and not returning.  After debugging it, we realized that the hang was caused by an unseen SSL security prompt.  The target Exchange server hosting Autodiscover was using a self-signed certificate.  Because the transport being used was RPC over HTTP (ROH) and the certificate was untrusted by the client, Outlook was prompting the "user" to accept the use of the certificate.  Since this was a service application and there was no one to accept the prompt, MAPILogonEx() would hang.  Ultimately, this is a by-design issue with ROH.  ROH doesn't allow you to "trust" certain types of security prompts, although you really wouldn't want to anyhow.  Since Outlook can't proceed without someone trusting the certificate, it needs to prompt.  To workaround this, the developer has two options:
<ol>
 	<li>Use only trusted certificates for your Exchange Server.  Even in the scenario of a self-signed certificate, you can manually trust the certificate or possibly create <a href="https://technet.microsoft.com/en-us/library/cc770315(v=ws.10).aspx">a GPO for all machines in the organization to trust it.</a></li>
 	<li>Use the registry value outlined in this article:
<span style="color: #000000;font-family: Times New Roman"> </span><span style="color: black;font-family: 'Segoe UI',sans-serif;font-size: 14pt">Outlook 2016 displays a prompt that lets you connect to an Exchange server if a certificate issue occurs</span><span style="color: #000000;font-family: Times New Roman"> </span><a href="https://support.microsoft.com/en-us/kb/3114926"><span style="color: #0563c1;font-family: Calibri">https://support.microsoft.com/en-us/kb/3114926</span></a></li>
</ol>
If you use the latter, understand that the request will fail and that should cause <code> MAPILogonEx()</code> to fail. However, the failure not may be immediately obvious.  You may not see the result of the failure until a subsequent call to MAPI (e.g. <code>IMAPISession::OpenMsgStore()</code>).]]></content:encoded>
    </item>
    <item>
      <title>MAPILogonEx causes crash if Version Info is not specified on the module</title>
      <link>https://docs.microsoft.com/archive/blogs/dvespa/mapilogonex-crash-outlook-2016</link>
      <pubDate>Mon, 25 Jul 2016 14:48:50 GMT</pubDate>
      <dc:creator><![CDATA[Dave V - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dvespa/?p=875</guid>
      <description><![CDATA[I wanted to create a simple Extended MAPI application that would call MAPIInitialize() followed by...]]></description>
      <content:encoded><![CDATA[I wanted to create a simple Extended MAPI application that would call <em>MAPIInitialize()</em> followed by <em>MAPILogonEx()</em>.  Seems simple right?  I do it all the time.  However, this time, for whatever reason, every time I called <em>MAPILogonEx()</em> my process crashed.  No matter what flags I chose, or how I called either <em>MAPIInitialize()</em> or <em>MAPILogonEx()</em>, it would crash.  I was perplexed. I've written ton of MAPI code and never got an error like this.  After debugging it I realized that Office¹ requires that the application include file version information.  If the path to the application is too long or the application doesn't have file version information, Office¹ will force a crash of the application. I believe it does this for the Help.  Here are some ways you can recognize this problem.  First, you'll see a stack similar to this in Visual Studio:
<blockquote>
<pre>kb
 Index  Function
--------------------------------------------------------------------------------
 1      Mso98win32client.dll!6d08313b()
 2      [Frames below may be incorrect and/or missing, no symbols loaded for Mso98win32client.dll]
 3      Mso98win32client.dll!6d07c374()
 4      vcruntime140.dll!7400d627()
 5      vcruntime140.dll!7400e882()
 6      vcruntime140.dll!740036e8()
 7      vcruntime140.dll!74003654()
 8      vcruntime140.dll!74003215()
 9      vcruntime140.dll!74002f88()
 10     vcruntime140.dll!7400ec26()
 11     ntdll.dll!77d3b652()
 12     ntdll.dll!77d3b624()
 13     ntdll.dll!77d1420b()
 14     ntdll.dll!77d28e7f()
 15     KernelBase.dll!766802c5()
 16     KernelBase.dll!76695468()
 17     vcruntime140.dll!740049a5()
 18     Mso98win32client.dll!6d07c4fe()
 19     Mso98win32client.dll!6d02b65a()
 20     OLMAPI32.DLL!6f53a7b0()
 21     Mso20win32client.dll!6f2eee84()
 22     Mso20win32client.dll!6f2eec62()
 23     Mso20win32client.dll!6f2ece9c()
 24     Mso20win32client.dll!6f2f40f5()
 25     OLMAPI32.DLL!6f5393db()
 26     OLMAPI32.DLL!6f5393bd()
 27     OLMAPI32.DLL!6f54e8bb()
 28     OLMAPI32.DLL!6f54dd36()
 29     OLMAPI32.DLL!6f54cb9b()
 30     OLMAPI32.DLL!6f5446a5()
 31     OLMAPI32.DLL!6f543eff()
 32     MSMAPI32.DLL!51974e3d()
*33     YourAppHere.exe!MAPILogonEx(unsigned long a=0x00000000, wchar_t * b=0x00000000, wchar_t * c=0x00000000, unsigned long d=0x0000003b, IMAPISession * * e=0x0286f870)
 34     YourAppHere.exe!WorkerThread(void * state=0x008ff74c)
 35     msvcr120d.dll!5a2c3651()
 36     msvcr120d.dll!5a2c3861()
 37     kernel32.dll!772338f4()
 38     ntdll.dll!77d15de3()
 39     ntdll.dll!77d15dae()</pre>
</blockquote>
and an error message that says <em>Unhandled exception at 0x6D08313B (Mso98win32client.dll) in YourAppHere.exe: 0x0128300C (parameters: 0x00000001, 0x00000000).</em>

Now, fixing this is easy if you know what to do.  In Visual Studio, just add the resource type "Version" and fill in the various fields for your application.  Next,<strong> Clean</strong> the solution, and <strong>Rebuild</strong>. I find that if I don't <strong>Clean</strong> and <strong>Rebuild</strong>, it doesn't fix the issue.  That's it. After that it should work.  This was a big blocker for me, but I suppose that for people building real world applications this won't be a problem since they'll have this included in their applications anyway.  Only little test applications would be affected.

¹ I use this term rather than Outlook because this isn't Outlook's doing.  This is "shared Office code" that causes this, not Outlook.]]></content:encoded>
    </item>
    <item>
      <title>IMAPISession::OpenMsgStore() returns MAPI_E_VERSION (0x80040110)</title>
      <link>https://docs.microsoft.com/archive/blogs/dvespa/imapisessionopenmsgstore-returns-mapi_e_version-0x80040110</link>
      <pubDate>Mon, 14 Dec 2015 11:17:00 GMT</pubDate>
      <dc:creator><![CDATA[Dave V - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dvespa/2015/12/14/imapisessionopenmsgstore-returns-mapi_e_version-0x80040110/</guid>
      <description><![CDATA[As documented previously, Exchange 2016 will not allow connections from Exchange's MAPI (aka MAPI \...]]></description>
      <content:encoded><![CDATA[<p>As <a href="https://blogs.msdn.com/b/dvespa/archive/2015/06/18/exchange-2016-mapi-cdo-not-supported.aspx">documented previously</a>, Exchange 2016 will not allow connections from Exchange's MAPI (aka MAPI \ CDO).&nbsp; MAPI client applications may receive the error MAPI_E_VERSION (0x80040110).&nbsp; If you are running On-Premises Exchange 2016 and have access to the RPC Client Access logs, you will see this error in the log around the time that the connection was attempted:</p>
<p>RpcDispatch: [RpcServerException] Client version 6.0.XXXX.0 is below the minimum required version 10.0.0.0. (StoreError=Version)</p>
<p>The recommended approach is to use Exchange Web Services or the REST APIs to access the Exchange mailbox.&nbsp; As a temporary workaround you could try porting the MAPI client application to Outlook's MAPI, but Outlook's MAPI can't log into Recovery Databases and have other nuances that may make this not viable.</p>]]></content:encoded>
    </item>
    <item>
      <title>How to configure an Outlook 2016 profile using MFCMAPI</title>
      <link>https://docs.microsoft.com/archive/blogs/dvespa/how-to-configure-an-outlook-2016-profile-using-mfcmapi</link>
      <pubDate>Wed, 28 Oct 2015 22:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Dave V - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dvespa/2015/10/28/how-to-configure-an-outlook-2016-profile-using-mfcmapi/</guid>
      <description><![CDATA[The process for creating a Outlook profile in Outlook 2016 has changed. This article documents the...]]></description>
      <content:encoded><![CDATA[The process for creating a Outlook profile in Outlook 2016 has changed. This article documents the simple steps to create one using MFCMAPI.  Note: For non-developers this is not the recommended way of creating profiles in Outlook 2016.  It is recommended that you use Outlook to create the profile as the logic for this is all built-in.  However, you can use these steps for troubleshooting purposes.
<ol>
 	<li>Open up MFCMAPI, go to Profile &gt; Show Profiles</li>
 	<li>Click Actions &gt; Create Profile</li>
</ol>
<img style="max-width: 550px" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/67/98/metablogapi/1220.CreateProf_000F1264.jpg" alt="" border="0" />
<ol start="3">
 	<li>Give the new profile a name and click OK.</li>
</ol>
<img style="max-width: 550px" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/67/98/metablogapi/7382.NameProf_391F9672.jpg" alt="" border="0" />
<ol start="4">
 	<li>Select the new profile</li>
</ol>
<img style="max-width: 550px" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/67/98/metablogapi/8585.AddService_5E66AD95.jpg" alt="" border="0" />
<ol start="5">
 	<li>Type MSEMS for the service name</li>
 	<li>Uncheck the box which says "Display Service UI"</li>
</ol>
<img style="max-width: 550px" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/67/98/metablogapi/0435.AddMSEMS_3DE1FE94.jpg" alt="" border="0" />
<ol start="7">
 	<li>Click OK</li>
 	<li><strong>Double-Click</strong> the newly created profile.</li>
 	<li><strong>Single-Click</strong> the MSEMS service.</li>
 	<li>Find the Exchange Profile section. This is a little difficult in Outlook’s MAPI <a href="https://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/since in 2010 and above we no longer have the global profile section" title="msdn.microsoft.com/en-us/library/office/ff522797(v=office.14).aspx">since in 2010 and above we no longer have the global profile section</a>. To find the Exchange Profile Section find the property <a href="https://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/PR_EMSMDB_SECTION_UID (0x3D150102)" title="msdn.microsoft.com/en-us/library/office/ff625289.aspx">PR_EMSMDB_SECTION_UID (0x3D150102)</a> in the properties for the service. The value will be the GUID of the profile section persisted in binary form which will be used in the subsequent steps. You will need to remember this value.</li>
 	<li><strong>Double-Click</strong> the MSEMS service.</li>
 	<li>Find the Exchange profile section by using the UID gathered from Step 10 and single-click it to select the row.</li>
 	<li>Go to Property &gt; Additional Properties</li>
</ol>
<img style="max-width: 550px" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/67/98/metablogapi/2860.Properties_AddProps_24105916.jpg" alt="" border="0" />
<ol start="14">
 	<li>Click Add and add the following properties PR_PROFILE_USER_SMTP_EMAIL_ADDRESS_W (0x6641001F) and PR_DISPLAY_NAME_W.</li>
</ol>
<img style="max-width: 550px" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/67/98/metablogapi/2313.Properties_AddAllProps_05C5A220.jpg" alt="" border="0" />

<img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/67/98/8322.AddProperty.PNG" alt="" border="0" />

<img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/67/98/5226.AdditonalProperties_Final.PNG" alt="" border="0" />
<ol start="15">
 	<li>Click OK</li>
 	<li>Configure each property using the guidance below.</li>
</ol>
<table style="background-color: #dddddd" border="0">
<tbody>
<tr>
<td><strong>Property:</strong> PR_PROFILE_USER_SMTP_EMAIL_ADDRESS_W</td>
</tr>
<tr>
<td><strong>Value:</strong> SMTP Address of the user</td>
</tr>
<tr>
<td><strong>Property:</strong> PR_DISPLAY_NAME_W</td>
</tr>
<tr>
<td><span><strong>Value:</strong> The display name of the user</span></td>
</tr>
</tbody>
</table>
<ol start="17">
 	<li>Find the property PR_STORE_PROVIDERS in the Exchange profile section.  This is the EMSMDB profile section.  Note the value of it.</li>
</ol>
<img style="max-width: 550px" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/67/98/4061.MapStoreProvidersToProfSect.png" alt="" border="0" />
<ol start="18">
 	<li>Find the corresponding profile section whose UID matches the value of PR_STORE_PROVIDERS.</li>
 	<li>Repeat Steps 13 - 17 for that profile section too.</li>
</ol>
<img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/67/98/4604.EMSMDBProfSect.PNG" alt="" border="0" />
<ol start="20">
 	<li>Select Session &gt; Logon and display store, and select the profile if it is not already selected.</li>
 	<li>You may be prompted for credentials, but it should work successfully.</li>
</ol>
<strong>More Information</strong>

The display name on the Exchange profile section is not required, but I included it here for simplicity.

In Step 14, it is okay if the property name is not resolved to PR_PROFILE_USER_SMTP_EMAIL_ADDRESS_W.

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/67/98/SampleCode/0336.CreateProfile.cpp" title="Sample code">Sample code can be found here</a> that shows you how to do this programmatically.

If you're creating a profile for an Outlook.com or Hotmail.com address please consult <a href="https://blogs.msdn.microsoft.com/dvespa/2017/03/16/how-to-indicate-that-a-profile-targets-a-consumer-account/">this blog post</a> as well.

<strong> </strong>]]></content:encoded>
    </item>
  </channel>
</rss>