【问题标题】:EWS Managed API TimeZoneDefinition header not sent when forwarding转发时未发送 EWS 托管 API TimeZoneDefinition 标头
【发布时间】:2015-02-20 02:56:10
【问题描述】:

我们最近升级到 Exchange 2013 并发现 EWS 托管 API 在此版本中发送转发时实际上并没有发送 TimeZoneDefinition 标头(实际上它似乎只对我们使用的 2007_SP1 这样做)。所以我用谷歌搜索了一下,发现了一个我可以连接的事件,据说它会将此标头写入序列化请求。不幸的是,这不起作用。代码会执行,但是当最终用户收到转发的电子邮件时,原始发送日期仍然是 UTC,而不是他们的时区(我用它来初始化服务客户端)。谁能明白为什么这不起作用?这是设置和发送:

var emailForward = originalEmail.CreateForward();
emailForward.ToRecipients.Add(recipient);
emailForward.Save(WellKnownFolderName.Drafts);

_service.OnSerializeCustomSoapHeaders += ServiceOnSerializeAddTimeZoneDefinitionSoapHeader;

emailForward.Send();

_service.OnSerializeCustomSoapHeaders -= ServiceOnSerializeAddTimeZoneDefinitionSoapHeader;

这是事件处理程序:

private void ServiceOnSerializeAddTimeZoneDefinitionSoapHeader(XmlWriter writer)
{
   writer.WriteRaw(Environment.NewLine + "    <t:TimeZoneContext><t:TimeZoneDefinition Id=\"" + _service.TimeZone.StandardName + "\"/></t:TimeZoneContext>" + Environment.NewLine);
}

【问题讨论】:

    标签: c# .net exchange-server exchangewebservices


    【解决方案1】:

    如果您没有使用新功能,您可以在初始化 ExchangeService 对象时继续使用 Exchange2007_SP1 版本。

    如果您正在使用新功能,那么我将首先验证您添加的元素是否确实在线上。 Enable tracing 看看是否包含。

    另一种选择是修复托管 API 以自动发出标头。 API 现在是开源的,所以你可以修改它:https://github.com/OfficeDev/ews-managed-api/。作为测试,我修改了CreateItemRequestBase.cs中的EmitTimeZoneHeader如下:

    internal override bool EmitTimeZoneHeader
    {
        get
        {
            foreach (TServiceObject serviceObject in this.Items)
            {
                // BEGIN MODIFICATION
                // Handle reply/forward case specially
                if (serviceObject is ResponseMessage)
                {
                    return true;
                }
                // END MODIFICATION
    
                if (serviceObject.GetIsTimeZoneHeaderRequired(false /* isUpdateOperation */))
                {
                    return true;
                }
            }
    
            return false;
        }
    }
    

    这对我有用。

    【讨论】:

    • 太棒了!当我了解到微软已经开源的东西时,我总是感到惊讶。这就像一个魅力。谢啦。请注意其他任何走这条路的人 - 该项目的 Master Git 分支不包含生成的 DLL 运行所需的 .resx。确保获取到 add-resx 分支:github.com/LukeMarlin/ews-managed-api/tree/adding-resx
    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多