【问题标题】:Exchange 2013 to Exchange 2016Exchange 2013 到 Exchange 2016
【发布时间】:2019-03-28 19:41:44
【问题描述】:
在 Exchange 2013 中,我使用 EmailMessage 对象生成了一封电子邮件。我将此消息保存在草稿文件夹中,并从保存方法中取回一个 ID。然后,我通过绑定从草稿文件夹中加载电子邮件消息,并从我编写 URL 到使用“WebClientReadFormQueryString”属性创建的电子邮件的消息中加载。然后,我可以将用户定向到加载此电子邮件的 OWA 弹出窗口。
现在我们已迁移到 Exchange 2016,不会加载弹出窗口。生成的电子邮件可以在草稿文件夹中看到。我希望它自动显示加载了草稿电子邮件的 OWA 弹出窗口。 (与 Exchange 2013 的行为相同)。
提前致谢。
【问题讨论】:
标签:
c#
exchangewebservices
outlook-web-app
【解决方案1】:
请参阅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);
}