См. Раздел Различия версий официальной документации Microsoft по WebClientReadFormQueryString
Версии Exchange, начиная с основной версии 15 и заканчивая Exchange Server 2013build 15.0.775.38 (CU3) и версия Exchange Online 15.00.0775.009 не возвращают правильный фрагмент строки запроса в элементе WebClientReadFormQueryString.
В версиях Exchange, предшествующих основной версии 15, идентификатор элемента для Outlook WebURL-адреса приложений - это идентификатор Outlook Web App.Если вы ориентируетесь на версию Exchange, более раннюю, чем основная версия 15, вам нужно использовать операцию ConvertId для преобразования идентификатора.
Возможно, вам потребуется сделать что-то подобное в своем коде:
// Versions of Exchange starting with major version 15 and ending with Exchange Server 2013 build 15.0.775.09
// returned a different query string fragment. This optional check is not required for applications that
// target Exchange Online.
if ((serverInfo.MajorVersion == 15) && (serverInfo.MajorBuildNumber < 775) &&(serverInfo.MinorBuildNumber < 09))
{
// If your client is connected to an Exchange 2013 server that has not been updated to CU3,
// this query string will be returned.
owaReadFormQueryString = string.Format("#viewmodel=_y.$Ep&ItemID={0}",
System.Web.HttpUtility.UrlEncode(ewsIdentifer, Encoding.UTF8));
}
else
{
// If your client is connected to an Exchanger 2010, Exchange 2013 CU3, or Exchange Online server,
// the WebClientReadFormQueryString is used.
owaReadFormQueryString = msg.WebClientReadFormQueryString;
}
// Create the URL that Outlook Web App uses to open the email message.
Uri url = service.Url;
string owaReadAccessUrl = string.Format("{0}://{1}/owa/{2}",
url.Scheme, url.Host, owaReadFormQueryString);
if (!string.IsNullOrEmpty(owaReadAccessUrl))
{
System.Diagnostics.Process.Start("IEXPLORE.EXE", owaReadAccessUrl);
}