从Exchange 2013到Exchange 2016

时间:2019-03-20 17:10:42

标签: c# exchangewebservices outlook-web-app

在Exchange 2013中,我已经使用EmailMessage对象生成了一封电子邮件。我将此消息保存在Drafts文件夹中,并从save方法获取ID。然后,我通过绑定从草稿文件夹加载该电子邮件,并从该邮件中构成使用“ WebClientReadFormQueryString”属性创建的电子邮件的URL。然后,我可以将用户引导到加载了该电子邮件的OWA弹出窗口。

现在我们迁移到Exchange 2016,不会加载弹出窗口。可以在草稿文件夹中看到生成的电子邮件。我希望它自动显示已加载电子邮件草稿的OWA弹出窗口。 (行为与Exchange 2013相同)。

谢谢。

1 个答案:

答案 0 :(得分:0)

请参见WebClientReadFormQueryString

上Microsoft官方文档的版本差异部分。
  

从主要版本15开始并以Exchange Server 2013内部版本15.0.775.38(CU3)和Exchange Online版本15.00.0775.009结尾的Exchange版本在WebClientReadFormQueryString元素中未返回正确的查询字符串片段。

     

在低于主要版本15的Exchange版本中,   Outlook Web App URL的标识符是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);
    }